2017-08-17 232 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 ...再一次感謝!希望有一天,我會讓我的頭腦圍繞着事件和他們的處理程序的雜技。 –

相關問題