2012-10-25 26 views
0

我的程序包含3個使用WinForms創建的靜態按鈕:button1,button2和button3。按鈕2和3設置爲enabled=False。我想要做的是通過將它們放在一個數組中,通過點擊按鈕1來啓用這兩個按鈕。這是我的代碼到目前爲止,但不起作用。任何人都可以看到我做錯了什麼?c#設置按鈕從陣列啓用真

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     Button[] btns = new Button[2]; 
     //Button[] btns = { button2} 
     public Form1() 
     { 
      InitializeComponent(); 
      Button[] btns = { button2, button3}; 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      button2.Enabled = false; 
      button3.Enabled = false; 

     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      for (int i = 1; i < 2; i++) 
      { 
       // btns[i] = new Button(); 
       //btns[i].Enabled = true; 

      } 

     } 
    } 
} 
+2

請澄清「不起作用」。有沒有錯誤信息?你有沒有調試過你的代碼?你有什麼嘗試? –

回答

4

在問題的代碼的主要問題是在這裏:

public Form1() 
{ 
    InitializeComponent(); 
    Button[] btns = { button2, button3}; 
} 

問題是在Form1構造函數中,btns是局部變量。你的代碼顯然假定你指的是同名的成員變量。

所以你初始化本地變量,然後它立即消失超出範圍。在其餘的代碼中,您引用了尚未初始化的成員變量btns

通過初始化該成員變量來解決問題。你可以這樣做:

public partial class Form1 : Form 
{ 
    private Button[] btns; 

    public Form1() 
    { 
     InitializeComponent(); 
     btns = new Button[] { button2, button3 }; 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     foreach (var btn in btns) 
     { 
      btn.Enabled = false; 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     foreach (var btn in btns) 
     { 
      if (!btn.Enabled) 
      { 
       btn.Enabled = true; 
       return; 
      } 
     } 
    } 
} 
+0

這並不能讓他們一個接一個 – Tacit

+0

再次閱讀你的問題,看看是否很明顯你想讓它們一一啓用。不管如何,我會在兩分鐘內發佈一個修改。 –

+0

啓用這2個按鈕輪到 – Tacit

3

索引默認爲0,而不是1。這應該工作:

private void button1_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; i < 2; i++) 
    { 
     btns[i].Enabled = true; 
    } 
} 

或使用foreach

private void button1_Click(object sender, EventArgs e) 
{ 
    foreach(Button btn in btns) 
    { 
     btn.Enabled = true; 
    } 
} 

而且你的數組初始化應該是:

Button[] btns = new [] { button2, button3}; 
+0

我不斷收到NullReferenceException未處理對象引用未設置爲對象的實例。 – Tacit

+0

@Tacit這是因爲你正在初始化一個局部變量而不是成員變量,正如我解釋的那樣。 –