我的程序包含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;
}
}
}
}
答案 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};