[c#] Control의 생성자에서 디자인 모드 감지
이 질문 에 이어 객체의 생성자 내에서 디자인 모드인지 런타임 모드인지 감지 할 수 있습니까?
나는 이것이 가능하지 않을 수 있으며 내가 원하는 것을 변경해야 할 것임을 알고 있지만 지금은이 특정 질문에 관심이 있습니다.
답변
네임 스페이스 에서 LicenceUsageMode 열거를 사용할 수 있습니다 System.ComponentModel
.
bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
답변
다음과 같은 것을 찾고 있습니까?
public static bool IsInDesignMode()
{
if (Application.ExecutablePath.IndexOf("devenv.exe", StringComparison.OrdinalIgnoreCase) > -1)
{
return true;
}
return false;
}
프로세스 이름을 확인하여 수행 할 수도 있습니다.
if (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv")
return true;
답변
구성 요소 … 내가 아는 한 DesignMode 속성이 없습니다. 이 속성은 Control에서 제공합니다. 그러나 문제는 CustomControl이 디자이너의 Form에있을 때이 CustomControl이 런타임 모드에서 실행된다는 것입니다.
DesignMode 속성이 Form에서만 올바르게 작동한다는 것을 경험했습니다.
답변
컨트롤 (Forms, UserControls 등)은 다음 Component class
을 상속합니다 bool property DesignMode
.
if(DesignMode)
{
//If in design mode
}
답변
중대한
Windows Forms 또는 WPF 사용에는 차이가 있습니다 !!
그들은 다른 디자이너를 가지고 있고 다른 수표 가 필요 합니다 . 또한 Forms와 WPF 컨트롤을 혼합하면 까다 롭습니다. (예 : Forms 창 내부의 WPF 컨트롤)
Windows Forms 만 있는 경우 다음을 사용하십시오.
Boolean isInWpfDesignerMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime);
당신이있는 경우 에만 WPF를 ,이 검사를 사용합니다 :
Boolean isInFormsDesignerMode = (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv");
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
}
현재 모드를 보려면 디버깅을위한 MessageBox를 표시 할 수 있습니다.
// show current mode
MessageBox.Show(String.Format("DESIGNER CHECK: WPF = {0} Forms = {1}", isInWpfDesignerMode, isInFormsDesignerMode));
말:
System.ComponentModel 및 System.Diagnostics 네임 스페이스를 추가해야합니다 .
답변
Component.DesignMode 속성을 사용해야합니다. 내가 아는 한 이것은 생성자에서 사용해서는 안됩니다.
답변
또 다른 흥미로운 방법은 해당 블로그에 설명되어 있습니다. http://www.undermyhat.org/blog/2009/07/in-depth-a-definitive-guide-to-net-user-controls-usage-mode-designmode-or -usermode /
기본적으로 항목 어셈블리에서 정적으로 참조되는 실행 어셈블리를 테스트합니다. 어셈블리 이름 ( ‘devenv.exe’, ‘monodevelop.exe’..)을 추적 할 필요가 없습니다.
그러나 어셈블리가 동적으로로드되는 다른 모든 시나리오에서는 작동하지 않습니다 (VSTO가 한 예임).