2011-08-27 53 views
6

標題說明了所有內容。我有一個充當白板的面板。在鼠標移動繪製鼠標軌跡..工作正常,但如果鼠標離開面板的邊緣,我想打電話給鼠標向上事件和鼠標按下事件,如果鼠標離開進入面板,而左鍵點擊如果單擊鼠標按鈕,C#mouseleave和mouseenter事件將不會觸發

private void panel2_MouseLeave(object sender, EventArgs e) 
    { 
     if (mousedraw == true) 
     { 
      panel2_MouseUp(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 0, MousePosition.X, MousePosition.Y, 0)); 
     } 
    } 

    private void panel2_MouseEnter(object sender, EventArgs e) 
    { 
     if (mousedraw == true) 
     { 
      panel2_MouseDown(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 0, MousePosition.X, MousePosition.Y, 0)); 
     } 
    } 

mousedraw是要知道如果單擊左鍵一個布爾值。

問題是:如果鼠標按鍵時

休假,進入事件將不會觸發。

+0

這是一個副作用到控制基類設置捕捉屬性爲true鼠標按下事件。這不*需要固定,繪製在控制之外界限不會出現。 –

回答

7

同時按下按鈕的MouseEnter和鼠標離開不火。但是,當按鈕最終被釋放時,如果在按鈕關閉時鼠標移入或移出面板,則會觸發相應的mouseEnter或mouseLeave事件。只要按下按鈕,mouseMove事件將繼續觸發,即使在面板的邊界之外。這允許鼠標在經過控件邊界之後繼續拖動或進行任何操作,這是大多數Windows應用程序的工作方式。

如果你可以使用你的應用程序這種行爲,這將是一個更「標準」的用戶界面。

如果你一定要火當鼠標離開面板mouseUp事件,你可以在mouseMove事件檢查鼠標位置,並調用mouseUp事件時,它是在面板外,並按下按鈕。在MouseMove處理程序中,您可以使用e.X和e.Y作爲位置,而使用e.Button作爲按鈕狀態。

當鼠標按鈕被按下並移動到控件的外部時,面板對鼠標沒有管轄權,因爲鼠標被認爲是在窗體中移動,或者是按下按鈕時的任何控件。因此,當在面板外按下鼠標按鈕然後在面板內移動時,可能無法使mouseDown觸發。

+0

謝謝你,這是信息和有益的,我現在看到的解決方案IM追求並不像我想的那樣,如果簡單(時)我處理這個問題,我會在這裏發佈解決方案,供其他人評論和受益。 – Osama

-1

我donnt認爲[mousedraw]也能做得很好

click = mouseDown + mouseUp 

所以,

When mouseDown : mousedraw = false; 

When mouseUp : mousedraw = true; 
+0

也許我沒有足夠的解釋,或者我不瞭解你。 [mousedraw]是隻要按下鼠標或鼠標向上事件被打的得到改變,所以在按下鼠標我設置mousedraw爲true的布爾,並在鼠標彈起我將它設置爲false。 – Osama

+0

我不明白這個應該怎麼用,也許你應該添加一些說明 – Breeze

相關問題