簡體   English   中英

如果單擊鼠標按鈕,C#mouseleave和mouseenter事件將不會觸發

[英]C# mouseleave and mouseenter event wont fire if the mouse button is clicked

標題說明了一切。 我有一個充當白板的面板。 在鼠標移動時繪制鼠標軌道..工作正常,但如果鼠標離開面板的邊緣,我想調用鼠標向上事件和鼠標按下事件如果鼠標離開進入面板而單擊左按鈕

 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是一個bool,知道是否單擊了左鍵。

問題是:

如果鼠標按鈕關閉,則不會觸發leave和enter事件。

按下按鈕時,不會觸發MouseEnter和mouseLeave。 但是,當最終釋放按鈕時,如果在按鈕關閉時鼠標已移入或移出面板,則會觸發相應的mouseEnter或mouseLeave事件。 只要按下該按鈕,mouseMove事件將繼續觸發,甚至在面板邊界之外。 這允許鼠標在它超出控件邊界之后繼續拖動或者任何其他操作,並且是大多數Windows應用程序工作的方式。

如果您可以在應用程序中使用此行為,它將是一個更“標准”的用戶界面。

如果您在鼠標離開面板時確實需要觸發mouseUp,則可以在mouseMove事件中檢查鼠標位置,並在面板外按下按鈕時調用mouseUp。 在MouseMove處理程序中,您可以使用eX和eY作為位置,使用e.Button作為按鈕狀態。

當鼠標按鈕在控件外部按下並移動到內部時,面板對鼠標沒有管轄權,因為鼠標被認為是在按下按鈕時的形式或控制中移動。 因此,當您在面板外按下鼠標按鈕然后在面板內移動鼠標按鈕時,可能無法觸發mouseDown。

我不認為[mousedraw]會做得很好

click = mouseDown + mouseUp 

所以,

When mouseDown :  mousedraw = false;

When mouseUp :    mousedraw = true;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM