VB.NET DesignSurface 右键菜单如何添加 (ContextMenuStrip)/ 窗体设计器内的窗体和控件四周可变大小伸缩框闪烁

VB.NET DesignSurface 右键菜单如何添加 (ContextMenuStrip)

百度知道——窗体设计器添加右键菜单
图片说明

上面的已经看过了,现在不会通过接口来实现右键菜单。

我的目的就是在窗体设计器添加右键菜单,如果有其他方法,也可以不用这个方法,C币没了,求各位给个代码。
图片说明
图片说明

窗体设计器内的窗体和控件四周可变大小伸缩框闪烁

已经尝试解决闪烁的问题,不过没有什么用,不管是SetStyle还是CreateParams都没有用,多半怀疑是动态创建导致的,因为TabControl和MenuItem还有ToolBox都重写了,就这个DesignSurface不会重写。求解决办法,目前没找到SharpDevelop,谁能提供下源码研究下也许可以。

 

设计器是个天坑,怕都爬不起来那种

DesignSurface的右键菜单要用MenuCommandService

继承MenuCommandService,重写ShowContextMenu方法

    public class MyMenu : MenuCommandService
    {
        public MyMenu(IServiceProvider serviceProvider) : base(serviceProvider)
        {
        }

        public override void ShowContextMenu(CommandID menuID, int x, int y)
        {
            ContextMenuStrip menu = new ContextMenuStrip();
            menu.Items.Add("Test");
            menu.Show(new Point(x, y));
            base.ShowContextMenu(menuID, x, y);
        }
    }
        private void Form1_Load(object sender, EventArgs e)
        {
            DesignSurface surface = new DesignSurface();
            surface.BeginLoad(typeof(UserControl));
            Control designview = (Control)surface.View;
            designview.Size = new Size(818, 613);
            Controls.Add(designview);

            IServiceContainer servicecontainer = (IServiceContainer)surface.GetService(typeof(IServiceContainer));
            servicecontainer.AddService(typeof(IMenuCommandService), new MyMenu(surface));
        }

应用就是加到DesignSurface的服务里面去

接下来就是ContextMenuStrip操作