Все элементы управления в форме можно найти в коллекции Controls
формы (обратите внимание, что элементы управления, являющиеся частью элемента управления контейнера, будут найдены в коллекции Controls
этого элемента управления контейнера).
Youможно использовать метод расширения System.Linq
OfType
, чтобы получить только элементы управления определенного типа, выполнив что-то вроде этого:
var allCheckboxControls = Controls.OfType<CheckBox>();
Если вы хотите получить только проверенные элементы управления,затем к этому можно добавить предложение Where
:
var allCheckedCheckBoxes = Controls.OfType<CheckBox>().Where(c => c.Checked);
И, наконец, если вы хотите сравнить свойство Name
со свойством Text
(в этой части я не уверен -ваш вопрос был немного неясен), тогда вы можете сделать что-то вроде этого:
private void button1_Click(object sender, EventArgs e)
{
// Display a message box showing the Name and Text for each Checked CheckBox
foreach (var checkbox in Controls.OfType<CheckBox>().Where(c => c.Checked))
{
MessageBox.Show($"Checkbox named {checkbox.Name}, " +
$"with Text {checkbox.Text}, is checked");
}
}
Я обновил ваш пример кода, чтобы он компилировался, и чтобы он лучше выражал то, что я думаю Ваше намерение основано на ваших комментариях.Пожалуйста, исправьте это, если я ошибся.
Похоже, у вас есть соответствие между тремя вещами - Checkbox
, string
результатом вызова метода и string
для сравнения предыдущей строкис. И кажется, что вы хотите оценить сравнение строк только для отмеченных флажков .
Если это так, то, вероятно, самое простое, что можно сделать, учитывая существующий код, - простодобавьте еще одно условие к каждому существующему условию, чтобы оно возвращало значение true, если: (флажок не установлен) ИЛИ (условия выполнены).Обратите внимание, что условия не оцениваются, если соответствующий флажок не установлен , что неявно делает ваш текущий код.
Например:
while (a != 347)
{
text1 = SomeOperation1();
text2 = SomeOperation2();
text3 = SomeOperation3();
text4 = SomeOperation4();
text5 = SomeOperation5();
// This will only evaluate the text comparison for checkboxes that are checked
if ((!checkBox1.Checked || text1 == "t1") &&
(!checkBox2.Checked || text2 == "t2") &&
(!checkBox3.Checked || text3 == "t3") &&
(!checkBox4.Checked || text4 == "t4") &&
(!checkBox5.Checked || text5 == "t5"))
{
SomeOperation6();
a = 347;
}
}