zoukankan      html  css  js  c++  java
  • Winform 中 DesignMode 返回值不正确的问题。

    本文转载:http://blog.csdn.net/sabty/article/details/5325260

    以前也曾遇到这样的问题,不过影响不大也没有去详细了解。今天又重新遇到此问题,实在太不便。经查证这是 Visual Studio 2005 的 Bug。微软对此的 Bug 描述:http://support.microsoft.com/?scid=kb;zh-cn;839202&x=10&y=15

    //DesignMode存在BUG,在构造函数里面DesignMode永远都是false,
     //建议:不要把代码写在此处。否则每次"重新"解决方案时候都会执行。

    建议把初始化代码代码写在FormLoad事件里面或者重载  protected override void OnCreateControl()。

     
    解决方法:

     在你的 Form 控件中重写 DesignMode 属性,代码如下:

    1. /// <summary>   
    2. /// 标题:获取一个值,用以指示 System.ComponentModel.Component 当前是否处于设计模式。   
    3. /// 描述:DesignMode 在 Visual Studio 2005 产品中存在 Bug ,使用下面的方式可以解决这个问题。   
    4. ///        详细信息地址:http://support.microsoft.com/?scid=kb;zh-cn;839202&x=10&y=15   
    5. /// </summary>   
    6. protected new bool DesignMode  
    7. {  
    8.     get  
    9.     {  
    10.         bool returnFlag = false;  
    11. #if DEBUG   
    12.         if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)  
    13.         {  
    14.             returnFlag = true;  
    15.         }  
    16.         else if (System.Diagnostics.Process.GetCurrentProcess().ProcessName.ToUpper().Equals("DEVENV"))  
    17.         {  
    18.             returnFlag = true;  
    19.         }  
    20. #endif   
    21.         return returnFlag;  
    22.     }  
    23. }  
      public partial class UserControl3 : UserControl
        {
            public UserControl3()
            {
                InitializeComponent();
                //DesignMode存在BUG,在构造函数里面DesignMode永远都是false,
                
    //建议:不要把代码写在此处。否则每次"重新"解决方案时候都会执行。
                
    //if (this.DesignMode==false)
                
    //    MessageBox.Show(Application.StartupPath);

            }

            private bool _IsViewMode = false;
            public bool IsViewMode
            {
                get
                {
                    if (this.DesignMode == false)
                        MessageBox.Show(Application.StartupPath);
                    return _IsViewMode;
                }
            }

            private void UserControl3_Load(object sender, EventArgs e)
            {
                if (this.DesignMode == false)
                    MessageBox.Show(Application.StartupPath);
            }
    View Code

    方法二:

    Winform中自定义控件判断是否处于IDE设计模式(DesignMode,Designtime,构造函数,Load)

    在设计自定义控件时,经常需要在构造函数或者Load事件中添加初始化代码,但是这些代码在进入窗体设计也会被执行,造成了设计窗口出现异常的情况。

    使用下面的代码,可以让你判断出是否处于窗体设计模式,进而保证代码只会在最终用户使用时才会被执行。

     public static bool IsDesignMode()
        {
          bool returnFlag = false;
    
    #if DEBUG
          if (LicenseManager.UsageMode == LicenseUsageMode.Designtime)
          {
            returnFlag = true;
          }
          else if (Process.GetCurrentProcess().ProcessName == "devenv")
          {
            returnFlag = true;
          }
    #endif
    
          return returnFlag;
        }
  • 相关阅读:
    文档对象模型(DOM)
    Gridview,DataList,Repeater 鼠标经过时行颜色变换
    一组经典测试思想观点
    如何编写测试计划
    测试用例 之我见
    软件测试流程 之我见
    经典博文各系列文章
    JS实现在Repeater控件中创建可隐藏区域
    测试感想
    海量数据处理 算法总结
  • 原文地址:https://www.cnblogs.com/51net/p/3322784.html
Copyright © 2011-2022 走看看