现在的位置: 首页 > 综合 > 正文

C# UserControl 判断DesignMode

2013年09月03日 ⁄ 综合 ⁄ 共 734字 ⁄ 字号 评论关闭

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

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

抱歉!评论已关闭.