2016-10-11 83 views
1

VB.NET Visual Studio如何在按鈕上獲取鼠標位置?

我有幾個按鈕,我在運行時添加,並且我有一個Click事件的MouseDown事件處理程序。左鍵單擊工作得很好,但右鍵單擊事件觸發,但沒有做我需要的事情。

If e.Button = Windows.Forms.MouseButtons.Right Then 
    If sender.Bounds.Contains(e.Location) = True Then 
     ContextMenuStrip.Show(Cursor.Position) 
    End If 
End If 

我縮短了這一點,使其更易於閱讀。

當我看着e.Location時,它顯示了鼠標相對於按鈕的位置。 因此,如果我的按鈕在400,600處,鼠標的位置應該在該區域,但鼠標位置會返回20,30,因爲它位於按鈕內部20,30。

我該如何正確點擊右鍵事件?

+0

你想通過檢查位置來檢查/陷阱? – Plutonix

+0

我想爲每個按鈕添加一個上下文菜單。 – xRuhRohx

回答

1

MouseDown當鼠標停在您的控件上時,事件會引發,因此鼠標一定在您的控制範圍內,您無需檢查該按鈕是否包含e.Location

要顯示上下文菜單條,如果將上下文菜單條分配給控件的ContextMenuStrip屬性,則不需要執行任何操作,菜單將自動顯示。但是,如果因任何原因要處理MouseDown事件,您可以使用這些選項之一:

  • ContextMenuStrip1.Show(DirectCast(sender, Control), e.Location)

  • ContextMenuStrip1.Show(MousePosition)

注:只是爲了學習的目的,如果您要檢查是否在您的按鈕e.Location,您可以使用以下任一選項:

  • Button1.ClientRectangle.Contains(e.Location)
  • Button1.Bounds.Contains(Button1.Parent.PointToClient(Button1.PointToScreen(e.Location)))

或者用PointToClientPointToScreenRectangleToClientRectangleToScreen的控制方法的一些其它組合。

相關問題