我有一个自定义控件,我在控件的Load事件中执行了一些位置检查。此位置检查根据其父控件中的设置将控件移动到屏幕上的特定位置。编译和运行应用程序时,此代码按预期工作。
但是,在使用Visual Studio设计器时,它会导致我的控件被绘制在可视区域之外,我无法使用设计器。我是否可以设置一个标志或属性来阻止在Visual Studio设计器中运行该代码片段?
我现在唯一的工作就是注释掉代码,编译,启动设计器,进行更改,然后取消注释代码并重新编译。
答案 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
// ...
};