2017-08-17 152 views
-3

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

我看不出你希望在这里实现什么?我甚至不知道为什么你的'GetImageDetailsHandler'应该有你想要传递给它们的参数,因为你没有使用它们,而你的'MouseClick'构造是没用的,因为它不会传递它到任何地方这样做的代表会越来越频繁地触发你点击你的列表视图的时间越长,你想要做什么? – Icepickle

回答

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 += (sender, e) => { GetImageDetailsHandler(sender, e); }; 

你实际上注册了整个FormMouseClick事件!因此GetImageDetailsHandler将在每次单击GUI上的某处时调用。

2)虽然你在string GetImageDetailsHandler(..)有一个返回值,但你不会捕到任何地方。所以你的价值就会丧失。如果你真的想用一个事件的返回值看看this post。但要实现这一点,你需要自己解决事件!你的情况并非如此。这些事件由控件提出!

+0

嗨蒙...感谢您的帮助和建议,非常感谢。我的思考过程让我相信我确实需要将路径传递给listView1_MouseClick处理程序,所以首先我创建了如下所示的内容: - private void listView1_MouseClick(object sender,MouseEventArgs e,string path)。 很明显,这没有奏效,所以我开始在因特网上搜索解决方案,并提出了我提交的垃圾。从来不知道这很容易!再次感谢... –

+0

@ BOB.G不客气。掌握事件acrogbatics并不是最简单的任务:)实际上,在您的代码中,您将在每次点击listview时注册一个新的表单的MouseClick事件。每一个都被添加!所以在点击3次listview后,3个MouseClicks事件被注册,并且在单击表单上的任何地方后点击一次,将导致方法GetImageDetailsHandler的3次调用;)祝您有愉快的一天 –

+1

@ Mong ...再一次感谢!希望有一天,我会让我的头脑围绕着事件和他们的处理程序的杂技。 –

相关问题