前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Winform 中 DesignMode 返回值不正确的问题。

Winform 中 DesignMode 返回值不正确的问题。

作者头像
跟着阿笨一起玩NET
发布2018-09-18 17:58:14
1.5K0
发布2018-09-18 17:58:14
举报

本文转载: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 属性,代码如下:

[c-sharp] view plaincopyprint?

代码语言:javascript
复制
/// <summary>  
/// 标题:获取一个值,用以指示 System.ComponentModel.Component 当前是否处于设计模式。  
/// 描述:DesignMode 在 Visual Studio 2005 产品中存在 Bug ,使用下面的方式可以解决这个问题。  
///        详细信息地址:http://support.microsoft.com/?scid=kb;zh-cn;839202&x=10&y=15  
/// </summary>  
protected new bool DesignMode  
{  
 get 
    {  
 bool returnFlag = false;  
#if DEBUG  
 if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)  
        {  
            returnFlag = true;  
        }  
 else if (System.Diagnostics.Process.GetCurrentProcess().ProcessName.ToUpper().Equals("DEVENV"))  
        {  
            returnFlag = true;  
        }  
#endif  
 return returnFlag;  
    }  
}  
代码语言:javascript
复制
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事件中添加初始化代码,但是这些代码在进入窗体设计也会被执行,造成了设计窗口出现异常的情况。

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

代码语言:javascript
复制
 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;
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-09-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档