继这个问题之后,是否可以从对象的构造函数中检测一个是处于设计模式还是运行时模式?
我意识到这可能是不可能的,而且我将不得不改变我想要的东西,但是现在我对这个具体问题很感兴趣.
adr*_*nks 176
您可以在命名空间中使用LicenceUsageMode枚举System.ComponentModel:
bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);Run Code Online (Sandbox Code Playgroud)
Jar*_*rek 22
你在寻找这样的东西:
public static bool IsInDesignMode()
{
if (Application.ExecutablePath.IndexOf("devenv.exe", StringComparison.OrdinalIgnoreCase) > -1)
{
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
您也可以通过检查进程名称来执行此操作:
if (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv")
return true;
Run Code Online (Sandbox Code Playgroud)
组件......据我所知,没有DesignMode属性.此属性由Control提供.但问题是当CustomControl位于设计器的Form中时,此CustomControl在运行时模式下运行.
我经历过,DesignMode属性仅在Form中正常工作.
控件(Forms,UserControls等)继承了以下Component class内容bool property DesignMode:
if(DesignMode)
{
//If in design mode
}
Run Code Online (Sandbox Code Playgroud)
重要
使用Windows 窗体或WPF有所不同!
他们有不同的设计师,需要不同的检查.另外,当你混合使用Forms和WPF控件时,它很棘手.(例如窗体窗口内的WPF控件)
如果您只有Windows 窗体,请使用:
Boolean isInWpfDesignerMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
Run Code Online (Sandbox Code Playgroud)
如果您只有WPF,请使用此检查:
Boolean isInFormsDesignerMode = (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv");
Run Code Online (Sandbox Code Playgroud)
如果您混合使用 Forms和WPF,请使用如下检查:
Boolean isInWpfDesignerMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
Boolean isInFormsDesignerMode = (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv");
if (isInWpfDesignerMode || isInFormsDesignerMode)
{
// is in any designer mode
}
else
{
// not in designer mode
}
Run Code Online (Sandbox Code Playgroud)
要查看当前模式,您可以显示MessageBox以进行调试:
// show current mode
MessageBox.Show(String.Format("DESIGNER CHECK: WPF = {0} Forms = {1}", isInWpfDesignerMode, isInFormsDesignerMode));
Run Code Online (Sandbox Code Playgroud)
备注:
您需要添加名称空间System.ComponentModel和System.Diagnostics.
| 归档时间: |
|
| 查看次数: |
61670 次 |
| 最近记录: |