Я использую это прямо сейчас, чтобы очистить таблицу крестиков-ноликов в Microsoft Windows Forms.
button1.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = true;
button5.Enabled = true;
button6.Enabled = true;
button7.Enabled = true;
button8.Enabled = true;
button9.Enabled = true;
button1.Text = "";
button2.Text = "";
button3.Text = "";
button4.Text = "";
button5.Text = "";
button6.Text = "";
button7.Text = "";
button8.Text = "";
button9.Text = "";
но это слишком долго, поэтому я хотел использовать цикл for, подобный этому
for (int i = 1; i < 10; i++)
{
button[i].Enable = true;
button[i].Text = "";
}
но это не работает, может ли кто-нибудь предложить решение?
«это не работает» — это нет допустимое описание ошибки. также: вы на самом деле помещать свои кнопки в массиве?
(Вы можете пофантазировать, написав код для генерации ваших кнопок, так что у вас даже не будет button1
, и вы пойдете прямо к массиву, но это шаг вперед: начните с простого)
вы можете перебирать массив Элементы управления родительских кнопок, например, вы можете переместить все кнопки в Панель и использовать foreach для перебора всех элементов управления внутри него:
foreach(var control in Panel1.Controls) {
if (control is Button button)
{
button.Text = "";
button.Enabled = true;
}
}
Это кажется хрупким: порядок кнопок может иметь значение для OP, но я не вижу, чтобы это было определено здесь
Это также тяжеловесно. Маловероятно, что кнопки все в форме являются кандидатами на эту обработку. Кнопки «ОК» и «Отмена», если они есть на форме, например, не будут.
Я понимаю, о чем вы думаете, но вы не можете динамически изменить имя переменной, которую пытаетесь изменить, в цикле for, подобном этому.
В цикле for
он будет перебирать начальное значение, пока не достигнет условия остановки. Циклы for
отлично подходят, когда у вас есть структура данных, например List
или Array
, где вы можете перечислять, чтобы получить или установить значения.
Код, который у вас есть для цикла for
, начинает перечислять либо Array
, либо List
с именем button
. Чтобы исправить это, я рекомендую добавить кнопки в Array
, а затем вы можете использовать цикл foreach
для установки значений:
foreach (Button button in buttons){
button.Enabled = true;
button.Text = "";
}
Это решение очень хорошо работало с моим кодом и было очень полезным, я не использовал массив для кнопок, которые, как я вижу сейчас, сделают большую часть работы во всей программе, которую я делаю намного проще и разборчивее. Спасибо
Почему бы не поместить все ваши кнопки в массив? Затем вы можете получить к ним доступ как к элементам массива.
var buttons = new[] { button1, button2, button3, ... }