我正在动态创建按钮。如何从代码的剩余部分使用其名称(例如,在以下代码中使用“i”)选择特定按钮。
for(int i = 0; i < 5; i++)
{
button b = new button();
b.name = i.ToString();
}
答案 0 :(得分:2)
首先 - 仅仅创建按钮还不够。您需要将它们添加到某个控件中:
for(int i = 0; i < 5; i++)
{
Button button = new Button();
button.Name = String.Format("button{0}", i); // use better names
// subscribe to Click event otherwise button is useless
button.Click = Button_Click;
Controls.Add(button); // add to form's controls
}
现在,您可以搜索某些特定按钮的按钮容器的子控件:
var button = Controls.OfType<Button>().FirstOrDefault(b => b.Name == "button2");
注意:如果您将使用 buttonN 名称模式,请确保您没有其他具有相同名称的按钮,因为VS设计人员使用此模式。
更新:如果你将为所有动态按钮使用相同的事件处理程序Click事件(实际上你应该),那么即使在事件处理程序中你也可以轻松获得引发的按钮:
private void Button_Click(object sender, EventArgs e)
{
// that's the button which was clicked
Button button = (Button)sender;
// use it
}
答案 1 :(得分:0)
更简单的解决方案是搜索Controls
集合中的按钮。
Button btn = (Button) this.Controls["nameButton"];
//...DO Something
此解决方案的问题是,如果没有nameButton
的按钮,JIT将抛出异常。如果你想阻止这个,你必须在try catch
块中插入代码,或者,如果你愿意,你可以使用Sergey Berezovskiy解决方案(他使用Linq
,我认为它更清楚)< / p>
答案 2 :(得分:0)
您必须将 按钮
for (int i = 0; i < 5; i++) {
// Mind the case: Button, not button
Button b = new Button();
// // Mind the case: Name, not name
b.Name = i.ToString();
//TODO: place your buttons somewhere:
// on a panel
// myPanel.Controls.Add(b);
// on a form
// this.Controls.Add(b);
// etc.
//TODO: it seems, that you want to add Click event, something like
// b.Click += MyButtonClick;
}
然后您可以查询Controls
的适当Button
:
Button b = myPanel.Controls["1"] as Button;
if (b != null) {
// The Button is found ...
}
答案 3 :(得分:-1)
你可以把它们放在Button []中,或者你可以迭代你的Form的Controls集合。