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

Winform 中 DesignMode 返回值不正确的问题。的更多相关文章

  1. [改善Java代码]不要在finally块中处理返回值

    在finally代码块中处理返回值,这是在面试题中经常出现的题目.但是在项目中绝对不能再finally代码块中出现return语句,这是因为这种处理方式非常容易产生"误解",会严重 ...

  2. Asp.net MVC 中Controller返回值类型ActionResult

    [Asp.net MVC中Controller返回值类型] 在mvc中所有的controller类都必须使用"Controller"后缀来命名并且对Action也有一定的要求: 必 ...

  3. Controller 中Action 返回值类型 及其 页面跳转的用法

        •Controller 中Action 返回值类型 View – 返回  ViewResult,相当于返回一个View 页面. -------------------------------- ...

  4. robot framework中的返回值

    1.若想要再setup中有返回值,给后续的操作使用 A)在setup的关键词中需要的返回值,设置为global variable或者suit variable:如下图:但是在编译器中,会报错,但是执行 ...

  5. Web API中的返回值类型

    WebApi中的返回值类型大致可分为四种: Void/ IHttpActionResult/ HttpResponseMessage /自定义类型 一.Void void申明方法没有返回值,执行成功后 ...

  6. 用jquery的ajax方法获取return返回值的正确姿势

    如果jquery中,想要获取ajax的return返回值,必须注意两方面,ajax的同步异步问题,在ajax方法里面还是外面进行return返回值. 下面列举了三种写法,如果想成功获取到返回值,参考第 ...

  7. c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题

    c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题 例如: string myFunc(){ theLogics(); } 发现调用: myFunc(); 崩溃. 但调用: cout ...

  8. try--catch--finally中return返回值执行的顺序(区别)

    1.try块中没有抛出异常,try.catch和finally块中都有return语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public static int ...

  9. C++ 中的返回值

    C++中大致有三种返回值:值拷贝(副本),值引用和指针,返回什么类型的值要根据当时情况而定. 如果返回的是大型对象的副本,那么在每一次的函数调用后返回,都会调用该对象类型的拷贝构造函数构造一个新的副本 ...

随机推荐

  1. JVM学习笔记-运行时数据区

    不同于C,C++程序,Java程序的内存管理工作由Java虚拟机(JVM)接管,这减低了java程序员的负担,但如果出现内存泄露与溢出问题如报OutOfMemory,StackOverFlow异常错误 ...

  2. 有效解决js中添加border后动画bug问题

    做了个demo发现如果一个div不加border属性,用对象的offsetWidth属性来控制width没问题,但是如果一旦加了border属性,问题就来了. 其实offsetWidth属性获取的的是 ...

  3. 上传图片预览 支持IE8+,FF,Chrome ,保留原图片比例

    代码及效果:链接

  4. 零售ERP开发(一)

    随着企业信息化不断提高,各种企业管理系统应用而生:怎么才能开发一套简洁.易用.功能健全的管理系统,尤其是能够帮助企业做出重大策略的系统,一致是我们追求的目标.近些年,接触的Erp系统主要包括国内比较知 ...

  5. fedora安装sublime text教程

    下载 http://pan.baidu.com/s/1eRkEegM 解压 终端中切换到下载文件的目录下,执行以下命令: sudo tar -jxvf sublime_text_3_build_308 ...

  6. mysql备份,还原命令

    mysql导出数据1.导出整个数据库mysqldump -u用户名 -p 数据库名 >备份文件2.导出一个表mysqldump -u用户名 -p databaseName tablename & ...

  7. OSI参考模型 VS TCP/IP参考模

    OSI参考模型 VS TCP/IP参考模   TCP/IP各层对应的协议   TCP/IP的层                                对应的TCP/IP协议           ...

  8. about python

    函数式编程 λ演算 LISP,Erlang 尾递归 栈的使用 避免防御式编程 ER实体Entity关系relationship OOP [OOA/D] 属性.行为 继承.聚合.关联 抽象.封装 笛卡尔 ...

  9. 结合rpyc使用python实现动态升级的方法

    动态升级,就是程序不退出的情况下,将其代码更新的策略.假设集群含有多个机器,然后每个机器部署一套程序,当升级的时候就要去所有的上面部署一把. (1)有个包装程序专门负责接口并检查是否需要更新,当需要更 ...

  10. 拦截QT关闭窗口的CloseEvent

    QDialog类下有一个虚函数 void QDialog::closeEvent (  QCloseEvent   *  e   )  [virtual protected] 通过实现closeEve ...