lenmom

博客园 首页 新随笔 联系 订阅 管理

C# UserControl 判断DesignMode

 
 

      .Net开发UserControl时,我们经常需要得知当前是Design Mode还是Runtime Mode。

      在Design Mode时,.Net并不会运行你的系统,它只会把当前控件,及其所有父类都初始化一遍,一般包括其构造函数,OnLoad(),OnInit()等方法。 如果在OnLoad或者OnInit中,写了一些只有在Runtime Mode时才能执行成功的代码,那么当你在Form的设计模式下查看这个窗口时,很有可能会得到一个"对象为空或未初始化"的错误,从而无法创建该控件的实例。我还遇到过更狠的情况,就是我写的控件在Runtime Mode时,一切正常,但在Design Mode下,一打开该文件,立刻重启VS2005,暴汗啊,这么强悍的控件,我是不是应该佩服自己。言归正传,那怎样处理这种情况呢,一个简单的方法是写try和catch,把异常吃掉,还有一种方法就是判断是Design Mode还是Runtime Mode,做不同的处理。代码如下:

//运行环境:Windows7 + VS2005 + Framework2.0SP2

//直接用this.DesignMode == true无效

if (this.GetService(typeof(IDesignerHost)) != null || System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)

{      //design mode

}

else

{

    //runtime mode

}

 

转自  http://blog.sina.com.cn/s/blog_5421dfd20100fx3d.html  

 

放到自己博客当中,必备查询。

posted on 2013-07-18 17:23  老董  阅读(1637)  评论(0编辑  收藏  举报