2010-04-18 104 views
3

加入我具有其中几个按钮经由“的”方法更改在运行时

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

在运行时添加一种形式的控件属性。现在我想更改某个事件上按钮的文本属性。这如何实现?我已经尝试了一些东西,但都没有工作..因为按钮变量在方法内部,所以它们不在外部可用。

感谢

回答

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 
    } 
} 
+0

就是这样,这就是应该如何完成的,递归版本+1。 – 2010-04-18 07:43:18

+0

这段代码有点过头了,所以我得仔细研究一下。非常感谢! – user257412 2010-04-18 07:43:23

+0

@ user257412 - 控件在树中;诸如面板的控件可以在其中具有其他控件,并且这些控件也可以是容器控件。这段代码只是遍寻树木寻找按钮。当然,如果有什么明显的东西来识别你的*按钮(可能是'.Tag'),这将会有所帮助。 – 2010-04-18 07:44:40

0

你可以保持您所创建的按钮的参考,即你可以有它所有的动态控制列表,或者如果它只有一个按钮,使按钮对象成为一个级别的对象,以便您可以在任何地方访问它。