C# 如何知道单击了按钮数组中的哪个按钮

C# 如何知道单击了按钮数组中的哪个按钮,c#,arrays,button,C#,Arrays,Button,我有一个按钮数组,它的长度是用户输入的变量。所以我为所有按钮制作了一个eventHandler。但我有一个问题,我需要知道哪个按钮被点击,这样我就可以在eventHandler中做我想做的事情。在我的代码中它更复杂,但我已经总结了它。实际上,我只需要点击按钮的索引 public Button[] btn; public void creatingButtons() { btn = new Button[x]; for(int i=0; i

我有一个按钮数组,它的长度是用户输入的变量。所以我为所有按钮制作了一个eventHandler。但我有一个问题,我需要知道哪个按钮被点击,这样我就可以在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";
    }
公共按钮[]btn;
公共无效创建按钮()
{
btn=新按钮[x];

对于(int i=0;i发送方是被单击的对象,因此您可以使用:

private void btn_Click(object sender , EventArgs e)
{
    Button clickedBut = sender as Button;
    clickedBut.Text = "This is clicked button";
}

通过查看文档(通过谷歌搜索“c#按钮点击”找到第一个结果)

公共按钮[]基站;
公共无效创建按钮(整数计数){
btns=新按钮[计数];

对于(int i=0;i,正如其他答案所指出的,您可以使用
sender

但更好的解决方案是为按钮添加不同的单击处理程序。如果单击处理程序需要为每个按钮或按钮组执行不同的操作,那么从技术上讲,它是一个不同的处理程序。在创建按钮的过程中,您知道按钮的用途,您拥有按钮的实例,因此,请在d为其添加适当的处理程序


通过这种方式,您的代码遵循OOP原则,具有良好的关注点分离,而不是事后将一堆临时if语句拼凑在一起。

这正是传递给事件处理程序的
sender
参数的目的!但是如何添加x个EventHandler呢?我不知道将有多少个按钮可用y数组有,因为my数组的长度取决于用户输入。@dennistalovic 1)它取决于用户输入是什么意思你们到底需要根据按钮做些什么?实际上,我不需要得到我所要求的,我只需要索引。我的应用程序太复杂了,无法解释。基本上,我正在制作一些购物应用程序,所以首先用户需要添加文章,这样他们就可以和我制作的文本框一起存在。然后他可以购买、出售这些文章。他只需要添加点击按钮他想卖哪一篇文章。所以我不知道他会增加多少篇文章,这意味着我不知道我的数组的长度。所以我不能让每个按钮的私有无效,因为我不知道会有多少个按钮。我是业余爱好者,17岁,一年学习编程。
btns。当你点击时,长度还没有定义eate
btns
。此外,这是一个在创建后包含空值的数组,您必须创建按钮
btns[i]=new Button();
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...";

}