如何从FlowLayout控件更改控件的属性?

4
如何在 FlowLayoutPanel 中更改控件的属性,假设您是通过编程方式添加控件,并且每个控件的名称相同?
例如,此图像向您展示了有2个文本框和两个按钮,我该如何更改按钮2的背景颜色?假设控件是在运行时添加的。
foreach(Controls ctrl in flowlayoutpanel1.Controls)
{
//What should I put here?
}
2个回答

4

好的,最简单的方法是保留对你添加的按钮的显式引用。否则,你可以添加一个标记来区分它们(以防i18n问题)。例如,你可以将"button2"的标记设置为"button2",然后你可以使用:

foreach (Control ctl in flp.Controls) {
    if ("button2".Equals(ctl.Tag)) {
        ctl.BackColor = Color.Red;
    }

我假设你的问题是要找到实际的按钮,而不是设置背景颜色。你也可以检查控件是否为按钮并且其文本是否为“button2”,但如果文本根据UI语言而变化,则可能不是一个好主意。

预计时间: 完全忘记您也可以使用控件的Name属性来实现这一点。

如果您只想在响应按钮事件时更改按钮的背景颜色,则可以直接使用事件处理程序的sender参数。


谢谢这个,现在我知道了Tag的用途是什么。 - Rye
@Rye:我建议你在这里使用Name而不是Tag,因为那是你想要的(同时你也避免了比较字符串和对象的问题)。否则,Tag属性只是你想要附加到控件上的任何对象。如果需要,在控件中添加另一个数据块时,它可以帮助你避免子类化控件。 - Joey

3

您可以尝试使用Control.ControlCollection.Find

flowLayoutPanel1.Controls.Add(new Button() { Text = "button 1", Name = "btn1" });
Button btn1 = flowLayoutPanel1.Controls.Find("btn1", true).FirstOrDefault() as Button;
btn1.Text = "found!";

哎呀,我完全忘记了控件的 名称。糟糕。 - Joey
@Joey,你的帖子是正确的,请再发布一次,这样我就可以将其标记为答案。控件名称可以进行过滤,所以没问题。谢谢。 - Rye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接