Control.Controls - это коллекция. Он не может быть приведен к одному объекту. Это:
tableLayoutPanel1.Controls is Button
получит уведомление в редакторе кода (зеленое подчеркивание) с сообщением:
Данное выражение никогда не относится к указанному ('Button') типу.
Это приведение приведет к ошибке:
btnClicked = (Button)tableLayoutPanel1.Controls;
CS0030: невозможно преобразовать тип
'System.Windows.Forms.TableLayoutControlCollection' для
'System.Windows.Forms.Button'
Чтобы изменить свойство всех дочерних элементов управления Button элемента TableLayoutPanel (или любого другого контейнера), вы можете перечислить его коллекцию Controls , учитывая только дочерние элементы управления определенного типа.
Например, измените на Color.Red
свойство BackColor
всех кнопок внутри TableLayoutPanel:
foreach (Button button in tableLayoutPanel1.Controls.OfType<Button>()) {
button.BackColor = Color.Red;
}
Изменить на Text
свойство всех кнопок в первой строке:
Обратите внимание, что здесь я использую универсальный тип Control
вместо Button
. Это связано с тем, что свойство Text
является общим для всех элементов управления, которые являются производными от Control . Свойство Text
определено в классе Control
.
foreach (Control ctl in tableLayoutPanel1.Controls.OfType<Button>())
{
if (tlp1.GetRow(ctl) == 0)
ctl.Text = "New Text";
}
Изменить свойство элемента управления в первой строке, первом столбце TableLayoutPanel:
Здесь я не знаю, какой тип управления расположен в координатах (0, 0)
, но я знаю, что это объект, полученный из класса Control. Поэтому я могу установить свойство, которое принадлежит этому классу и поэтому наследуется.
Может случиться так, что конкретное свойство не относится к типу элемента управления. В этом случае ничего не произойдет (вы можете попытаться установить свойство Text вашей TableLayoutPanel).
(tableLayoutPanel1.GetControlFromPosition(0, 0) as Control).BackColor = Color.Green;