所以在我的程序中我创建了一个带有按钮和数字值的结构...像这样
struct box
{
public int numberValue;
public Button button;
}
然后我制作了这个结构的二维数组
box[,] boxes = new box[20, 20];
现在我做的是制作 400 个按钮并将它们分配给数组的每个索引...像这样
private void createBoxes()
{
int positionX;
int positionY;
for (int i = 0; i < 20; i++)
{
for (int j = 0; j < 20; j++)
{
positionX = 20 + (25 * i);
positionY = 20 + (25 * j);
boxes[i, j].button = new System.Windows.Forms.Button();
boxes[i, j].button.Location = new System.Drawing.Point(positionX,positionY);
boxes[i, j].button.Size = new System.Drawing.Size(25, 25);
this.Controls.Add(boxes[i, j].button);
boxes[i, j].button.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
boxes[i, j].button.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
boxes[i, j].button.Visible = true;
boxes[i, j].button.Name = "button";
boxes[i, j].button.Click += new EventHandler(buttonClick);
}
}
}
现在,当我创建事件处理程序时,我想发送“boxes[i,j]”而不仅仅是“boxes[i,j].button”,是否可以这样做?
最佳答案
除了定义您自己的匿名事件处理程序之外,还有一种简单的方法可以执行您想要的操作:
boxes[i, j].button.Tag = boxes[i, j];
然后:
private void buttonClick(object sender, EventArgs e)
{
var box = ((Button)sender).Tag as box;
}
关于c# - 事件处理程序和发送者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5798205/