2011-03-31 156 views
3

我想在我的應用程序中實現一個功能:右鍵單擊菜單選項

用戶右鍵單擊我的圖片框對象。好。 發生這種情況時,我的一些代碼會執行並生成一個選項列表。 然後出現一個菜單,鼠標右鍵單擊,由這些選項組成。 當用戶點擊其中一個選項時,菜單將被刪除,並且在選項index作爲參數的情況下運行一些代碼。

我的兩個問題:

  • 我怎麼能告訴用戶右鍵點擊的時候?我可以看到「點擊」事件處理程序,但包括左鍵點擊......
  • 如何創建其中一個菜單?我的意思是,繼續並右鍵點擊一下。這是我正在尋找的菜單。

回答

14

您需要實現picturebox'MouseUp事件。檢查是否單擊了右鍵,然後用所需的菜單項創建ContextMenuStrip。您可以使用添加的項目的標籤屬性來幫助識別它們,以便爲它們提供常見的Click事件處理程序。像這樣:

Private Sub PictureBox1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp 
    If e.Button <> Windows.Forms.MouseButtons.Right Then Return 
    Dim cms = New ContextMenuStrip 
    Dim item1 = cms.Items.Add("foo") 
    item1.Tag = 1 
    AddHandler item1.Click, AddressOf menuChoice 
    Dim item2 = cms.Items.Add("bar") 
    item2.Tag = 2 
    AddHandler item2.Click, AddressOf menuChoice 
    '-- etc 
    '.. 
    cms.Show(PictureBox1, e.Location) 
End Sub 

Private Sub menuChoice(ByVal sender As Object, ByVal e As EventArgs) 
    Dim item = CType(sender, ToolStripMenuItem) 
    Dim selection = CInt(item.Tag) 
    '-- etc 
End Sub 
+0

謝謝,這是偉大的。 – Voldemort 2011-04-01 23:08:38

2

您的第一個問題:您實際上只處理「點擊」事件,沒有單獨的事件用於右鍵單擊。但是看一下你爲事件傳遞的EventArgs對象:它包括哪個按鈕被按下的信息(並且如果鼠標點擊之外有任何東西會給你更多的信息)。所以你檢查if區塊內的按鈕,你就可以走了。

第二個問題:http://msdn.microsoft.com/en-us/library/system.windows.forms.contextmenustrip.aspx。如果您的菜單是預先定義的,只需在Designer上查找該組件,然後從那裏準備菜單並從點擊處理程序調用其方法Show()。如果您需要動態決定菜單條目,鏈接文檔頁面實際上包含一個示例;)

PS:oops,我只注意到Jon對這個問題的評論。我給你的答案是Windows Forms。如果你在WPF上,讓我們知道,我會更新細節(雖然概念不太相同)。

0

實際上有一個更簡單的方法來做到這一點。雙擊希望能夠右鍵單擊的控件。現在轉到頁面頂部,它應該用組合框表示; '控制'和'點擊'點擊'點擊'組合框並查找:右鍵單擊。使用ContextMenuStrip爲您的右鍵菜單。

現在你可以選擇你想要的功能。

Private Sub PictureBox1_RightClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.RightClick 
    ContextMenuStrip1.Show() 
    MsgBox("Content Activated.", MsgBoxStyle.Information, "Success!") 
End Sub 

希望我能幫上忙。 :)

Coridex73