博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 判断是否是在设计模式下有效的方法
阅读量:6735 次
发布时间:2019-06-25

本文共 1154 字,大约阅读时间需要 3 分钟。

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里每个Control对象都有 DesignMode 属性,可以判断是否是在设计时。 

  但 DesignMode 真的能判断当前是否是设计时吗??我们来做个小实验,先写一个测试控件: 

public class TestControl : System.Windows.Forms.UserControl 
   public TestControl() 
        System.Windows.Forms.MessageBox.Show( this.DesignMode.ToString() ); 
   } 
}

  然后我们把这个控件编译拖拽到另外一个 UserControl : TestContainerA 
  这个时候 TestControl.DesignMode  是 True 
  我们再把这个 TestContainerA 编译拖拽到一个新的用户控件或窗体里: TestContainerB 
  这个时候弹出来的 TestControl.DesignMode  却是 False !! 
  真是个神奇的现象。。也就是说一个控件只有在它自己被拖拽到设计器的时候,其 DesignMode 才是真,如果它被包含在其他控件中被加入  到设计器,那么那个控件才是在设计模式,而它不是!换句话说,DesignMode 并不能反映当前环境是否是运行时,它只能告诉你,这个控件当前是不是直接被设计器操作(嵌套的已经不算了) 
  花了一个多小时才跟踪发现这个错误...设计时控件的无法创建错误真是不好调试 
  Thanks to ,这个解释比较容易理解和正确的: 
  winform的Design环境是由控件的容器维护的。当控件嵌套在一个没有design环境的容器空间中时其实就是运行时状态。 

转载于:https://www.cnblogs.com/shaozhuyong/p/6830244.html

你可能感兴趣的文章
Java面向对象概述
查看>>
Hello 畅连·西瓜 帮助与更新
查看>>
第十三周项目2-成绩处理
查看>>
html 复制 有时不显示样式
查看>>
怎么写测试策略
查看>>
2018-2019-1 20165231 《信息安全系统设计基础》第四周学习总结
查看>>
jar包的一天
查看>>
python random模块
查看>>
发布使用了stage3D功能的Air for Android项目到手机上
查看>>
15. 利用ajax jquery 上传文件
查看>>
4.类与结构
查看>>
smartUpload上传文件组件
查看>>
Android系统移植与调试之------->build.prop文件详细赏析
查看>>
SOUI更新到2.0
查看>>
条件编译
查看>>
Linux命令——mesg
查看>>
Argus
查看>>
自定义UIButton
查看>>
C#函数(四)
查看>>
[日记]游长白遇梅花,植物大战僵尸
查看>>