有什么方法可以更改TableLayoutPanel中Button的背景颜色吗?
通过单击TableLayoutPanel外部的按钮,可以更改按钮的背景颜色。
实际上,我想知道如何识别TableLayoutPanel中的Button。
我在下面提供一个代码块。请纠正我。
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.
答案 0 :(得分:1)
Control.Controls是一个集合。不能将其强制转换为单个对象。
tableLayoutPanel1.Controls is Button
将在代码编辑器(带绿色下划线)中通过消息通知
给定的表达式永远不会是所提供的(“按钮”)类型。
此强制转换将产生错误:
btnClicked = (Button)tableLayoutPanel1.Controls;
CS0030:无法转换类型 'System.Windows.Forms.TableLayoutControlCollection' 'System.Windows.Forms.Button'
要修改TableLayoutPanel(或任何其他容器)的所有Button控件子级的属性,您可以枚举其Controls集合,而仅考虑特定类型的子控件。
例如,将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";
}
在TableLayoutPanel的第一行,第一列中修改控件的属性:
在这里,我不知道哪种控件位于坐标(0, 0)
上,但是我知道它是从Control类派生的对象。因此,我可以设置一个属于此类且因此被继承的属性。
特定属性与控件类型不相关可能会发生。在这种情况下,什么也不会发生(您可以尝试设置TableLayoutPanel的Text属性)。
(tableLayoutPanel1.GetControlFromPosition(0, 0) as Control).BackColor = Color.Green;