2011-11-11 51 views
1

我試圖通過使用像下面這樣的循環動態分配按鈕控制文本動態文本:分配按鈕通過環

int ButtonNumber = 1; 

while (ButtonNumber < 10) 
{ 
    //WHAT TO DO HERE!? 
    ButtonNumber++; 
} 

我想避免以下:

button1.Text = ""; 
button2.Text = ""; 
button3.Text = ""; 
button4.Text = ""; 
button5.Text = ""; 
button6.Text = ""; 
button7.Text = ""; 
button8.Text = ""; 
button9.Text = ""; 

回答

10

理想的情況下,不要首先沒有button1,button2等變量。有一個集合(如List<Button>):

private List<Button> buttons = new List<Button>(); 

(編輯:你需要填充這個地方,當然,...)

然後將文本以後更新:

for (int i = 0; i < buttons.Count; i++) 
{ 
    buttons[i].Text = "I'm button " + i; 
} 

不幸的是,這對設計師來說並不好玩。

可以通過ID獲取控件,但我個人嘗試不這樣做。如果你真的想:

for (int i = 1; i <= 10; i++) 
{ 
    Control control = Controls["button" + i]; 
    control.Text = "I'm button " + i; 
} 
+0

難道你還需要實例每個Button對象?也將它們添加到列表中。 – Tudor

+1

@Tudor:是的,我假設發生在別處...... –

+1

爲什麼不建議使用通過ID獲取控件? 它就像一個魅力!? – Birdman

1

創建按鈕的排列:

Button[] buttons = new Button[10]; 
for(int i = 1; i < 10; i++) 
{ 
    buttons[i] = new Button(); 
    buttons[i].Text = ""; 
} 
0

你也可以這樣做簡單,假設如果你有所有的按鈕在你的形式

foreach (Control c in this.Controls) 
      { 
       if (c is Button) 
       { 
        c.Text = "MyButton" + (c.TabIndex + 1); 
       } 
      } 
+0

@Alex,一旦我提供了,就檢查代碼部分。 –

0

//試試這個

  Button btn; 
     for (int n_i = 0; n_i < 10; n_i++) 
      { 
      btn = (Button)Controls.Find("button" + n_i,true)[0]; 
      btn.Text = ""; 
      }