假設我有一個創建的Form類和一個CustomControl類。C#手動觸發的MouseDown無法觸發MouseUp
在我的窗體上我有兩個CustomControl實例和一個Panel。 (MouseEnter)(用於指定不同的遊標),MouseLeave(用於重置遊標),MouseDown(用於啓動拖動線程)和MouseUp(用於殺死拖動線程並執行後拖動邏輯)。 )。
我可以將面板拖到CustomControl上。當我這樣做時,Form中的代碼檢測到我做了什麼,並從Form.Controls中刪除Panel,將一些元信息傳遞給CustomControl,然後它自己創建一個Panel。
基本上,它是一個交接。 Panel對象現在屬於CustomControl。 (這是必要的。這是複雜的,解釋爲什麼,但想象中的自定義控件具有類似滾動條,而對於面板屬於CustomControl,使其與CustomControl滾動這是必要的。)
現在,當我點擊CustomControl中的面板時,面板的MouseDown被觸發,它從CustomControl.Controls中被刪除,併發送一些元信息返回到Parent(表單),然後重新創建Panel,因爲它是在開始 - 然而已經處於拖動狀態,以便用戶可以將Panel重新定位到第二個CustomControl上,或者可以將其重新放回到Form上。 Form首次初始化時創建Panel的函數與現在創建它的函數完全相同。
但是,面板的MouseDown沒有被觸發。鼠標爲,但事件未觸發,因爲鼠標在創建時已關閉。所以,我在Form中的函數中手動調用MouseDown處理函數,該函數接受來自CustomControl的元信息。
不幸的是,這隻有一半工作。 MouseUp處理程序未觸發。我可以按照預期從CustomControl中取出面板並在窗體上拖動它,但當釋放鼠標時,面板將卡在光標上。
我不確定如何解決這個問題?
一個理想的解決辦法是,當元信息被傳遞迴形式,是創建新的面板,MouseDown事件以某種方式自然就像用戶剛剛點擊在面板上的火。
僅僅因爲您調用了Mousedown事件,並不意味着面板認爲鼠標已被按下。看看實際發送的mousedown窗口消息到面板。 – 2011-04-15 02:53:29