2010-12-16 7 views
4

많은 라디오 버튼이있어서라디오 버튼 및 스위치

처럼 보입니다.
if (rbFrenchImp.Checked) 
{ 
} 
else if (rbFrenchMet.Checked) 
{ 
} 
else if (rbEnglishImp.Checked) 
{ 
} 
else if (rbFrenchEuro.Checked) 
{ 
} 
//etc... 

그래서 라디오 버튼으로 스위치 케이스를 사용할 수 있습니까? 그렇다면 어떻게?

+0

WinForms, WPF 또는 WebForms입니까? –

+1

웹 양식을 사용하고 있습니까? 그렇다면 왜 'RadioButtonList'를 사용하지 않겠습니까? –

+1

@ Mr. TA : 중요합니까? 이것은 라디오 버튼에 관한 질문이 아니며 여러 부울 명령문이있는'switch '에 관한 것입니다. – Bobby

답변

6

예를 수행 할 수 있습니다

같은 CheckChanged (또는 유사) 라디오 버튼의 각 이벤트 핸들러를 subcribe. 그런 다음 아래와 같은 코드를 입력하십시오.

RadioButton btn = sender as RadioButton; 
if(btn!= null && btn.IsChecked) 
{ 
    Switch(btn.Name) 
    { 
     case "rbFrenchImpl": 
     break; 
     ... 
    } 
} 

이 코드는 모든 유형의 프레임 워크에서 작동합니다. 당신은 ASP.NET을 사용하는 경우

+4

Dang.따라서 라디오 버튼 이름을 하드 코딩해야합니다. –

+0

2017 체크인시 - 케이스에 nameof (rbFrenchImpl)를 사용할 수 있습니다! – Squirrelkiller

1

RadioButtonList을 의미합니까? 그렇다면 .SelectedValue을 찾아보십시오.

방금 ​​라디오 버튼을 선택했다면 옵션을 사용할 수 있습니다. 그러나 나는 아마도 당신이 가지고있는 계획을 RadioButtonList으로 대체하여 어떤 종류의 성공을 달성 할 수 있다고 생각합니다.

0
//create a global radioCheckStatus 
RadioCheckStatus radioStatus = RadioCheckStatus.none; 

//declare your enum 
private enum RadioCheckStatus 
{ 
     none = 0, 
     rbFrenchImp = 1, 
     rbFrenchMet = 2, 
     rbEnglishImp = 3, 
     rbFrenchEuro = 4 
} 

//On CheckedChanged event of your radioButtons set it to changed radioButtons enum 
private void rbFrenchImp_CheckedChanged(object sender, EventArgs e) 
{ 
     radioStatus = RadioCheckStatus.rbFrenchImp; 
} 

// whereever you want to check the selected value 
switch (radioStatus) 
{ 
     case RadioCheckStatus.rbFrenchImp: 
     { 
      break; 
     } 
     case RadioCheckStatus.rbFrenchEuro: 
     { 
      break; 
     } 
     case RadioCheckStatus.rbEnglishImp: 
     { 
      break; 
     } 
     case RadioCheckStatus.rbFrenchMet: 
     { 
      break; 
     } 
     default: 
      break; 
} 
+0

너무 복잡하기 때문에 각 라디오 버튼에 대해 새 CheckChanged 핸들러를 정의해야합니다. 열거 형 선언 등 ... –

+0

radiobuttons에 eventHandler가없는 경우 스위치를 사용하지 않습니다. OP는 if - else if를 switch case로 대체 할 수있는 방법을 요청했고 다른 컨트롤의 이벤트 핸들러에서 컨트롤이 만들어지고있는 경우에만이 방법이 사용됩니다 (솔루션도 작동하지 않음). – Pabuc

+0

이것이 원래의 솔루션보다 나은 이유는 무엇입니까? –

4

이 약간 해키 느낌 WPF 알고 있지만, 당신은을 포함하는 Dictionary<RadioButton, Action>을 설정할 수 있습니다

Dictionary<RadioButton, Action> _rbMethods = new Dictionary<RadioButton, Action>(); 

로드 (매개 변수가 void 방법이다의 Action 대리인 서명과 일치) RadioButton 제어 및 대응 방법 사이의 매핑 형태,지도에 버튼과 대응 방법을 추가

_rbMethods.Add(rbFrenchImp, FrenchImpAction); 
_rbMethods.Add(rbFrenchMet, FrenchMetAction); 
_rbMethods.Add(rbEnglishImp, EnglishImpAction); 

을 다음을 수행 할 수 있습니다 아주 쉽게 (서로 다른 그룹에있는 경우, 또는 버튼) 체크 라디오 버튼 방법을 해당 호출 :

foreach (RadioButton key in _rbMethods.Keys.Where(rb => rb.Checked)) 
{ 
    _rbMethods[key](); 
} 
2

여러 개의 라디오 버튼을 사용하여 "if 문"을 사례 스위치로 변경 한 가장 좋은 방법은 다음과 같습니다. 라디오 버튼 만 있으면 속성 아래에서 이벤트 탭을 선택하고 "확인 됨"이벤트 아래에서 radioButton_Click을 선택하면됩니다. 앞으로 이것이 도움이되기를 바랍니다.

var rbResult = from rb in gbState.Controls.OfType<RadioButton>() 
where rb.Checked 
select rb; 

이 당신에게 <IENumerable>RadioButton을 줄 것이다 :

private void radioButton_Click(object sender, RoutedEventArgs e) 
     { 
      RadioButton radioBtn = (RadioButton)sender; 
      if (radioBtn.IsChecked == true) 
      { 
       switch (radioBtn.Name) 
       { 
        case "radioBtnName1": 
         //do something 
         break; 

        case "radioBtnName2": 
         //do something 
         break; 

        case "radioBtnName3": 
         //do something 
         break; 

        case "radioBtnName4": 
         //do something 
         break; 
       } 

      } 


     } 
0

여기 Linq에를 사용하여 솔루션이다. RadioButton은 GroupBox와 같은 컨테이너에 있어야하므로이 IENumberable에는 1 또는 0 개의 요소 만 포함될 수 있습니다.

나는 이것이 작동해야한다고 생각합니다. 그렇지 않으면 제발 수정하십시오