C#ContextMenuStrip控件的后台动态创建

 

*向ContextMenuStrip中添加菜单节点

//Menu控件的属性
        private void MenuControl_Attribute() {
            this.menu.Items.Clear();
            this.menu.Items.Add("相机");
            this.menu.Items.Add("运动控制");
            this.menu.Items.Add("路径规划");
            this.menu.Items.Add("路径库");
        }

*向父菜单节点中添加子菜单节点

 private void MenuFatherNode_MouseEnter(object sender, EventArgs e)
        {
            ToolStripItem tsi = sender as ToolStripItem;
            string Text = tsi.Text;
            if ("相机" == Text)
            {
                //像菜单节点添加子菜单
                ToolStripDropDownItem tsdd = tsi as ToolStripDropDownItem;
                tsdd.DropDownItems.Clear();
                //检索相机设备 
                List<string> CamList = Bin.SearchDevice.GetCamDeviceIDs();
                if (CamList.Count == 0)
                {
                    //创建子菜单节点
                    ToolStripItem tsiNew = new ToolStripMenuItem();
                    tsiNew.Text = "没有检索到相机";
                    tsiNew.BackColor = Color.Gray;
                    ((ToolStripDropDownItem)tsi).DropDownItems.Add(tsiNew);
                }
                else
                {
                    foreach (string cam in CamList)
                    {
                        //创建子菜单节点
                        ToolStripItem tsiNew = new ToolStripMenuItem();
                        tsiNew.Text = cam;
                        //给子菜单节点绑定事件
                        tsiNew.Click += MenuChildNode_ClickEvent;
                        tsdd.DropDownItems.Add(tsiNew);
                    }
                }
            }
        }

*获取子节点的父节点

private void MenuChildNode_ClickEvent(object sender, EventArgs e) {
            ToolStripItem tsi = sender as ToolStripItem;
            //获取该节点的父节点名
            string FatherNodeName = tsi.OwnerItem.Text;

        }

*随鼠标点击位置显示

 private void MenuControl_Show(object sender, MouseEventArgs e) {
            if (e.Button == MouseButtons.Right)
            {
                this.menu.Show(e.X, e.Y);
            }
        }

 

完整的项目演示:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            {//控件加载
                MenuControl_Load();
            }
            {//事件绑定
                this.hWindowControl1.MouseDown += MenuControl_Show;
            }
        }
        #region Menu控件
        //Menu控件的加载
        private void MenuControl_Load() {
            MenuControl_Attribute();
            MenuControl_BindEvent();
        }
        //Menu控件的属性
        private void MenuControl_Attribute() {
            this.menu.Items.Clear();
            this.menu.Items.Add("相机");
            this.menu.Items.Add("运动控制");
            this.menu.Items.Add("路径规划");
            this.menu.Items.Add("路径库");
        }
        //Menu控件绑定的事件
        private void MenuControl_BindEvent() {
            //给菜单的所有父级节点绑定点击事件
            this.menu.Items[0].MouseEnter += MenuFatherNode_MouseEnter;
            for (int i = 1; i < this.menu.Items.Count; i++)
            {
                this.menu.Items[i].Click += MenuFatherNode_ClickEvent;
            }
        }
        //显示Menu控件
        private void MenuControl_Show(object sender, MouseEventArgs e) {
            if (e.Button == MouseButtons.Right)
            {
                this.menu.Show(e.X, e.Y);
            }
        }
        //Menu控件的父节点选项点击事件
        private void MenuFatherNode_ClickEvent(object sender, EventArgs e) {
            ToolStripItem tsi = sender as ToolStripItem;
            string Text = tsi.Text;
            MessageBox.Show(Text);
        }
        //Menu控件的父节点选项鼠标移动事件
        private void MenuFatherNode_MouseEnter(object sender, EventArgs e)
        {
            ToolStripItem tsi = sender as ToolStripItem;
            string Text = tsi.Text;
            if ("相机" == Text)
            {
                //像菜单节点添加子菜单
                ToolStripDropDownItem tsdd = tsi as ToolStripDropDownItem;
                tsdd.DropDownItems.Clear();
                //检索相机设备 
                List<string> CamList = Bin.SearchDevice.GetCamDeviceIDs();
                if (CamList.Count == 0)
                {
                    ToolStripItem tsiNew = new ToolStripMenuItem();
                    tsiNew.Text = "没有检索到相机";
                    tsiNew.BackColor = Color.Gray;
                    ((ToolStripDropDownItem)tsi).DropDownItems.Add(tsiNew);
                }
                else
                {
                    foreach (string cam in CamList)
                    {
                        ToolStripItem tsiNew = new ToolStripMenuItem();
                        tsiNew.Text = cam;
                        tsiNew.Click += MenuChildNode_ClickEvent;
                        tsdd.DropDownItems.Add(tsiNew);
                    }
                }
            }
        }
        //Menu控件的子节点选项点击事件
        private void MenuChildNode_ClickEvent(object sender, EventArgs e) {
            ToolStripItem tsi = sender as ToolStripItem;
            //获取该节点的父节点名
            string FatherNodeName = tsi.OwnerItem.Text;

            if ("相机" == FatherNodeName)
            {
                OpenCam((sender as ToolStripItem).Text);
            }
        }
        private void OpenCam(string camID) {
            HTuple HWindow = this.hWindowControl1.HalconWindow;
            //打开相机连接
            HOperatorSet.OpenFramegrabber("MVision", 1, 1, 0, 0, 0, 0, "progressive", 8, "default", -1, "false", "auto", camID, 0, -1, out HTuple camHandle);
            HOperatorSet.GrabImageStart(camHandle, -1);
            //创建采集线程
            Thread newT = new Thread(()=> {
                HTuple w, h;
                HObject ho_Image;
                HOperatorSet.SetColor(HWindow, "green");
                while (true)
                {
                    try
                    {
                        HOperatorSet.GrabImageAsync(out ho_Image, camHandle, -1);
                        if (ho_Image != null)
                        {
                            HOperatorSet.GetImageSize(ho_Image, out w, out h);
                            HOperatorSet.SetPart(HWindow, 0, 0, h, w);
                            HOperatorSet.DispImage(ho_Image, HWindow);
                            ho_Image.Dispose();
                        }
                    }
                    catch (Exception)
                    {
                    }
                }
            });
            newT.Name = camID;
            newT.IsBackground = true;
            newT.Start();
        }

        #endregion
    }

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值