【问题标题】:Passing Extra Argument to Event Handler将额外参数传递给事件处理程序
【发布时间】:2017-08-17 11:08:07
【问题描述】:

我有一个 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();
}

【问题讨论】:

  • 我看不到您希望在这里实现什么?我什至不明白为什么你的 GetImageDetailsHandler 应该有你想要传递给它们的参数,因为你没有使用它们,而你的 MouseClick 构造毫无用处,因为它没有在任何地方传递它是匿名的代理这样做只会触发越来越频繁,您单击列表视图的时间越长,您要做什么?

标签: c# events


【解决方案1】:

当您单击listView 时,将引发事件MouseClick。然后将执行方法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); };

您实际上注册了整个FormMouseClick 事件!所以GetImageDetailsHandler 将在您每次单击 GUI 上的某个位置时被调用。

2) 尽管您在string GetImageDetailsHandler(..) 中有一个返回值,但您在任何地方都没有发现。所以你的价值就消失了。如果您真的想使用事件的返回值,请查看this post。但要实现这一点,您需要自己触发事件!而你的情况并非如此。事件由控件引发!

【讨论】:

  • 嗨,蒙...感谢您的帮助和建议,非常感谢。我的思考过程让我相信我确实需要将路径传递给 listView1_MouseClick 处理程序,所以首先,我创建了一些看起来像这样的东西:- private void listView1_MouseClick(object sender, MouseEventArgs e, string path)。显然这不起作用,所以我开始在互联网上寻找解决方案,并提出了我提出的垃圾。从来不知道这么容易!再次感谢...
  • @BOB.G 欢迎您。掌握事件杂技并不是最简单的任务 :) 实际上,使用您的代码,您将在每次单击列表视图时注册一个表单的新 MouseClick 事件。每一个都加了!因此,在列表视图上单击 3 次后,注册了 3 个 MouseClicks 事件,并且在表单上的任意位置单击一次将导致方法 GetImageDetailsHandler 的 3 倍调用;)祝您有美好的一天
  • @Mong...再次感谢!希望有一天我能对事件及其处理程序的杂技有所了解。
猜你喜欢
  • 2021-05-30
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 2012-09-01
相关资源
最近更新 更多