Introduction

在撰寫控制項時,我們常會需要依照不同的階段作不同的處理。像是在設計階段顯示與運行階段不同的畫面、關閉些在設計階段會造成錯誤的處理等等。這邊將對偵測目前所處階段的語法作些整理。

Detect Design-Time & Run-Time

若要在程式中分辨設計階段(Design-Time)與運行階段(Run-Time),我們大致上有以下幾種方法。

WinForm

1.判斷Component.DesignMode Dim isDesignTime As Boolean = Component.DesignMode

2.判斷Site.DesignMode

Dim isDesignTime As Boolean = Me.Site IsNot Nothing AndAlso Me.Site.DesignMode

3.判斷當前處理序是否為Visual Studio

Dim isDesignTime As Boolean = Process.GetCurrentProcess().ProcessName.Equals(“devenv”, StringComparison.OrdinalIgnoreCase)

4.判斷LicenseUsageMode.UsageMode是否為LicenseUsageMode.Designtime

Dim isDesignTime As Boolean = System.ComponentModel.LicenseManager.UsageMode = System.ComponentModel.LicenseUsageMode.Designtime

5.判斷GetService(GetType(System.ComponentModel.Design.IDesignerHost))不為空

Dim isDesignTime As Boolean = GetService(GetType(System.ComponentModel.Design.IDesignerHost)) IsNot Nothing

ASP.NET

請參閱Detecting Designmode in ASP.Net

WPF

請參閱Detecting design time mode in WPF and Silverlight

How Do I Detect Design-Time Vs Run-Time in a .NET Control?

Identifying the Run-Time and the Design Mode

Design Time Detection

Detect if Code is Running from the IDE

Detecting Design-time in C#

Windows Forms designer and DesignMode property issues

MSDN - Component.DesignMode Property

MSDN - IDesignerHost 介面

Detecting Designmode in ASP.Net

Detecting design time mode in WPF and Silverlight