有没有办法在TableLayoutPanel中更改按钮的背景颜色?
只需单击TableLayoutPanel外部的Button即可更改按钮的背景颜色。 实际上我想知道如何识别TableLayoutPanel内的按钮。 我在下面提供一个代码块。请指正。
private void button10_Click(object sender, EventArgs e)
{
Button btnClicked = sender as Button;
// wanted to convert the controls of tablelayoutpanel
if (tableLayoutPanel1.Controls is Button)
{
btnClicked = (Button)tableLayoutPanel1.Controls;
}
else
continue;
}
// Couldn't call the buttons inside the tablelayoutpanel.
Control.Controls是一个系列。它不能转换为单个对象。这个:
tableLayoutPanel1.Controls is Button
将在代码编辑器(绿色下划线)中通知消息:
给定的表达式永远不是提供的('Button')类型。
此强制转换将生成错误:
btnClicked = (Button)tableLayoutPanel1.Controls;
CS0030:无法将类型'System.Windows.Forms.TableLayoutControlCollection'转换为'System.Windows.Forms.Button'
要修改TableLayoutPanel(或任何其他容器)的所有Button控件子属性,可以枚举其Controls集合,仅考虑特定Type的子控件。
例如,将TableLayoutPanel中所有按钮的Color.Red
属性更改为BackColor
:
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";
}
在第一行中修改Control的属性,TableLayoutPanel的第一列:
在这里,我不知道坐标(0, 0)
上有什么样的控件,但我知道它是一个派生自Control类的对象。所以我可以设置一个属于这个类的属性,并且是继承的。
可能会发生特定属性与控件类型无关。在这种情况下,不会发生任何事情(您可以尝试设置TableLayoutPanel的Text属性)。
(tableLayoutPanel1.GetControlFromPosition(0, 0) as Control).BackColor = Color.Green;