4

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

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

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

4

3 回答 3

11

您可以检查 的值LicenseManager.UsageMode

if (LicenseManager.UsageMode == LicenseUsageMode.Runtime)
{
    // Code here won't run in Visual Studio designer
}
于 2012-08-27T11:44:56.297 回答
3

对于那些建议的解决方案没有奏效的人,我分享以下技巧:

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

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

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

我确认这适用于 VS2015 和 VS2017

是的,我知道这不是最优雅的解决方案,但它确实有效。是的,我知道这是一个古老的问题,但仍然有一些恐龙——比如我——在这个问题上插手。

于 2018-06-23T19:20:25.093 回答
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
    // ...
};
于 2020-06-05T11:01:21.253 回答