C# 判断是否是在设计模式下有效的方法

  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 jonnyyu,这个解释比较容易理解和正确的: 
  winform的Design环境是由控件的容器维护的。当控件嵌套在一个没有design环境的容器空间中时其实就是运行时状态。

时间: 2024-10-03 16:25:32

C# 判断是否是在设计模式下有效的方法的相关文章

yii框架下使用bootstrap时,判断checkbox、radioButtonList和dropDownList的js方法

1.首先设置button按钮的id: <span style="font-size:14px;">'htmlOptions'=>array('id'=>'buttonStateful')</span> 例如: <span style="font-size:14px;"> <?php $this->widget('bootstrap.widgets.TbButton', array('buttonType'=

js判断手机浏览器操作系统和微信浏览器的方法

做手机端的前端开发,少不了对手机平台的判断.如,对于app下载,就要判断在Android平台下就显示Android下载提示:在iOS平台下就显示iOS下载提示. 今天就为大家介绍一下用js判断手机客户端平台及系统平台的方法: <script type="text/javascript"> //手机端判断各个平台浏览器及操作系统平台 function checkPlatform(){ if(/android/i.test(navigator.userAgent)){ docu

CentOS下软件安装方法总结

一.rpm包安装方式步骤:1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录:2.打开一个终端,su -成root用户:3.cd soft.version.rpm所在的目录:4.输入rpm -ivh soft.version.rpm二.deb包安装方式步骤:1.找到相应的软件包,比如soft.version.deb,下载到本机某个目录:2.打开一个终端,su -成root用户:3.cd soft.version.deb所在的目录:4.输入dpkg -i soft.ve

拿到内存中dom元素的最后样式进行修改obj下的currentStyle方法

在用dom操作在对页面中的<style></style>里的样式进行操作时,发现时无效的,我觉得是因为页面DOM解析时此标签的样式内容才会被读到内存中,因此JS操作时取不到此标签的内容 一个标签的样式有可能是多个样式文件所定义而成了,所以浏览器在解释标签的时候会有一个计算标签最后样式的过程,想要对<style>中定义格式的标签的样式进行修改必须去操作最后浏览器计算机计算出的样式,这里用obj下的currentStyle方法,具体测试如下: <html> &l

Yii在window下的安装方法

首先,在http://www.yiichina.com/上下载yii 然后,配置系统环境变量,在win8下,按win+x,找到系统->高级系统设置->环境变量->path 把php的运行环境,加入到环境变量中,以分号隔开.如,我的是D:\wamp\bin\php\php5.4.12 在运行中输入php命令,会出现闪烁的下划线,说明环境变量配置成功. 最后,切换到yii目录下的framework目录下,执行下面的命令: php  yiic webapp  ../my_pro--------

第一零三天上课 PHP TP框架下控制器的方法分离

(1)配置信息 修改配置文件->Config.php (配置后,原先的控制方法无效) 'ACTION_BIND_CLASS' => TRUE, // 控制器方法分离 (2)在Controller文件夹下创建   和控制器类名  相同  的文件夹    (该文件夹即代替原来的控制器) (3)在新建的文件夹下书写方法类(该类即代替原来的控制器下的方法) <?php namespace Home\Controller\Index; //命名空间具体到类名(代替类的文件夹) use Think\

(转)java判断string变量是否是数字的六种方法小结

java判断string变量是否是数字的六种方法小结 (2012-10-17 17:00:17) 转载▼ 标签: it 分类: 转发 1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < str.length(); i++){ System.out.println(str.charAt(i)); if (!Character.isDigit(str.charAt(i))){ return fal

iOS开发之单例模式下的初始化方法

iOS开发之单例模式下的初始化方法 一般的单例我们会这么写 +(instancetype)sharedXXXManager{ static XXXManager *sharedXXXManagerInstance = nil; static dispatch_once_t predicate; dispatch_once(&predicate,^{ sharedXXXManagerInstance = [[XXXManager alloc] initPrivate]; }); return sh

设计模式Java之工厂方法。

1,工厂方法: 使用一个工厂的方法来创建产品. 1 package WHP; 2 //产品依赖于抽象 3 public interface IRunable { 4 public void Run(); 5 } 1 package WHP; 2 //具体实现 3 public class Car implements IRunable { 4 public void Run(){ 5 System.out.println("Car running."); 6 } 7 } 1 packa