IDesignerHost 介面

定義

提供用來管理設計工具異動和元件的介面。

public interface IDesignerHost : IServiceProvider, System.ComponentModel.Design.IServiceContainer
[System.Runtime.InteropServices.ComVisible(true)]
public interface IDesignerHost : IServiceProvider, System.ComponentModel.Design.IServiceContainer
public interface IDesignerHost : System.ComponentModel.Design.IServiceContainer
衍生
屬性
實作

範例

下列範例程式代碼示範如何從設計工具或月臺元件取得 IDesignerHost 服務介面。

// Requests an IDesignerHost service from the design time environment using Component.Site.GetService()
IDesignerHost dh = (IDesignerHost) this.Component.Site.GetService(typeof(IDesignerHost));

下列範例程式代碼示範如何使用 IDesignerHost 介面來列出專案元件。

using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Windows.Forms;

namespace IDesignerHostExample
{	
    // IDesignerHostExampleComponent is a component associated 
    // with the IDesignerHostExampleDesigner that demonstrates 
    // acquisition and use of the IDesignerHost service 
    // to list project components.
    [DesignerAttribute(typeof(IDesignerHostExampleDesigner))]
    public class IDesignerHostExampleComponent : System.ComponentModel.Component
    {
        public IDesignerHostExampleComponent()
        {}

        protected override void Dispose( bool disposing )
        {
            base.Dispose( disposing );
        }
    }

    // You can double-click the component of an IDesignerHostExampleDesigner 
    // to show a form containing a listbox that lists the name and type 
    // of each component or control in the current design-time project.
    public class IDesignerHostExampleDesigner : IDesigner
    {
        private System.ComponentModel.IComponent component;

        public IDesignerHostExampleDesigner()
        {}

        public void DoDefaultAction()
        {
            ListComponents();
        }

        public void Initialize(System.ComponentModel.IComponent component)
        {
            this.component = component;
            MessageBox.Show("Double-click the IDesignerHostExample component to view a list of project components.");
        }

        // Displays a list of components in the current design 
        // document when the default action of the designer is invoked.
        private void ListComponents()
        {
            using (DesignerHostListForm listform = new DesignerHostListForm())
            {
                // Obtain an IDesignerHost service from the design environment.
                IDesignerHost host = (IDesignerHost)this.component.Site.GetService(typeof(IDesignerHost));
                // Get the project components container (control containment depends on Controls collections)
                IContainer container = host.Container;
                // Add each component's type name and name to the list box.
                foreach (IComponent component in container.Components)
                {
                    listform.listBox1.Items.Add(component.GetType().Name + " : " + component.Site.Name);
                }
                // Display the form.
                listform.ShowDialog();
            }
        }

        public System.ComponentModel.IComponent Component
        {
            get
            {
                return this.component;
            }
        }

        public System.ComponentModel.Design.DesignerVerbCollection Verbs
        {
            get
            {
                DesignerVerbCollection dvc = new DesignerVerbCollection();
                dvc.Add( new DesignerVerb("List Components", new EventHandler(ListHandler)) );
                return dvc;
            }
        }

        private void ListHandler(object sender, EventArgs e)
        {
            ListComponents();
        }

        public void Dispose() {	}
    }

    // Provides a form containing a listbox that can display 
    // a list of project components.
    public class DesignerHostListForm : System.Windows.Forms.Form
    {
        public System.Windows.Forms.ListBox listBox1;
        private System.Windows.Forms.Button ok_button;
        
        public DesignerHostListForm()
        {
            this.Name = "DesignerHostListForm";
            this.Text = "List of design-time project components";
            this.SuspendLayout();
            this.listBox1 = new System.Windows.Forms.ListBox();						
            this.listBox1.Location = new System.Drawing.Point(8, 8);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(385, 238);
            this.listBox1.TabIndex = 0;	
            this.listBox1.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
                | System.Windows.Forms.AnchorStyles.Left) 
                | System.Windows.Forms.AnchorStyles.Right);		
            this.ok_button = new System.Windows.Forms.Button();
            this.ok_button.DialogResult = System.Windows.Forms.DialogResult.OK;
            this.ok_button.Location = new System.Drawing.Point(232, 256);
            this.ok_button.Name = "ok_button";
            this.ok_button.TabIndex = 1;
            this.ok_button.Text = "OK";
            this.ok_button.Anchor = (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
            this.ClientSize = new System.Drawing.Size(400, 285);
            this.Controls.AddRange(new System.Windows.Forms.Control[] { this.ok_button, this.listBox1 });
            this.ResumeLayout(false);	
        }

        protected override void Dispose( bool disposing )
        {			
            base.Dispose( disposing );
        }	
    }
}

備註

IDesignerHost是一種介面,可與 .NET Framework 窗體設計工具架構搭配使用,以提供設計工具交易和元件管理的支援。

.NET Framework 不提供這個介面的實作。 介面是由支持設計工具的開發工具所實作。

給呼叫者的注意事項

若要從開發環境取得的 IDesignerHost 實作,請在元件處於設計模式時呼叫 GetService(Type) ,傳遞的型 IDesignerHost 別以要求 IDesignerHost 服務介面。

IDesignerHost 提供與設計工具狀態相關的下列成員:

  • 屬性 Loading 會指出正在載入設計工具或檔。

  • Activated 設計工具在顯示之前啟動時,就會發生此事件。

  • 停用設計工具時,就會發生此 Deactivated 事件。

  • 載入 LoadComplete 文件之後就會發生此事件。

  • 方法 Activate() 會啟動設計工具。

IDesignerHost 提供下列與管理元件相關的成員:

IDesignerHost 提供下列與管理交易相關的成員:

屬性

Container

取得這個設計工具主應用程式的容器。

InTransaction

取得數值,指示設計工具主應用程式目前是否在異動中。

Loading

取得數值,指示設計工具主應用程式目前是否正在載入文件。

RootComponent

取得用來做為目前設計根元件之基底類別的執行個體。

RootComponentClassName

取得正在設計的類別的完整名稱。

TransactionDescription

取得目前異動的描述。

方法

Activate()

啟動這個主應用程式正在裝載的設計工具。

AddService(Type, Object)

將指定的服務加入至服務容器。

(繼承來源 IServiceContainer)
AddService(Type, Object, Boolean)

將指定的服務加入至服務容器,並選擇性地將服務升級至任何父項服務容器。

(繼承來源 IServiceContainer)
AddService(Type, ServiceCreatorCallback)

將指定的服務加入至服務容器。

(繼承來源 IServiceContainer)
AddService(Type, ServiceCreatorCallback, Boolean)

將指定的服務加入至服務容器,並選擇性地將服務升級至父項服務容器。

(繼承來源 IServiceContainer)
CreateComponent(Type)

建立指定型別的元件,並將其加入至設計文件中。

CreateComponent(Type, String)

建立指定型別和名稱的元件,並將其加入至設計文件中。

CreateTransaction()

建立 DesignerTransaction,它可以封裝事件序列,以改善效能,並啟用復原和取消復原支援功能。

CreateTransaction(String)

使用指定的異動描述,建立 DesignerTransaction,它可以用來封裝事件序列,以改善效能,並啟用復原和取消復原支援功能。

DestroyComponent(IComponent)

終結指定的元件,並將其從設計工具容器移除。

GetDesigner(IComponent)

取得含有指定元件的設計工具執行個體。

GetService(Type)

取得指定類型的服務物件。

(繼承來源 IServiceProvider)
GetType(String)

取得指定的、完整的型別名稱的執行個體。

RemoveService(Type)

從服務容器中移除指定的服務類型。

(繼承來源 IServiceContainer)
RemoveService(Type, Boolean)

從服務容器中移除指定的服務類型,並選擇性地將服務升級至父項服務容器。

(繼承來源 IServiceContainer)

事件

Activated

發生於這個設計工具啟動時。

Deactivated

發生於這個設計工具停用時。

LoadComplete

發生於這個設計工具完成載入其文件時。

TransactionClosed

加入 TransactionClosed 事件的事件處理常式。

TransactionClosing

加入 TransactionClosing 事件的事件處理常式。

TransactionOpened

加入 TransactionOpened 事件的事件處理常式。

TransactionOpening

加入 TransactionOpening 事件的事件處理常式。

擴充方法

GetKeyedService<T>(IServiceProvider, Object)

IServiceProvider取得 型T別的服務。

GetKeyedServices(IServiceProvider, Type, Object)

IServiceProvider取得 型serviceType別服務的列舉。

GetKeyedServices<T>(IServiceProvider, Object)

IServiceProvider取得 型T別服務的列舉。

GetRequiredKeyedService(IServiceProvider, Type, Object)

IServiceProvider取得 型serviceType別的服務。

GetRequiredKeyedService<T>(IServiceProvider, Object)

IServiceProvider取得 型T別的服務。

CreateAsyncScope(IServiceProvider)

建立可用來解析已設定範圍服務的新 AsyncServiceScope

CreateScope(IServiceProvider)

建立可用來解析已設定範圍服務的新 IServiceScope

GetRequiredService(IServiceProvider, Type)

IServiceProvider 取得 serviceType 類型的服務。

GetRequiredService<T>(IServiceProvider)

IServiceProvider 取得 T 類型的服務。

GetService<T>(IServiceProvider)

IServiceProvider 取得 T 類型的服務。

GetServices(IServiceProvider, Type)

IServiceProvider 取得類型 serviceType 服務的列舉。

GetServices<T>(IServiceProvider)

IServiceProvider 取得類型 T 服務的列舉。

GetFakeLogCollector(IServiceProvider)

取得 對象,這個物件會收集傳送至假記錄器的記錄檔記錄。

GetFakeRedactionCollector(IServiceProvider)

從相依性插入容器取得假的重構函式收集器實例。

適用於

產品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

另請參閱