在前面有一篇文章中,逍遙一生已經介紹了如何在c#窗體程序中給控件添加右鍵菜單以及給不同的子菜單添加不同的事件:
c#窗體(winform)程序給控件添加右鍵菜單及給不同子菜單添加不同事件的方法
在這篇文章中,逍遙一生將給大家介紹一下c#判斷右鍵菜單(ContextMenuStrip)是從哪個控件彈出來的方法。
逍遙一生在用C#做一個網絡教室程序的時候,需要在窗體上放 本文來自逍遙一生:http://www.xiaoyaolife.com/ 兩個Panel控件,里分分別有一個Label,分別是label1,text是192.168.1.2,和label2,text是192.168.1.3,代表客戶端的兩台客戶機,
這兩個label都綁定了一個叫ContextMenuStrip1的控件,菜單有兩個,一個是關機,一個是重啟。

由於兩個圖標代表兩個不同的客戶端,右鍵菜單有兩個子菜單,一個是關機,一個是重啟,很明顯,右擊哪個客戶端panel,彈出的菜單及執行的命令都是一樣的,那我如何知道點了關機以后到底是讓哪個客戶端關機呢?本文來自逍遙一生:http://www.xiaoyaolife.com/
雙擊contextMenuStrip1在它的opening事件中寫入下面的代碼:
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) { string whichcontrol_name= (sender as ContextMenuStrip).SourceControl.Name; MessageBox.Show(whichcontrol_name); }
運行結果:
右擊panel2中的label2

有的朋友說你這有什么用,也得到到那個label中的ip值, 本文來自逍遙一生:http://www.xiaoyaolife.com/ 看下面的方法:
1、 private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) { Panel whichcontrol_name= (Panel)(sender as ContextMenuStrip).SourceControl; Label l = (Label)whichcontrol_name.Controls[0]; MessageBox.Show(l.Text); } 或者本文來自逍遙一生:http://www.xiaoyaolife.com/ 2、 private void Form1_Load(object sender, EventArgs e) { panel1.Name = "192.168.1.2"; panel2.Name = "192.168.1.3"; } private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) { string whichcontrol_name= (sender as ContextMenuStrip).SourceControl.Name; MessageBox.Show(whichcontrol_name); }
這次我右擊panel1中的label1
結果是:

當然或許客戶端的panel是動態添加的,反正在添加的時候給它一個name就可以了。 本文來自逍遙一生:http://www.xiaoyaolife.com/ 我們可以定義一個全局變量
string ip = null; private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) { string whichcontrol_name= (sender as ContextMenuStrip).SourceControl.Name; ip = whichcontrol_name ; }
這樣就在全局范圍內可以調用這個ip值了,也就是知道了你現在正在操作哪個客戶端。 |