0

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

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;

            }

        }
    }
}
4

2 回答 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;
            }
        }
    }
}
于 2012-10-25T18:37:53.910 回答
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};
于 2012-10-25T18:36:17.487 回答