繁体   English   中英

单击事件到自定义按钮

[英]Click event to a custom button

我有一个自定义按钮矩阵(我做的FifteenButton类继承了Button)。 我想为矩阵中的每个按钮都单击事件,该事件调用可以完成某些工作的方法。 但是我不想为矩​​阵中的每个按钮编写这样的方法。 所以,我在initializeComponent做了这样的事情:

for (int i = 0; i < 4; i++)
    for (int j = 0; j < 4; j++)
        fbarr[i, j].Click += new System.EventHandler(this.FifteenButton_Click);

FifteenButton_Click我想知道单击了哪个按钮(最好是i,j坐标)。

我应该如何做这样的事情? 也许在FifteenButton_Click的EventArgs中? 但是我不知道该怎么做。

Click事件的事件事件处理程序接收两个参数

void FifteenButton_Click(object sender, EventArgs e)

sender参数是对单击的按钮的引用,因此

void FifteenButton_Click(object sender, EventArgs e)
{
     Button btn = sender as Button;
     if(btn != null)
     {
          Console.WriteLine("Button clicked: " + btn.Text);
     }
}

但是,如果要在问题中使用的数组中检索按钮的位置,则需要更多内容。 例如,您可以使用Tag属性存储按钮的ij坐标。

for(int i = 0; i < 4; i++)
{
    for (int j = 0; j < 4; j++)
    {
        fbarr[i, j].Click += new System.EventHandler(this.FifteenButton_Click);
        fbarr[i, j].Tag = i.ToString() + "_" + j.ToString();
    }
}

现在,在事件处理程序中,您可以轻松读取按钮的Tag属性并恢复索引

void FifteenButton_Click(object sender, EventArgs e)
{
     Button btn = sender as Button;
     if(btn != null)
     {
          string[] xy = btn.Tag.ToString().Split('_');
          Console.WriteLine("Button clicked: " + xy[0] + "," + xy[1]);
     }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM