Как создать метод, где несколько элементов управления являются ложными в операторе «if» для C #? - PullRequest
0 голосов
/ 19 мая 2018

Как лучше всего это упростить (с помощью создания метода или иным образом):

if ((radioButton1.Checked == false) && (radioButton2.Checked == false) && (radioButton1.Checked == false) && ...more similar controls... && ((radioButton99.Checked == false))
{ 
    MessageBox.Show("Please select an option!);
}

Спасибо за внимание.Приносим извинения за причиненные неудобства или обиды.

Ответы [ 5 ]

0 голосов
/ 19 мая 2018

Если у вас есть много элементов управления (в данном случае - RadioButtons), то вы можете использовать следующий трюк - свойство Tag.

Для суммирования:

1) Установите свойство Tag с некоторой строкой, чтобы отличать ее от других элементов управления (в частности, может быть случай, когда не все элементы управления одного типа должны быть обработаны).

2) Соберите эти элементы управленияс определенной строкой в ​​Tag и обработайте их.

В вашем конкретном случае вы можете установить строку ToCheck в Tag, а затем проверить, проверены ли все кнопки RadioButton:

// Collect controls with defined string in Tag property
var radioButtons = this.Controls
    .OfType<RadioButton>() //Filter controls by type
    .Where(rb => ((string)rb.Tag) == "ToCheck"); //Get controls with defined string in Tag
// Check whether all RadioButtons are checked
bool allChecked = radioButtons.All(rb => rb.Checked);
0 голосов
/ 19 мая 2018

Вам нужно добавить свои элементы управления в общедоступную коллекцию, чтобы просто выполнить их итерацию.если у вас есть набор элементов управления одного типа, лучше поместить их в массив в конструкторе вашей формы:

 CheckBox[] MyBoxes = new CheckBox[]{ check01, check02 , ... }
 // MyBoxes is filled at Form_Load and it's usable in throughout of the form 
 bool result = true;
 for(int i=0; i<MyBoxes.Length; i++)
 { 
       if (MyBoxes[i].Checked == false)
        {  result = false; break; } 
 }

другое решение состоит в том, чтобы перебрать все элементы управления в форме:

 bool result = true;
 for(int i=0; i<this.Controls.Count; i++)
 { 
    if (this.Controls[i] is CheckBox)
    {
        if ((this.Controls[i] as CheckBox).Checked == false)
        {  result = false; break; } 
    }
 }
0 голосов
/ 19 мая 2018

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

bool optionIsSelected = ((radioButton1.Checked == true) || (radioButton2.Checked == true)...;

, а затем использовать ее в следующих случаях:

if (!optionIsSelected)
{ 
    MessageBox.Show("Please select an option!);
}
0 голосов
/ 19 мая 2018

Вы можете поместить все эти элементы управления в список, а затем проверить, проверен ли какой-либо из элементов управления в списке.Это можно сделать несколькими способами.Ниже приведены примеры двух из них.

Пример использования цикла:

bool optionSelected = false;
foreach(var control in controls) // the List is in this case called controls
{
    if(control.Checked)
    {
        optionSelected = true;
    }
}
// Check the boolean

Пример использования System.Linq:

if(!controls.Any(c => c.Checked))
{
    MessageBox.Show("Please select an option!);
}
0 голосов
/ 19 мая 2018
private bool AreAllFalse(params bool[] thingsToCheck)
{
    return things.All(t => !t);
}

Использование

if (AreAllFalse(radioButton1.Checked,radiobutton2.Checked, etc)
{ 
   //Do what you want
}

Преимущество использования ключевого слова params заключается в том, что он создает массив для вас при вызове метода.Это также позволяет вам передать только одну вещь, чтобы проверить, если вы хотите.Хотя это было бы совершенно бессмысленно, это просто делает вещи гибкими и это стоит знать

...