2010-04-16 65 views
6

我有一個面板,其中包含許多pictureboxes。每個圖片框已經註冊了「contextRightMenu」作爲其上下文菜單。如何在上下文菜單出現時獲取鼠標位置?

當彈出的上下文菜單是我想要的當前鼠標位置。

我已經嘗試通過使用mouseDown獲取鼠標位置並單擊,但這些事件發生在單擊上下文菜單中的一項之後,並且這太遲了。

上下文菜單的彈出事件不提供鼠標事件參數,所以我不知道如何獲取鼠標位置。

如果我能得到鼠標事件的參數很容易。

然後我就可以:

this.contextRightClick.Popup += new System.EventHandler(this.contextRightClick_Popup); 

// If EventArgs include mouseposition within the sender 
private void contextRightClick_Popup)(object sender, EventArgs e) 
{ 
    int iLocationX = sender.Location.X; 
    int iLocationY = sender.Location.Y; 

    Point pPosition = new Point(iLocationX + e.X, iLocationY + e.Y); // Location + position within the sender = current mouseposition 
} 

誰能幫助我或者得到一些鼠標事件參數,還是建議將文本菜單彈出窗口前,運行一個事件?

在此先感謝

回答

0

你可以試試圖片框的鼠標點擊事件,並得到了位置,如果它是一個右鍵單擊。

+0

現在就試試吧! – Ikky 2010-04-16 08:22:18

+0

鼠標點擊沒有任何鼠標事件參數 – Ikky 2010-04-16 08:32:34

+0

嘗試MouseDown或MouseUp事件。不知道CF中支持的東西。也看看Cursor.Position屬性。 – Amsakanna 2010-04-16 09:10:54

1

處理PictureBox的MouseClick。像這樣的東西(在vb.net):

Sub OnMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) handles YourPictureBox.mouseclick 

     If e.Button = Windows.Forms.MouseButtons.Right then 
     'if you need the screen posistion 
     PointToScreen(New System.Drawing.Point(e.X, e.Y)) 
     'if you need just the location 
     e.Location 

     end if 
end sub 
+0

謝謝,我會盡力,現在:) – Ikky 2010-04-16 08:34:13

+0

呸,似乎無法找到任何等同於你的VB解決方案... – Ikky 2010-04-16 08:47:36

+0

找到東西: 私人無效panelMouseClick(對象發件人,EventArgs的){ MouseEventArgs ARGS = e作爲MouseEventArgs; } 但ARGS剛剛返回null,反正:( – Ikky 2010-04-16 08:51:25

8

你想相對於該是正確的單擊或圖片框的光標位置相對於父面板,或父窗口或可能只是屏幕位置?

以下可能有助於作爲一個起點。在這裏,我在整個屏幕上獲取當前鼠標的cooridnates,然後使用contextRightMenu中的SourceControl,它是對右鍵單擊的控件實例的引用,我們將屏幕座標轉換爲相對於源代碼控制的點。

void contextRightMenu_Popup(object sender, EventArgs e) 
{ 
    ContextMenu menu = sender as ContextMenu; 

    if (menu != null) 
    { 
    // Get cursor position in screen coordinates 
    Point screenPoint = Cursor.Position; 

    // Convert screen coordinates to a point relative to the control 
    // that was right clicked, in your case this would be the relavant 
    // picture box. 
    Point pictureBoxPoint = menu.SourceControl.PointToClient(screenPoint); 
    } 
} 
+0

嗨! 這是父母小組的職位我感興趣,但我會考慮SourceControl,謝謝 – Ikky 2010-04-20 10:08:34