我将通用列表放在私人帮助方法中......
private void addButton()
{
List<Button> buttonList = new List<Button>();
buttonList.Add(button1);
buttonList.Add(button2);
buttonList.Add(button3);
buttonList.Add(button4);
buttonList.Add(button5);
buttonList.Add(button6);
buttonList.Add(button7);
buttonList.Add(button8);
buttonList.Add(button9);
}
我知道要调用这种方法你必须做这样的事情......
private void button1_Click(object sender, EventArgs e)
{
addButton();
foreach (button in addButton())
{
button.Enabled = false;
}
}
然而......当我尝试在addButton()中调用按钮时,“按钮”下方出现红线,表示无法找到它。请有人帮忙:))
答案 0 :(得分:4)
您的方法应该返回列表:
private List<Button> addButton()
{
List<Button> buttonList = new List<Button>();
buttonList.Add(button1);
//...
return buttonList;
}
此外,您不需要第一个addButton();
:
private void button1_Click(object sender, EventArgs e)
{
foreach (Button button in addButton())
{
button.Enabled = false;
}
}
我希望用yield关键字重写此方法:
private IEnumerable<Button> addButton()
{
yield return button1;
yield return button2;
//...
yield return button9;
}
因为您不需要创建按钮列表,只需在每次需要时浏览它们。只需枚举它们就足够了。
另请参阅Methods (C# Programming Guide),有关返回值的方法的部分:
方法可以向调用者返回一个值。如果是返回类型,则为类型 在方法名称之前列出,不是void,那么该方法可以返回 使用return关键字的值。带有关键字的语句 返回后跟一个与返回类型匹配的值将返回 该方法调用者的值。 return关键字也会停止 执行该方法。如果返回类型为void,则返回 没有值的语句对于停止执行仍然有用 方法。如果没有return关键字,该方法将停止执行 当它到达代码块的末尾。具有非空隙的方法 返回类型是使用return关键字返回值所必需的。
P.S。:在How do I shorten this generic list?中查看我的答案。可能这仍然是一种更好的方法吗?
答案 1 :(得分:0)
将您的代码更改为:
private List<Button> addButton()
{
List<Button> buttonList = new List<Button>();
buttonList.Add(button1);
buttonList.Add(button2);
buttonList.Add(button3);
buttonList.Add(button4);
buttonList.Add(button5);
buttonList.Add(button6);
buttonList.Add(button7);
buttonList.Add(button8);
buttonList.Add(button9);
return buttonList;
}
private void button1_Click(object sender, EventArgs e)
{
foreach (var button in addButton())
{
button.Enabled = false;
}
}
答案 2 :(得分:0)
像这样使用它 -
List<Button> buttonList;
private List<Button> addButton()
{
buttonList = new List<Button>();
buttonList.Add(button1);
buttonList.Add(button2);
buttonList.Add(button3);
buttonList.Add(button4);
buttonList.Add(button5);
buttonList.Add(button6);
buttonList.Add(button7);
buttonList.Add(button8);
buttonList.Add(button9);
}
private void button1_Click(object sender, EventArgs e)
{
addButton();
foreach (button in buttonList)
{
button.Enabled = false;
}
}