我想在我的應用程序中實現一個功能:右鍵單擊菜單選項
用戶右鍵單擊我的圖片框對象。好。 發生這種情況時,我的一些代碼會執行並生成一個選項列表。 然後出現一個菜單,鼠標右鍵單擊,由這些選項組成。 當用戶點擊其中一個選項時,菜單將被刪除,並且在選項index作爲參數的情況下運行一些代碼。
我的兩個問題:
- 我怎麼能告訴用戶右鍵點擊的時候?我可以看到「點擊」事件處理程序,但包括左鍵點擊......
- 如何創建其中一個菜單?我的意思是,繼續並右鍵點擊一下。這是我正在尋找的菜單。
我想在我的應用程序中實現一個功能:右鍵單擊菜單選項
用戶右鍵單擊我的圖片框對象。好。 發生這種情況時,我的一些代碼會執行並生成一個選項列表。 然後出現一個菜單,鼠標右鍵單擊,由這些選項組成。 當用戶點擊其中一個選項時,菜單將被刪除,並且在選項index作爲參數的情況下運行一些代碼。
我的兩個問題:
您需要實現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
您的第一個問題:您實際上只處理「點擊」事件,沒有單獨的事件用於右鍵單擊。但是看一下你爲事件傳遞的EventArgs對象:它包括哪個按鈕被按下的信息(並且如果鼠標點擊之外有任何東西會給你更多的信息)。所以你檢查if
區塊內的按鈕,你就可以走了。
第二個問題:http://msdn.microsoft.com/en-us/library/system.windows.forms.contextmenustrip.aspx。如果您的菜單是預先定義的,只需在Designer上查找該組件,然後從那裏準備菜單並從點擊處理程序調用其方法Show()
。如果您需要動態決定菜單條目,鏈接文檔頁面實際上包含一個示例;)
PS:oops,我只注意到Jon對這個問題的評論。我給你的答案是Windows Forms。如果你在WPF上,讓我們知道,我會更新細節(雖然概念不太相同)。
實際上有一個更簡單的方法來做到這一點。雙擊希望能夠右鍵單擊的控件。現在轉到頁面頂部,它應該用組合框表示; '控制'和'點擊'點擊'點擊'組合框並查找:右鍵單擊。使用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
謝謝,這是偉大的。 – Voldemort 2011-04-01 23:08:38