RadioButton и переключатель - PullRequest
       0

RadioButton и переключатель

4 голосов
/ 16 декабря 2010

У меня много переключателей, поэтому я получаю код, похожий на этот

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

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

Ответы [ 7 ]

6 голосов
/ 16 декабря 2010

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

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

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

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

4 голосов
/ 16 декабря 2010

Слегка хак, но вы можете настроить 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 голосов
/ 23 ноября 2011

Вот лучший метод, который я нашел для изменения выражения «if» с несколькими переключателями в переключателе регистра. Все, что вам нужно сделать с переключателем, это выбрать вкладку события в свойствах и выбрать 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;
                }

            }


        }
1 голос
/ 16 декабря 2010

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

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

0 голосов
/ 19 июня 2012

Вот решение с использованием Linq:

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

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

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

0 голосов
/ 16 декабря 2010
//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 голосов
/ 16 декабря 2010

Если вы используете ASP.NET, вы можете использовать radiobuttonlist и переключаться, как в этом примере Не знаете о форме окон или wpf

...