MIAIONE 2020-03-15 14:51 采纳率: 100%
浏览 326

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

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

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

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

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

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

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

  • 写回答

1条回答 默认 最新

  • --小小程序猿 2021-04-19 21:27
    关注

     

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

    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操作

    评论

报告相同问题?