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

[c-sharp] view plaincopyprint?

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

 

时间: 2024-09-14 17:56:39

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

axis调用webservice:返回值不正确

问题描述 axis调用webservice:返回值不正确 本人对webservice的调用不熟悉,求助各位大侠!多谢! WSDL的XML文件中定义的参数如下 name="zone" type="xsd:string" default="CM-ACCTSPID" name="Id" type="xsd:string" name="rowCount" type="xsd:decim

Shell中函数返回值超出问题

  这篇文章主要介绍了Shell中函数返回值超出问题,shell中通过return返回是有限制的,最大返回255,超过255,则从0开始计算,需要的朋友可以参考下 1.前言 快半年没有写博客了,荒废了很久,工作中的杂事太多,自己越来越懒了.为了鞭策自己成长,还是要坚持写写博客,记录自己的成长. 2.shell函数介绍 语法: 代码如下: [ function ] funname [()] { action; [return int;] } 说明: (1)可以带function fun() 定义,

c语言-VB 调用crc16校验 dll 返回值不正确

问题描述 VB 调用crc16校验 dll 返回值不正确 真诚求助,其实什么都写好了就是关键时候掉链子了 如下: C语言写的CRC16 半字节查表 方式校验,dll cpp 程序如下: unsigned short _stdcall CalCRC16(unsigned char *ptr, unsigned char len) { unsigned short crc; unsigned char da; unsigned short crc_ta[16]={ 0x0000,0x1021,0x2

spring-项目中ajax返回值的问题

问题描述 项目中ajax返回值的问题 项目类似于微博系统,struts2+springjquery的Ajax提交并返回值是个map对象.现在的问题是: 我发布一条微博时想无刷新的在下面出现一条加入的记录,这个基本就是在前台将返回的值拼字符串,然后插入到记录显示,因为会有大量的这个拼接字符串的地方,我想问下有没有其他的简单的方式来实现无刷新的提交并回显 解决方案 可以 改用创建 对象 .获取到同样样式的最后一个对象.jquery对象.clone()方法克隆该jquery对象再给对象用js更改后台获

linkedlist-java Arraylist和Linkedlist中set返回值为什么是old值

问题描述 java Arraylist和Linkedlist中set返回值为什么是old值 小弟自学了Arraylist和Linkedlist,但是有一点令我疑惑不解,求大婶帮助: public E set(int index, E element) { checkElementIndex(index); Node x = node(index); E oldVal = x.item; x.item = element; return oldVal; //我想问为什么这儿返回返回修改前的值(Ar

函数调用-c语言中函数返回值类型的问题

问题描述 c语言中函数返回值类型的问题 看一道改错题: #include #include #include proc(int k)//很显然根据主调函数和返回值类型知道这里缺少类型 { int n;float s,w,p,q; n=1; s=1.0; while(n<=k){ w=2.0*n; p=w-1.0; q=w+1.0; s=s*w*w/p/q; n++; } return s; } void main(){ system("CLS"); printf("%f

把web项目完全挪到maven中mybatis返回值为空

问题描述 把web项目完全挪到maven中mybatis返回值为空 解决方案 空指针错误,把原码帖出来.

java-Java方法中一个返回值类型为基本数据类型long,return语句可以是一个对象吗

问题描述 Java方法中一个返回值类型为基本数据类型long,return语句可以是一个对象吗 Java方法中一个返回值类型为基本数据类型long,return语句可以是一个对象吗 解决方案 可以返回Long对象 比如 return new Long(3); 解决方案二: long是个值类型

Android单元测试 - 验证函数参数、返回值的正确姿势

前言 读者有没发觉我写文章时,喜欢有个前言.序?真相是,一半用来装逼凑字数,一半是因为不知道接下来要写什么,先闲聊几句压压惊^_^ 哈哈哈......该说的还是要说. 上一篇<Android单元测试 - Sqlite.SharedPreference.Assets.文件操作 怎么测?> 讲了一些DAO(Data Access Object)单元测试的细节.本篇讲解参数验证. 验证参数传递.函数返回值,是单元测试中十分重要的环节.笔者相信不少读者都有验证过参数,但是你的单元测试代码真的是正确的吗