#c# #winforms
#c# #winforms
Вопрос:
Хорошо, у меня есть 100 кнопок в квадрате. А также другие функциональные кнопки снаружи (кнопки выхода / очистки / заливки и т.д.). Кнопка очистить изменит цвет подсветки всех кнопок форм на светло-серый, а кнопка заполнить изменит цвет подсветки всех кнопок форм на светло-синий.
private void btnClear_Click(object sender, EventArgs e)
{
foreach (Control ctrl in this.Controls)
if (ctrl is Button amp;amp; ctrl.BackColor == Color.LightBlue)
ctrl.BackColor = Color.LightGray;
}
private void btnFill_Click(object sender, EventArgs e)
{
foreach (Control ctrl in this.Controls)
if (ctrl is Button amp;amp; ctrl.BackColor == Color.LightGray)
ctrl.BackColor = Color.LightBlue;
}
Я хочу, чтобы кнопки очистки и заливки работали только со 100 кнопками в квадрате, а не с другими кнопками. Могу ли я использовать панель / групповое поле? или создать коллекцию кнопок? как-то ссылаться только на эти кнопки? Я, очевидно, новичок, поэтому любой совет и особенно код были бы очень полезны 🙂
Ответ №1:
Поскольку они уже расположены в большом квадрате, должно быть легко переместить их все на панель, как вы предложили, а затем изменять элементы управления только внутри панели, а не всей формы.
Вы можете снять ctrl is Button
флажок, поскольку единственными элементами управления на панели являются кнопки.
Кроме того, вам не нужно проверять текущий цвет задней панели кнопки перед ее изменением, если только в BackColorChanged
событии не происходит что-то, чего вы пытаетесь избежать при запуске.
private void btnClear_Click(object sender, EventArgs e)
{
foreach (var ctrl in pnlButtons)
ctrl.BackColor = Color.LightGray;
}
private void btnFill_Click(object sender, EventArgs e)
{
foreach (Control ctrl in pnlButtons)
ctrl.BackColor = Color.LightBlue;
}
В качестве альтернативы вы могли бы сохранить кнопки, которые хотите изменить, в списке. Это должно быть легко, если вы уже генерируете кнопки во время выполнения.
var myButtons = new List<Button>();
myButtons.Add(someButton); // add buttons
foreach(var btn in myButtons)
btn.BackColor = Color.LightBlue;
Ответ №2:
Да, вы можете использовать панель или групповое поле.
Например, вы могли бы поместить кнопки на панель, затем вы можете изменить свой код, чтобы ссылаться на panel1.Controls
вместо this.Controls
.