【问题标题】:How to change the property of a control from a flowlayoutpanel?如何从 flowlayoutpanel 更改控件的属性?
【发布时间】:2010-10-08 05:17:13
【问题描述】:

假设您以编程方式添加控件并假设每个控件的名称相同,如何更改 flowlayoutpanel 中控件的属性?

例如,这张图片显示有 2 个文本框和两个按钮, 如何更改按钮 2 的背景颜色?假设控件已在运行时添加。

foreach(Controls ctrl in flowlayoutpanel1.Controls)
{
//What should I put here?
}

【问题讨论】:

    标签: c# winforms user-controls flowlayoutpanel


    【解决方案1】:

    嗯,最简单的方法是保留对您正在添加的按钮的显式引用。否则,您可以添加一个标签来区分它们(以对抗 i18n 问题)。例如。您可以将“button2”的标签设置为“button2”,然后您可以使用:

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

    }

    我假设您的问题是再次找到实际按钮而不是设置背景颜色。您同样可以检查控件是否为按钮,其文本是否为“button2”,但如果文本可以根据 UI 语言而更改,这可能不是一个好主意。

    ETA:完全忘记了你也可以使用控件的Name 属性。

    如果您只是想更改按钮的背景颜色以响应来自按钮的 事件,您可以使用事件处理程序的 sender 参数。

    【讨论】:

    • 谢谢这个,现在我知道Tag的用途了。
    • @Rye:我建议你在这里使用Name 而不是Tag,因为这就是你想要的(你也避免了比较字符串和对象的问题,那么) .否则,Tag 属性就是您想要附加到您可能需要的控件上的任何对象。如果您愿意,如果您只需要控件中的另一条数据,它可以为您节省控件的子类化。
    【解决方案2】:

    你可以试试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!";
    

    【讨论】:

    • 嗯,我完全忘记了控件name。哎哟。
    • @Joey 您的帖子是正确的,请重新发布,以便我将其标记为答案。控件名称可以被过滤,所以它很好。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多