2010-12-16 3 views
4

У меня есть много переключателей, так что я в конечном итоге с кодом, которые выглядят как этотRadioButton и переключатель

if (rbFrenchImp.Checked) 
{ 
} 
else if (rbFrenchMet.Checked) 
{ 
} 
else if (rbEnglishImp.Checked) 
{ 
} 
else if (rbFrenchEuro.Checked) 
{ 
} 
//etc... 

поэтому мне было интересно, можно ли использовать случай переключатель с кнопкой радио? Если да, то как?

+0

Это WinForms, WPF или WebForms? – 2010-12-16 13:32:49

+1

Вы используете webforms? если да, почему бы не использовать «RadioButtonList»? – 2010-12-16 13:33:08

+1

@Mr. TA: Это имеет значение? Это не вопрос о переключателях, это о `switch` с несколькими булевыми операторами. – Bobby 2010-12-16 13:34:05

ответ

6

Да, вы можете:

Вы subcribe тот же CheckChanged (или аналогичный) обработчик событий для каждой из кнопок радио. Затем вы вводите код такой:

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

Это работает на всех типах фреймов.

1

Вы имеете в виду a RadioButtonList? Если это так, вы можете просто посмотреть .SelectedValue.

В противном случае, если у вас только есть набор переключателей, вы можете использовать только один вариант, да, петля над ними в некотором роде. Я предполагаю, однако, что вы, вероятно, можете заменить схему, которую у вас есть, с RadioButtonList, чтобы добиться своего успеха.

0

Если вы используете ASP.NET вы можете использовать radiobuttonlist и переключаться как в этом example dont't знать о окнах формы или МОФ

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; 
} 
4

ощущению немного Hacky, но вы можете создать Dictionary<RadioButton, Action>, содержащий отображение между RadioButton управлением и соответствующими методами (которые являются void методами без параметров, соответствие Action делегата подписи):

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

При загрузке форма, добавить кнопки и соответствующие методы на карту:

_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 statement» с несколькими переключателями в переключателе корпуса. Все, что вам нужно сделать с помощью переключателя, это выбрать вкладку событий в свойствах и выбрать radioButton_Click в разделе «Проверено». Я надеюсь, что это будет полезно кому-то в будущем.

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:

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

Это даст вам <IENumerable>RadioButton. Поскольку ваши радиолюбители должны быть в контейнере, таком как GroupBox, этот IENumberable может содержать только 1 или 0 элементов.

Я думаю, что это должно сработать. Если это не так, исправьте меня

Смежные вопросы