EventHandler 带参数传送
EventHandler 带参数传递
忽略标题吧。 基本流程是这样的。
通过代码生成的PictureBox控件。 需要添加右键删除功能。
删除的时候要获取到ID(ID值存在PictureBox.Tag中)。
代码如下:
然后在dpb_RClick中进行处理,dpb_RClick用
所以想问问PictureBox.Tag里的ID值怎么传递下去,然后进行操作。
------解决思路----------------------
首先,你可以使用“匿名委托”功能,例如写
这样,当执行
如果使用4、5年前的c#,可能没有匿名委托功能。那么你可以封装一个自己的class,例如
这样,当 dpb_RClick 方法执行时,就可以取到 ID 参数了。
忽略标题吧。 基本流程是这样的。
通过代码生成的PictureBox控件。 需要添加右键删除功能。
删除的时候要获取到ID(ID值存在PictureBox.Tag中)。
代码如下:
void dpb_MouseDown(object sender, MouseEventArgs e)
{
Control control = sender as Control;
//label3.Tag = control.Tag;/////忽略之,这是后来想到的的笨办法 = =
if (e.Button == MouseButtons.Right)
{
ContextMenu menu = new ContextMenu();
menu.MenuItems.Add("删除");
menu.MenuItems[0].Click += new EventHandler(dpb_RClick);
menu.Show(control, new Point(e.X, e.Y));
}
}
然后在dpb_RClick中进行处理,dpb_RClick用
Control control = sender as Control;
control.Tag//----这里想获取ID值的,结果是null值了。
所以想问问PictureBox.Tag里的ID值怎么传递下去,然后进行操作。
------解决思路----------------------
首先,你可以使用“匿名委托”功能,例如写
menu.MenuItems[0].Click +=(s, arg)=>
{
menu_delete((string)control.Tag);
};
这样,当执行
private void menu_delete(string id){ ...}方法时,就传递了正确的 ID。
如果使用4、5年前的c#,可能没有匿名委托功能。那么你可以封装一个自己的class,例如
public class MyDeleteAction也就说,你的 dpb_RClick 方法不是定义在当前的 class 内的,而是定义在另外一个对象类型的。然后你的代码可以修改为
{
public string ID;
public void dpb_RClick(object sender, EventArgs e)
{
......
}
}
ContextMenu menu = new ContextMenu();
menu.MenuItems.Add("删除");
MyDeleteAction x = new MyDeleteAction();
x.ID = (string)control.Tag;
menu.MenuItems[0].Click += new EventHandler(x.dpb_RClick);
这样,当 dpb_RClick 方法执行时,就可以取到 ID 参数了。