C# 在运行时添加C按钮点击代码的数组
要在运行时创建按钮及其单击事件,我使用:C# 在运行时添加C按钮点击代码的数组,c#,C#,要在运行时创建按钮及其单击事件,我使用: Button b = new Button(); b.Name = "btn1"; b.Click += btn1_Click; 但是现在我有一系列的按钮要在运行时创建;如何设置每个按钮的事件-我不能插值,因为它不是字符串 Button[] b = new Button(Count); for (int i=0; i < Count; i++) { b[i] = new Button(); b[i].Name = "btn" + i;
Button b = new Button();
b.Name = "btn1";
b.Click += btn1_Click;
但是现在我有一系列的按钮要在运行时创建;如何设置每个按钮的事件-我不能插值,因为它不是字符串
Button[] b = new Button(Count);
for (int i=0; i < Count; i++)
{
b[i] = new Button();
b[i].Name = "btn" + i;
b[i].Click += ??????
}
我该怎么办?您可以将所有按钮绑定到同一个事件,因此将行像b[I]一样放置。单击+=button\u-Click 然后在按钮单击事件中,您可以区分按钮,并采取适当的操作 例如:
public void button_Click(object sender, ButtonEventArgs e)
{
if( sender == b[0] )
{
//do what is appropriate for the first button
}
...
}
您可以将所有按钮绑定到同一个事件,因此请像b[i]那样放置行。单击+=按钮\u单击 然后在按钮单击事件中,您可以区分按钮,并采取适当的操作 例如:
public void button_Click(object sender, ButtonEventArgs e)
{
if( sender == b[0] )
{
//do what is appropriate for the first button
}
...
}
备选案文1:
您可以传递lambda函数,并根据数组中的按钮索引创建处理程序,如下所示:
for (int i=0; i < Count; i++)
{
b[i] = new Button();
b[i].Name = "btn" + i;
b[i].Click += (sender, args) =>
{
// your code
}
}
Button[] b = new Button[Count];
for (int i=0; i < Count; i++)
{
b[i] = new Button();
b[i].Name = "btn" + i;
b[i].Click += (s, e) => { /*do something*/ };
}
备选案文3:
您可以指定处理程序函数:
b[i].Click += YourHandlerFunction
// ....
// The handler signature also has to have the correct signature
void YourHandlerFunction(object sender, ButtonEventArgs args)
{
// your code
}
备选案文1:
您可以传递lambda函数,并根据数组中的按钮索引创建处理程序,如下所示:
for (int i=0; i < Count; i++)
{
b[i] = new Button();
b[i].Name = "btn" + i;
b[i].Click += (sender, args) =>
{
// your code
}
}
Button[] b = new Button[Count];
for (int i=0; i < Count; i++)
{
b[i] = new Button();
b[i].Name = "btn" + i;
b[i].Click += (s, e) => { /*do something*/ };
}
备选案文3:
您可以指定处理程序函数:
b[i].Click += YourHandlerFunction
// ....
// The handler signature also has to have the correct signature
void YourHandlerFunction(object sender, ButtonEventArgs args)
{
// your code
}
这取决于你想做什么!如果要为所有单击调用相同的方法,请执行以下操作:
Button[] b = new Button[Count];
for (int i=0; i < Count; i++)
{
b[i] = new Button();
b[i].Name = "btn" + i;
b[i].Click += OnClick
}
private void OnClick(object sender, RoutedEventArgs e)
{
// do something
}
如果要对每个按钮执行不同的操作,例如,根据索引,可以执行以下操作:
for (int i=0; i < Count; i++)
{
b[i] = new Button();
b[i].Name = "btn" + i;
b[i].Click += (sender, args) =>
{
// your code
}
}
Button[] b = new Button[Count];
for (int i=0; i < Count; i++)
{
b[i] = new Button();
b[i].Name = "btn" + i;
b[i].Click += (s, e) => { /*do something*/ };
}
这取决于你想做什么!如果要为所有单击调用相同的方法,请执行以下操作:
Button[] b = new Button[Count];
for (int i=0; i < Count; i++)
{
b[i] = new Button();
b[i].Name = "btn" + i;
b[i].Click += OnClick
}
private void OnClick(object sender, RoutedEventArgs e)
{
// do something
}
如果要对每个按钮执行不同的操作,例如,根据索引,可以执行以下操作:
for (int i=0; i < Count; i++)
{
b[i] = new Button();
b[i].Name = "btn" + i;
b[i].Click += (sender, args) =>
{
// your code
}
}
Button[] b = new Button[Count];
for (int i=0; i < Count; i++)
{
b[i] = new Button();
b[i].Name = "btn" + i;
b[i].Click += (s, e) => { /*do something*/ };
}
谢谢,我试过了,发现这是更好的答案。如果没有sender==b[o],并且我将数组放入lamda函数中,它将抛出一个异常,因为调用该数组时该数组为null。谢谢,我尝试了,发现这是更好的答案。如果没有sender==b[o],并且我将数组放入lamda函数中,它将抛出一个异常,因为调用该数组时该数组为null。