IDesignerHost 接口 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供用于管理设计器事务和组件的接口。
public interface class IDesignerHost : IServiceProvider, System::ComponentModel::Design::IServiceContainerpublic interface class IDesignerHost : System::ComponentModel::Design::IServiceContainerpublic interface IDesignerHost : IServiceProvider, System.ComponentModel.Design.IServiceContainer[System.Runtime.InteropServices.ComVisible(true)]
public interface IDesignerHost : IServiceProvider, System.ComponentModel.Design.IServiceContainerpublic interface IDesignerHost : System.ComponentModel.Design.IServiceContainertype IDesignerHost = interface
    interface IServiceContainer
    interface IServiceProvider[<System.Runtime.InteropServices.ComVisible(true)>]
type IDesignerHost = interface
    interface IServiceContainer
    interface IServiceProviderPublic Interface IDesignerHost
Implements IServiceContainer, IServiceProviderPublic Interface IDesignerHost
Implements IServiceContainer- 派生
- 属性
- 实现
示例
以下示例代码演示如何从设计器或站点组件获取 IDesignerHost 服务接口。
// Requests an IDesignerHost service from the design time environment using Component.Site.GetService()
IDesignerHost^ dh = static_cast<IDesignerHost^>(this->Component->Site->GetService( IDesignerHost::typeid ));
// Requests an IDesignerHost service from the design time environment using Component.Site.GetService()
IDesignerHost dh = (IDesignerHost) this.Component.Site.GetService(typeof(IDesignerHost));
' Requests an IDesignerHost service from the design time environment using Component.Site.GetService()
Dim host As IDesignerHost = CType(Me.Component.Site.GetService(GetType(IDesignerHost)), IDesignerHost)
以下示例代码演示如何使用 IDesignerHost 接口列出项目组件。
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>
#using <System.dll>
using namespace System;
using namespace System::ComponentModel;
using namespace System::ComponentModel::Design;
using namespace System::Drawing;
using namespace System::Windows::Forms;
using namespace System::Security::Permissions;
// Provides a form containing a listbox that can display 
// a list of project components.
public ref class DesignerHostListForm: public 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 = gcnew System::Windows::Forms::ListBox;
      this->listBox1->Location = System::Drawing::Point( 8, 8 );
      this->listBox1->Name = "listBox1";
      this->listBox1->Size = System::Drawing::Size( 385, 238 );
      this->listBox1->TabIndex = 0;
      this->listBox1->Anchor = static_cast<AnchorStyles>(((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom) | System::Windows::Forms::AnchorStyles::Left) | System::Windows::Forms::AnchorStyles::Right);
      this->ok_button = gcnew System::Windows::Forms::Button;
      this->ok_button->DialogResult = System::Windows::Forms::DialogResult::OK;
      this->ok_button->Location = 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 = static_cast<AnchorStyles>(System::Windows::Forms::AnchorStyles::Bottom | System::Windows::Forms::AnchorStyles::Right);
      this->ClientSize = System::Drawing::Size( 400, 285 );
      array<System::Windows::Forms::Control^>^temp2 = {this->ok_button,this->listBox1};
      this->Controls->AddRange( temp2 );
      this->ResumeLayout( false );
   }
public:
   ~DesignerHostListForm()
   {
   }
};
// 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 ref class IDesignerHostExampleDesigner: public IDesigner
{
private:
   System::ComponentModel::IComponent^ component;
public:
   IDesignerHostExampleDesigner(){}
   virtual void DoDefaultAction()
   {
      ListComponents();
   }
   virtual void Initialize( System::ComponentModel::IComponent^ component )
   {
      this->component = component;
      MessageBox::Show( "Double-click the IDesignerHostExample component to view a list of project components." );
   }
private:
   // Displays a list of components in the current design 
   // document when the default action of the designer is invoked.
   void ListComponents()
   {
      DesignerHostListForm^ listform = gcnew DesignerHostListForm;
      // Obtain an IDesignerHost service from the design environment.
      IDesignerHost^ host = dynamic_cast<IDesignerHost^>(this->component->Site->GetService( IDesignerHost::typeid ));
      // 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.
      System::Collections::IEnumerator^ myEnum = container->Components->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         IComponent^ component = safe_cast<IComponent^>(myEnum->Current);
         listform->listBox1->Items->Add( String::Concat( component->GetType()->Name, " : ", component->Site->Name ) );
      }
      listform->ShowDialog();
   }
public:
   property System::ComponentModel::IComponent^ Component 
   {
      virtual System::ComponentModel::IComponent^ get()
      {
         return this->component;
      }
   }
   property System::ComponentModel::Design::DesignerVerbCollection^ Verbs 
   {
      [PermissionSetAttribute(SecurityAction::Demand, Name="FullTrust")]
      virtual System::ComponentModel::Design::DesignerVerbCollection^ get()
      {
         DesignerVerbCollection^ dvc = gcnew DesignerVerbCollection;
         dvc->Add( gcnew DesignerVerb( "List Components",gcnew EventHandler( this, &IDesignerHostExampleDesigner::ListHandler ) ) );
         return dvc;
      }
   }
private:
   void ListHandler( Object^ /*sender*/, EventArgs^ /*e*/ )
   {
      ListComponents();
   }
public:
   ~IDesignerHostExampleDesigner(){}
};
// IDesignerHostExampleComponent is a component associated 
// with the IDesignerHostExampleDesigner that demonstrates 
// acquisition and use of the IDesignerHost service 
// to list project components.
[DesignerAttribute(IDesignerHostExampleDesigner::typeid)]
public ref class IDesignerHostExampleComponent: public System::ComponentModel::Component
{
public:
   IDesignerHostExampleComponent(){}
public:
   ~IDesignerHostExampleComponent(){}
};
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 );
        }	
    }
}
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.Drawing
Imports 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(GetType(IDesignerHostExampleDesigner))> _
    Public Class IDesignerHostExampleComponent
        Inherits System.ComponentModel.Component
        Public Sub New()
        End Sub
        Protected Overloads Sub Dispose(ByVal disposing As Boolean)
            MyBase.Dispose(disposing)
        End Sub 
    End Class 
    ' You can double-click the component of a 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.
    <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
    Public Class IDesignerHostExampleDesigner
        Implements IDesigner
        Private component_ As System.ComponentModel.IComponent
        Public Sub New()
        End Sub
        Public Sub DoDefaultAction() Implements IDesigner.DoDefaultAction
            ListComponents()
        End Sub
        Public Sub Initialize(ByVal component As System.ComponentModel.IComponent) Implements IDesigner.Initialize
            Me.component_ = component
            MessageBox.Show("Double-click the IDesignerHostExample component to view a list of project components.")
        End Sub
        ' Displays a list of components in the current design 
        ' document when the default action of the designer is invoked.
        Private Sub ListComponents()
            Using listform As New DesignerHostListForm()
                ' Obtain an IDesignerHost service from the design environment.
                Dim host As IDesignerHost = CType(Me.Component.Site.GetService(GetType(IDesignerHost)), IDesignerHost)
                ' Get the project components container (control containment depends on Controls collections)
                Dim container As IContainer = host.Container
                ' Add each component's type name and name to the list box.
                Dim comp As Component
                For Each comp In container.Components
                    listform.listBox1.Items.Add((comp.GetType().Name + " : " + Component.Site.Name))
                Next comp
                ' Display the form.
                listform.ShowDialog()
            End Using
        End Sub
        Public ReadOnly Property Component() As System.ComponentModel.IComponent Implements IDesigner.Component
            Get
                Return component_
            End Get
        End Property
        Public ReadOnly Property Verbs() As System.ComponentModel.Design.DesignerVerbCollection Implements IDesigner.Verbs
            Get
                Dim dvc As New DesignerVerbCollection()
                dvc.Add(New DesignerVerb("List Components", New EventHandler(AddressOf ListHandler)))
                Return dvc
            End Get
        End Property
        Private Sub ListHandler(ByVal sender As Object, ByVal e As EventArgs)
            ListComponents()
        End Sub
        Public Sub Dispose() Implements IDisposable.Dispose
        End Sub
    End Class
    _ 
    ' Provides a form containing a list box that can display 
    ' a list of project components.
    Public Class DesignerHostListForm
        Inherits System.Windows.Forms.Form
        Public listBox1 As System.Windows.Forms.ListBox
        Private ok_button As System.Windows.Forms.Button
        Public Sub New()
            Me.Name = "DesignerHostListForm"
            Me.Text = "List of design-time project components"
            Me.SuspendLayout()
            Me.listBox1 = New System.Windows.Forms.ListBox()
            Me.listBox1.Location = New System.Drawing.Point(8, 8)
            Me.listBox1.Name = "listBox1"
            Me.listBox1.Size = New System.Drawing.Size(385, 238)
            Me.listBox1.TabIndex = 0
            Me.listBox1.Anchor = (((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
            Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right)
            Me.ok_button = New System.Windows.Forms.Button()
            Me.ok_button.DialogResult = System.Windows.Forms.DialogResult.OK
            Me.ok_button.Location = New System.Drawing.Point(232, 256)
            Me.ok_button.Name = "ok_button"
            Me.ok_button.TabIndex = 1
            Me.ok_button.Text = "OK"
            Me.ok_button.Anchor = (System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right)
            Me.ClientSize = New System.Drawing.Size(400, 285)
            Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.ok_button, Me.listBox1})
            Me.ResumeLayout(False)
        End Sub 
        Protected Overloads Sub Dispose(ByVal disposing As Boolean)
            MyBase.Dispose(disposing)
        End Sub 
    End Class 
End Namespace
注解
IDesignerHost是一个接口,它与 .NET Framework 窗体设计器体系结构配合使用,为设计器事务和组件管理提供支持。
.NET Framework不提供此接口的实现。 接口由支持设计器的开发工具实现。
调用方说明
若要从开发环境中获取 的 IDesignerHost 实现,请在组件在设计模式下处于活动状态时调用 GetService(Type) ,传递 类型 IDesignerHost 以请求 IDesignerHost 服务接口。
IDesignerHost 提供以下与设计器状态相关的成员:
- 属性 Loading 指示是否正在加载设计器或文档。 
- 当 Activated 设计器在显示前激活时发生该事件。 
- 停用 Deactivated 设计器时发生该事件。 
- 加载 LoadComplete 文档后发生该事件。 
- 方法 Activate() 激活设计器。 
IDesignerHost 提供与管理组件相关的以下成员:
- 属性 Container 指示设计器主机的容器。 
- 属性 RootComponent 指示根组件的基类。 
- 属性 RootComponentClassName 指示根组件的 类的名称。 
- 方法 CreateComponent(Type) 创建指定类型的组件。 
- 方法 DestroyComponent(IComponent) 销毁指定的组件。 
- 方法 GetDesigner(IComponent) 获取与指定组件关联的设计器。 
- 方法 GetType(String) 获取具有指定名称的 类型的实例。 
IDesignerHost 提供与管理事务相关的以下成员:
- 属性 InTransaction 指示设计器是否在事务中。 
- 属性 TransactionDescription 指示当前事务说明。 
- 事务 TransactionClosed 完成时发生 该事件。 
- 事务 TransactionClosing 即将完成时发生 该事件。 
- 事务 TransactionOpened 开始时发生 该事件。 
- 事务 TransactionOpening 即将开始时发生 该事件。 
- 方法 CreateTransaction() 创建并返回一个新事务。 
属性
| 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 事件的事件处理程序。 |