zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    我的博客的定制代码
    在网站中使用Bing Translator插件翻译文章。
    java 爬虫 WebMagic(四)-Scheduler
    java 爬虫 WebMagic(三)-PipeLine
    java 爬虫 WebMagic(二)-PageProcessor
    java 爬虫 WebMagic(一)-Spider
    java 解析json 万能型
    c# 解析Json 万能型
    常用的Linux 命令
    将文件夹和文件提交到git
  • 原文地址:https://www.cnblogs.com/deerchao/p/950675.html
Copyright © 2011-2022 走看看