如何在TableLayoutPanel中更改按钮的BackColor?

问题描述 投票:0回答:1

有没有办法在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.
c# winforms button tablelayoutpanel
1个回答
1
投票

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;
© www.soinside.com 2019 - 2024. All rights reserved.