将额外参数传递给事件处理程序

时间:2017-08-17 11:08:08

标签: c# events

我有一个ListView框,其中包含5列和最后一列 列存储图像的路径。我的愿望是访问图像路径和 将它发送到listView1_MouseClick事件处理程序。我尝试了一些选项,但由于我对事件处理程序的了解有限,没有一个能够产生预期的结果。非常感谢有人能提前帮助我完成我的任务和感谢!

以下是两个程序: -

public string GetImageDetailsHandler(object sender, EventArgs e){
      return(listView1.SelectedItems[0].SubItems[4].ToString());

}

private void listView1_MouseClick(object sender, MouseEventArgs e){
     ImageForm image = new ImageForm();

     MouseClick += (sender, e) => { GetImageDetailsHandler(sender, e); };
     image.pictureBox1.Image = Image.FromFile(GetImageDetailsHandler);

    image.ShowDialog();
}

1 个答案:

答案 0 :(得分:1)

单击MouseClick时,将引发事件listView。然后将执行方法listView1_MouseClick。你需要的只是拉出这个方法中的路径:

private void listView1_MouseClick(object sender, MouseEventArgs e)
{
     ImageForm image = new ImageForm();

     string path = listView1.SelectedItems[0].SubItems[4].ToString()
     image.pictureBox1.Image = Image.FromFile(path);

     image.ShowDialog();
}

详细的问题描述:

1)当您在此行中注册MouseClick事件时:

MouseClick += (sender, e) => { GetImageDetailsHandler(sender, e); };

您实际注册了整个MouseClick的{​​{1}}事件!因此,每次单击GUI上的某个位置时,都会调用Form

2)虽然你在GetImageDetailsHandler中有一个返回值,但你不会抓到任何地方。所以你的价值就会消失。如果您真的想要使用事件的返回值,请查看this post。但要实现这一目标,您需要自己开火!在你的情况下情况并非如此。这些事件由控件引发!