防止代码仅在visual studio designer中运行

时间:2012-08-27 11:40:38

标签: winforms visual-studio-2010

我有一个自定义控件,我在控件的Load事件中执行了一些位置检查。此位置检查根据其父控件中的设置将控件移动到屏幕上的特定位置。编译和运行应用程序时,此代码按预期工作。

但是,在使用Visual Studio设计器时,它会导致我的控件被绘制在可视区域之外,我无法使用设计器。我是否可以设置一个标志或属性来阻止在Visual Studio设计器中运行该代码片段?

我现在唯一的工作就是注释掉代码,编译,启动设计器,进行更改,然后取消注释代码并重新编译。

3 个答案:

答案 0 :(得分:8)

您可以查看LicenseManager.UsageMode的值。

if (LicenseManager.UsageMode == LicenseUsageMode.Runtime)
{
    // Code here won't run in Visual Studio designer
}

答案 1 :(得分:0)

对于那些建议的解决方案不起作用的人,我分享以下技巧:

if (System.Diagnostics.Process.GetCurrentProcess().ProcessName != "devenv")
{
    // Code that should not be executed at design time
}

我们正在做的是获取执行代码的进程的名称。如果该进程的名称为“ devenv”,那么我们将不执行代码。

在最新版本的Visual Studio中,环境在名为“ devenv”的进程中运行。

我确认这适用于VS2015和VS2017

是的,我知道这不是最优雅的解决方案,但是它可以工作。是的,我知道这是一个古老的查询,但是仍然有一些恐龙-像我-伸出双手。

答案 2 :(得分:0)

轻微变化,如果“设计时间”处于活动状态,则从Load方法退出...

this.Load += delegate {
    if(LicenseManager.UsageMode == LicenseUsageMode.Designtime) return; //If Design Time -> Exit here 
    // Code here won't run in Visual Studio designer
    // ...
};