2010-03-26 62 views
6

在開發WinForms應用程序時,我遇到了我認爲是OpenFileDialog和SaveFileDialog控件中的一個錯誤。谷歌搜索發現了一位注意到相同問題的其他人,但未提供解決方案和解決方法。您可以在以下網址查看該主題:http://bytes.com/topic/visual-basic-net/answers/389470-open-file-dialog-picturebox-click-eventFileDialog DoubleClick行爲

我在處理MouseDown事件的窗體上有一個自定義控件。如果我在鼠標懸停在這個控件上的時候雙擊FileDialog控件中的一個文件(顯然它們之間有對話),MouseDown事件就會被觸發。我不認爲這是我的控制問題,因爲我之前提到的人注意到這發生在PictureBox控件中。看起來,即使在對話框中按下了鼠標按鈕(用於第二次點擊以打開文件),當對話框關閉時,事件傳遞給窗體和我的控件。

我已經嘗試禁用我的控件,而對話框處於活動狀態,但這並沒有阻止它從捕獲事件。我認爲這是因爲事件在對話框關閉後傳遞下去,所以我的控件將被重新啓用。有誰知道一種方法來防止點擊到達窗體,反過來,我的控制?另外,任何人都可以確認,如果這真的是FileDialog控件中的錯誤,或者如果我只是有一些設置配置不正確?

回答

1

當我意識到我的問題發生的原因時,我正在試驗MouseDown和MouseMove事件。當FileDialog框消失時,MouseMove事件被觸發。爲了避免兩次寫同樣的代碼塊,我試圖從MouseMove處理程序中調用我的MouseDown處理程序,並認爲某些條件(即,既不保留鼠標按鈕)也會導致MouseDown處理程序有效地執行沒有。問題在於鼠標按鈕被按下,因爲FileDialog框在MouseDown(而不是MouseClick)上消失。這導致MouseDown處理程序在我不期待它時執行其條件代碼。

從中學習的經驗:在鏈接事件處理程序時要小心謹慎。或者更好的辦法是將通用功能引入一個方法,並且不要鏈接事件處理程序。 :-)

感謝Jelly Amma讓我更加密切地關注實際事件。

3

我以前就聽說過這個問題,並且據我所知這是確保您正確處理事件隊列的問題。在沒有看到代碼的情況下,很難檢查你的用戶控件實現是否正確,但是經常重寫鼠標事件而不讓基本事件也發生會導致這種行爲。

+0

我在我的重寫的OnMouseDown(MouseEventArgs e)處理程序中調用base.OnMouseDown(e)。我曾嘗試在我的處理程序之前(在其頂部)和之後(在其底部)調用它,但這兩個位置似乎都沒有對該問題產生任何影響。我將不得不更密切地關注事件隊列,看看我能否在那裏找到某些東西。 – 2010-03-26 08:22:21