c#将数组中的按钮设置为启用true

时间:2012-10-25 18:33:12

标签: c# arrays winforms visual-studio-2010 button

我的程序包含3个使用WinForms创建的静态按钮:button1,button2和button3。按钮2和3设置为enabled=False。我想要做的是通过将按钮1​​放在一个数组中来依次启用这两个按钮。到目前为止,这是我的代码,但不起作用。谁能看到我做错了什么?

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 个答案:

答案 0 :(得分: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;
            }
        }
    }
}

答案 1 :(得分: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};