本文转载: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);
        }

方法二:

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;
}

最新文章

  1. php之验证码小程序
  2. 重载Python FTP_TLS 实现Implicit FTP Over TLS方式下载文件
  3. Div添加阴影效果
  4. Eclipse安装nodeclipse插件
  5. 【翻译】Kinect v2程序设计(C++-) AudioBeam篇
  6. Effective C# 学习笔记(原则一:始终能的使用属性(property),而不是可直接访问的Data Member)
  7. 解决SQL Server 阻止了对组件 &#39;Ad Hoc Distributed Queries&#39; 的 STATEMENT &#39;OpenRowset/OpenDatasource&#39; 的访问
  8. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)
  9. JS-DOM ~ 03. 子节点的操作、style.样式和属性、dom元素的创建方法及操作、14个例题、主要是利用js直接控制html属性
  10. struts2实现ajax校验的2种方法
  11. 图片转化成base64编码
  12. nodejs对mongodb数据库的增删改查操作(转载)
  13. jquery.form.js实现将form提交转为ajax方式提交的方法
  14. nutch笔记
  15. 解题:EXNR #1 金拱门
  16. kernel jenkins build script
  17. hdu-1711(kmp算法)
  18. Linq编译带来的诡异错误
  19. Redis高可用详解:持久化技术及方案选择 (推荐)--转载自编程迷思博客www.cnblogs.com/kismetv/p/8654978.html
  20. 【[HAOI2009]逆序对数列】

热门文章

  1. WPF学习(一)控件的公共属性
  2. node初步一:HTTP请求
  3. AS3.0声明静态属性和静态方法
  4. 【python】【转】python中isinstance判断变量类型用法
  5. WCF X.b 操作引用了已经从 Y.b 操作导出的消息元素 [http://tempuri.org/:b]。可以通过更改方法名称或使用 OperationContractAttribute 的 Name 属性更改其中一个操作的名称...
  6. [BZOJ 1907] 树的路径覆盖 【树形DP】
  7. Asm.js: Javascript的编译目标
  8. nodejs and db
  9. 用正则式判断URL是否合法-python
  10. 第1章 开发环境安装和配置(二)安装JDK、SDK、NDK