2010-04-18 150 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

你可以保持您所創建的按鈕的參考,即你可以有它所有的動態控制列表,或者如果它只有一個按鈕,使按鈕對象成爲一個級別的對象,以便您可以在任何地方訪問它。