c#判断右键菜单(ContextMenuStrip)是从哪个控件弹出来的方法

    在前面有一篇文章中,逍遥一生已经介绍了如何在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值了,也就是知道了你现在正在操作哪个客户端。

posted @ 2012-01-14 14:45  小锋神  阅读(22333)  评论(3编辑  收藏  举报