在运行时更改已添加的控件的属性

3

我有一个表单,在其中通过“for”方法动态添加了多个按钮

 public Form()
 {
 for (int i = 0 ... )
  Button b = new Button() 
  b.text =  (string) i ;
  etc..
  etc..
  }

现在我希望在某个事件中更改按钮的文本属性。如何实现这一点?我尝试了一些方法,但都没有成功......由于按钮变量在方法内部,因此在外部不可用。

谢谢

2个回答

4

变量不是很重要(虽然如果这样做会更容易,你可以将它们存储在单个List<T>字段中)。通常的做法是浏览Controls集合(必要时进行递归)。

foreach(Control control in someParent.Controls) {
    Button btn = control as Button;
    if(btn != null) {
        btn.Text = "hello world";
        // etc
    }
}

以上假设所有按钮都添加到同一父控件中;如果不是这种情况,则需要递归遍历:
void DoSomething(Control parent) {
    foreach(Control control in parent.Controls) {
        Button btn = control as Button;
        if(btn != null) {
            btn.Text = "hello world";
            // etc
        }
        DoSometing(control); // recurse
    }
}

就是这样,应该这样做,对于递归版本加一。 - Darin Dimitrov
这段代码有点超出我的理解范围,所以我需要花些时间来学习。非常感谢! - user257412
@user257412 - 这些控件在一个树中;像面板这样的控件可以包含其他控件,而那些控件也可能是容器控件。这段代码只是简单地遍历树以查找按钮。当然,如果有什么明显的标识来识别您的按钮(例如.Tag),那将会很有帮助。 - Marc Gravell

0

您可以保留您所创建的按钮的引用,即您可以将所有动态控件放入一个列表中,或者如果只有一个按钮,则将按钮对象设置为类级别对象,以便您可以在任何地方访问它。


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