原来我开始用C#编程,嗯,我的问题是我有一个Button数组,当我初始化按钮时,我在Click事件中添加了一个方法,我想知道是否可以将参数传递给事件方法。
我有这样的矩阵初始化:
for(int x = 0; x < celdas.GetLength(0); x++)
{
for (int i = 0; i < celdas.GetLength(1); i++)
{
celdas[x, i] = new Celda();
celdas[x, i].SetBounds(i * anchoCelda, x * altoCelda, anchoCelda, altoCelda);
celdas[x, i].UseVisualStyleBackColor = true;
celdas[x, i].Click += evento;
this.panelMatriz.Controls.Add(celdas[x, i]);
}
}
在“事件”方法中,我想使用按钮的行和列。但我看到了一种将它们发送到该方法的方法。
public void evento(object sender, EventArgs e)
{
Celda celda = ((Celda)sender);
MessageBox.Show(celda.Destapada+"");
}
一个例子,当按下显示它所在行和列的按钮时。
原则上,参数不能添加到事件的处理程序中
Click
,主要是因为您不是引发事件的人,所以在任何情况下都不能向它发送任何参数。如果是自定义事件,就没有问题。也就是说,实际上有一种方法,但我会在查看其他可能性后向您展示。
过去使用的一种方法是使用
Tag
所有控件都具有的属性。此属性接受任何object
,因此可用于存储按钮本身的信息(我将使用您传递按钮的行和列的示例):这样,在您的事件处理程序中,您可以从以下位置获取数据
Tag
:另一种可能性是按钮名称包含您要传递的数据。例如,
celdas[x, i].Name= string.Format("Boton{0}{1}",x,i);
现在我们采用一种方法,实际上能够以一种非常舒适的方式将参数传递给事件:
通过这种方式,您的参数被添加到事件中,您只需像这样修改处理程序: