Kas*_*hif 3 c# button winforms
我正在尝试构建一个应用程序,用户可以在其中选择类别,并根据它显示其子类别,这些子类别是按钮,它们是动态创建的.
现在,由于按钮是动态创建的,所以我很困惑如何在button_click事件下编写代码,因为我不知道有多少子类别.
那么有什么方法可以执行特定按钮的click事件,以便我可以执行某些命令?
EDITED
这是我试过的代码
Button btnDynamicButton = new Button();
private void btnclick_Click(object sender, EventArgs e)
{
label2.Text = btnDynamicButton.Text;
}
private void btnappetizer_Click(object sender, EventArgs e)
{
groupBox2.Visible =false;
DataTable dt = new DataTable();
dt = itemmasterbl.SelectallrecordFromtblItem(btnappetizer.Text);
for (int i = 0; i < dt.Rows.Count; i++)
{
string name = "Appetizer" + DynamicButtonCount;
Button btnDynamicButton1 = new Button();
btnDynamicButton1.Name = name;
btnDynamicButton1.Text = name;
btnDynamicButton1.Size =
new System.Drawing.Size(150, 30);
btnDynamicButton1.Location =
new System.Drawing.Point(180, DynamicButtonCount * 30);
btnDynamicButton1.Click +=new EventHandler(btnclick_Click);<br>
Controls.Add(btnDynamicButton1);
DynamicButtonCount++;
btnDynamicButton = btnDynamicButton1;
}
}
Run Code Online (Sandbox Code Playgroud)
一旦我这样做,它根据开胃菜下的itemmaster DB中的值的数量创建三个按钮,但是一旦我点击三个按钮中的任何一个,标签只显示最后一个按钮文本,因为在最后一行我有:
btnDynamicButton = btnDynamicButton1;
这将持续按钮信息,但我想要按哪个按钮,标签应显示相应的文字.我怎样才能做到这一点.
您可以将所有逻辑放入一个处理程序中:
System.Windows.Forms.Button b = new System.Windows.Forms.Button();
b.Click += new EventHandler(b_Click);
//finally insert the button where it needs to be inserted.
...
void b_Click(object sender, EventArgs e)
{
MessageBox.Show(((System.Windows.Forms.Button)sender).Name + " clicked");
}
Run Code Online (Sandbox Code Playgroud)
要编辑:
您正在Field中存储按钮的引用btnDynamicButton.因此,它总是会被您创建的最新按钮覆盖.你应该不使用字段引用按钮.senderclick-handler 的参数包含已单击的按钮元素.请参阅上面的代码:简单转换sender为Button您知道单击了哪个按钮:
private void btnclick_Click(object sender, EventArgs e)
{
Button btn = (Button)sender
label2.Text = btn.Text;
}
Run Code Online (Sandbox Code Playgroud)