繁体   English   中英

如何更改TableLayoutPanel中按钮的BackColor?

[英]How to change the BackColor of Buttons inside a TableLayoutPanel?

有什么方法可以更改TableLayoutPanel中Button的背景颜色吗?

单击TableLayoutPanel外部的Button可以更改Button的背景颜色。
实际上,我想知道如何识别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.

Control.Controls是一个集合。 不能将其强制转换为单个对象。 这个:

tableLayoutPanel1.Controls is Button

将在代码编辑器(绿色下划线)中通过以下消息通知您:

给定的表达式永远不会是提供的(“按钮”)类型。

这个强制转换将产生一个错误:

btnClicked = (Button)tableLayoutPanel1.Controls;

CS0030:无法将类型“ System.Windows.Forms.TableLayoutControlCollection”转换为“ System.Windows.Forms.Button”


若要修改TableLayoutPanel(或任何其他容器)的所有Button控件子级的属性,可以枚举其Controls集合,仅考虑特定类型的子级Controls。

例如,将TableLayoutPanel中所有Button的BackColor属性更改为Color.Red

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM