我有一组按钮,按钮的长度是用户键入的变量。因此,我为所有按钮制作了一个eventHandler。但是我有一个问题,我需要知道单击了哪个Button,以便可以在eventHandler中执行我想要的操作。在我的代码中它更加复杂,但是我已经对其进行了总结。实际上,我只需要单击该按钮的索引即可。
public Button[] btn;
public void creatingButtons()
{
btn = new Button[x];
for(int i=0; i<btn.Length; i++){
Controls.Add(btn[i]);
btn[i].Click += new EventHandler(btn_Click);
}
}
private void btn_Click(object sender , EventArgs e)
{
int index;
btn[index].Text = "This is clicked button";
}
答案 0 :(得分:1)
发件人是要单击的对象,因此您可以使用:
private void btn_Click(object sender , EventArgs e)
{
Button clickedBut = sender as Button;
clickedBut.Text = "This is clicked button";
}
答案 1 :(得分:1)
通过查看文档(通过谷歌搜索“ c#按钮单击”找到的第一个结果)
public Button[] btns;
public void createButtons(int count) {
btns = new Button[count];
for (int i=0; i<count; i++) {
btns[i] = new Button()
Controls.Add(btns[i]);
btns[i].Click += new EventHandler(btn_Click);
}
}
private void btn_Click(object sender, EventArgs e) {
Button clickedButton = (Button)sender;
int index = Array.IndexOf(btns, clickedButton);
clickedButton.Text = "...button clicked...";
}
请注意,您可以将发送方强制转换为Button
,并大概使用Array.IndexOf
来查找索引。
答案 2 :(得分:0)
正如其他答案所指出的,您可以使用sender
。
但是更好的解决方案是为按钮添加其他点击处理程序。如果点击处理程序需要为每个按钮或一组按钮执行不同的操作,那么从技术上讲,它是一个不同的处理程序。在创建按钮的过程中,您知道按钮的用途,拥有按钮的实例,因此要做出决定并为其添加适当的处理程序。
通过这种方式,您的代码遵循OOP原则,可以将关注点很好地分离,而不是事后将一堆特别的if语句修补在一起。