2010-08-25 29 views
4

我試圖在Winforms中創建一個複選框數組,我有四個複選框,如果我點擊一個複選框,一個消息框應該顯示選中的複選框。C#中的複選框數組

public void checkboxtest() 
    { 

     CheckBox[] boxes = new CheckBox[4]; 
     boxes[0] = checkBox1; 
     boxes[1] = checkBox2; 
     boxes[2] = checkBox3; 
     boxes[3] = checkBox4; 


     for (int i = 0; i <= 4; i++) 
     { 

       if (boxes[i].Checked == true && boxes[i].Enabled) 
       { 
        MessageBox.Show("boxes[i] is clicked"); 
       } 

     } 
    } 

    private void checkBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     checkboxtest(); 
    } 

    private void checkBox2_CheckedChanged(object sender, EventArgs e) 
    { 
     checkboxtest(); 
    } 

持續3和4太...

我應該怎樣做呢? 謝謝。

+0

爲什麼不使用事件,你完全錯了! – 2010-08-25 06:11:30

回答

3

這個鏈接你的循環結束應該是i < 4,不i <= 4因爲你的陣列只有4個元素。另外boxes[i].Checked == true是多餘的,你可以只說boxes[i].Checked

如果你想,當你切換狀態顯示選中的複選框,您將需要一個事件處理程序添加到他們(處理CheckBox.CheckChanged事件):

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     _checkBoxes = new CheckBox[] { _checkBox1, _checkBox2, _checkBox3, _checkBox4 }; 

     foreach (var checkBox in _checkBoxes) 
      checkBox.CheckedChanged += new EventHandler(ShowCheckedCheckboxes); 
    } 

    void ShowCheckedCheckboxes(object sender, EventArgs e) 
    { 
     string message = string.Empty; 

     for (int i = 0; i < _checkBoxes.Length; i++) 
     { 
      if (_checkBoxes[i].Checked && _checkBoxes[i].Enabled) 
      { 
       message += string.Format("boxes[{0}] is clicked\n", i); 
      } 
     } 

     MessageBox.Show(message); 
    } 

    CheckBox[] _checkBoxes; 
} 
+0

@ Chris Schmich:非常感謝。 如果我需要添加一個按鈕然後在'MessageBox.Show(message);'中顯示這個'消息',該怎麼辦?所以如果我點擊按鈕,messae框應顯示而不是顯示,而我檢查一個盒子。 – SLp 2010-08-25 07:25:49

+0

@SLp:我強烈建議閱讀有關Windows Forms中的事件:http://msdn.microsoft.com/en-us/library/1h12f09z.aspx由於事件在.NET中無處不在,因此非常值得您花時間。不過,對於你的問題,你應該看看'Button.Click'事件(它是從'Control'類繼承的):http://msdn.microsoft.com/en-us/library/system.windows.forms .control.click.aspx – 2010-08-25 07:39:07