2015-05-14 40 views
0

歐萊雅已經在我的形式(0〜9)1-10十個按鈕,模擬計算器 我所有的按鈕命名爲這樣btnCalc0btnCalc1btnCalc2等..創建現有按鈕的列表

我想創建一個數組或列表這些按鈕來處理事件,但它不起作用,因爲btnCalc不存在(btnCalc+x)

List<Button> lstBtnCalc = new List<Button>(); 
for (int x = 0; x < 10; x++) 
{ 
    lstBtnCalc.Add(btnCalc+x)); 
} 

private void myClick(object sender, EventArgs e) 
{ 
    int index = lstBtnCalc.IndexOf(sender as Button); 
} 
+1

這是WinForms還是WPF,還是別的? –

回答

1

你可以用循環來填充你的數組(參見ASh的答案)。但是,這樣做會使代碼難以閱讀。良好的代碼的主要測試是可讀的代碼,所以避免「聰明」的解決方案,並保持簡單。在這種情況下,一個簡單,易於閱讀和維護,方法是:

List<Button> lstBtnCalc = new List<Button> 
{ 
    btnCalc0, btnCalc1, btnCalc2, btnCalc3, btnCalc4, 
    btnCalc5, btnCalc6, btnCalc7, btnCalc8, btnCalc9 
} 
0

您可以使用Find方法:

List<Button> lstBtnCalc = new List<Button>(); 
for (int x = 0; x < 10; x++) 
{ 
    var buttonName = string.Format("btnCalc{0}",x); 
    var button = this.Controls.Find(buttonName); 

    if (button != null) 
    { 
     lstBtnCalc.Add(button); 
    } 
} 
+0

downvote的原因是什麼? –

0

試試這個

public partial class Form1 : Form 
    { 
     List<Button> lstBtnCalc = null; 
     public Form1() 
     { 
      InitializeComponent(); 

      lstBtnCalc = new List<Button>() { button1, button2, button3, button4 }; 


     } 
    } 
-1

有點流利:

List<Button> lstBtnCalc = this.Controls.OfType<Button>().Where(a => a.Name.StartsWith("btnCacl")).ToList();