• Tip:解决DesignMode不能正确反应是否处于设计模式的问题


    VS自带的可视化窗体编辑器很好用,但是也有一些烦人的问题,比如:
    • 无法编辑继承自虚基类或范型基类的Control/Form;
    • 有时DesignMode这个属性不能正确反应是否处于设计模式--详细地说,就是嵌套在自定义控件B里的自定义控件A, 如果B被放到另一个控件/窗体上后,A的DesignMode属性就不能正确反映它所处的环境了;
     等等...

      对于前者,确实有一些办法可以将就,但是通常来说,你在用了这些方法之后,只会更恨Visual Studio(如果你真的想知道的话,好吧,先写一个继承自原来的基类的非范型非虚拟基类,然后子类以此类为基类就可以进设计模式了);而后者,确实是有办法让你忘记这些不快.

    代码:
        class VSDesignerFix
        {
            // Returns True, if specified control or one of their parent control is in design mode.
            public static bool IsInDesignMode(Control control)
            {
                if (control == null)
                {
                    throw new ArgumentNullException("control");
                }
                bool result = false; // return value
                Control ctl = control; // checked control for design mode
                do
                {
                    ISite site = ctl.Site; // get the site object, which is set by designer
                    if (site != null)
                    {
                        result = site.DesignMode; // check for design mode
                        if (result) { break; } // if control is in design mode then loop ends
                    }
                } while ((ctl = ctl.Parent) != null); // track the parent control

                return result;

            }
        }

    使用方法:
    public class MyControl : Control
    {
        public MyControl() { }

        protected override void OnLoad( EventArgs e )
        {
            base.OnLoad( e );
            if ( !VSDesignerFix.IsInDesignMode( this ) )
            {
                //在这里输入不需要在设计模式下运行的代码
            }
        }
    }
    上帝的归上帝,凯撒的归凯撒,这个Tip归功于Jakub Mller.
  • 相关阅读:
    行行网电子书多线程爬取
    51CTO学院IT技术课程抓取
    chromeF12 谷歌开发者工具详解 Network篇
    pyspider无法启动webui
    Python告诉你今天最冷的地方在哪里
    matplotlib画图中文及负号显示问题
    数据分析案例
    seaborn.barplot用法
    Python大数据分析之数据分析
    python中yield的用法详解
  • 原文地址:https://www.cnblogs.com/deerchao/p/950675.html
Copyright © 2020-2023  润新知