C# UserControl 判断DesignMode//运行环境: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
}

解决方案 »

  1.   

    你可以把if (this.DesignMode == true)改成  if (!DesignMode)
    {
        //先翻转过来跑一下DesignMode下才会跑的代码 
        //调通了再改回去
    }
      

  2.   

    谢谢您找到资料,但不是我所需要的。我希望的是测试用例应该如何写,让VS测试时,可以达到DesignMode=true的效果。而不是代码中如何判断目前是design mode还是runtime mode。如果控件继承于组件Component,是可以用 this.DesignMode == true 来判断的。但有些时候,在其它类型的代码中就要用到了,所以不用能 DesignMode,只能用你建议的代码进行判断。这才是你代码真真用的环境。
      

  3.   

    条件编译:
    #if DEBUG
    bool dm = false;
    #elsif
    bool dm = this.DesignMode;
    #endif
    if (dm)
    {
      i++;
    }
    else
    {
      i--;
    }
      

  4.   

    @bwangel:这不是个好主意。因为:一、我们希望测试能自动化进行;二、代码的作者与测试用例的作者往往不是同一个人,随便改别人的代码是不被推荐的。我希望的是,是否有什么标志,在测试用例中写一下,然后VS的测试程序就认为当前是设计状态。如果真的找不到这个标志,那我可能就要改 this.DesignMode 这种表达方式,改为我们自定义的一个函数了。
      

  5.   

    @bwangel:您的想法我试了一下,就发现,我无法在代码中改变条件编译的值。所以利用条件编译让测试用例完全覆盖含DesignMode的测试代码应该是不行的。谢谢!
      

  6.   

    没人关注了。我贴出自己的土法解决方案:以后所有写到 this.DesignMode 的地方,用自己的函数 AutoTest.SFZJMS(this.DesignMode)代替,自己的函数里面就是写着:如果现在被测试者标为测试下的设计状态,则直接返回true。否则返回 this.DesignMode。