2013-08-22 30 views
1

帶有5個標籤的winforms應用程序。 每個標籤都是從XML文件中提取的變量。 我想要一個右鍵單擊事件將數據拉入contextmenustrip。將變量傳入contextmenustrip

現在我已經成功了一半。我可以用右鍵點擊複製網址:

Private Sub Label1_Click(sender As Object, e As MouseEventArgs) Handles Label1.MouseClick 
    Dim x As String = Label1.Text 
    If e.Button = Windows.Forms.MouseButtons.Right Then 
     Dim var As String = xmlinteraction.returnLink(x) 
     Clipboard.SetText(var, TextDataFormat.Text) 
    ElseIf e.Button = Windows.Forms.MouseButtons.Left Then 
     xmlinteraction.appCall(x) 
    End If 
End Sub 

我更希望用戶被提示,看他們是否想複製到剪貼板,如果我可以作出這樣的工作,我還有其他三個菜單項的想法我可以輕鬆使用。 我可以將複製的變量傳遞給contextmenustrip的第一個菜單項。那麼我可以爲所有5個標籤創建一個contextmenustrip,並根據右鍵單擊哪個標籤,如果右鍵單擊contextmenustrip的「Copy Link」,它會給出正確的值?

+0

我想出了一種方法來爲每個標籤添加一個contextmenustrip。但是可以有5到30個,我希望它可以在一個winform中擴展而不是30個contextmenus。 –

回答

3

對於每個標籤,您不需要單獨使用ContentMenuStrip。您可以將每個標籤應用一個ContextMenuStrip。一旦你這樣做,你可以很容易地確定哪些控制它是從菜單的Opening事件或從Click事件的ToolStripMenuItem

例如打開菜單:如果你在開幕活動,並想找出這Label是右鍵單擊上,這樣你可以添加不同的菜單項,你只需要施放ContextMenuStrip.SourceControl屬性:

Label clickedLabel = (Label)contextMenuStrip.SourceControl; 

一旦Click事件是,你要找出哪些Label是右點擊你可以這樣做:

ContextMenuStrip contextMenu = (ContextMenuStrip)((ToolStripMenuItem)sender).Owner; 
Label clickedLabel = (Label)contextMenu.SourceControl; 
+0

我不能夠感謝你。這正是我正在尋找的! –

+0

是你的代碼嗎? –

+0

已打開新線程:http://stackoverflow.com/questions/18415128/contextmenustrip-opening-event-determining-sender –