Skip to main content
.NET Framework Class Library
IDesignerHost Interface

Provides an interface for managing designer transactions and components.

Namespace:   System.ComponentModel.Design
Assembly:  System (in System.dll)
Syntax
<[%$TOPIC/67107ctw_en-us_VS_110_1_0_0_0_0%](True)> _
Public Interface IDesignerHost _
	Inherits [%$TOPIC/67107ctw_en-us_VS_110_1_0_0_0_1%], [%$TOPIC/67107ctw_en-us_VS_110_1_0_0_0_2%]
[[%$TOPIC/67107ctw_en-us_VS_110_1_0_1_0_0%](true)]
public interface IDesignerHost : [%$TOPIC/67107ctw_en-us_VS_110_1_0_1_0_1%], 
	[%$TOPIC/67107ctw_en-us_VS_110_1_0_1_0_2%]
[[%$TOPIC/67107ctw_en-us_VS_110_1_0_2_0_0%](true)]
public interface class IDesignerHost : [%$TOPIC/67107ctw_en-us_VS_110_1_0_2_0_1%], 
	[%$TOPIC/67107ctw_en-us_VS_110_1_0_2_0_2%]
[<[%$TOPIC/67107ctw_en-us_VS_110_1_0_3_0_0%](true)>]
type IDesignerHost =  
    interface 
        interface [%$TOPIC/67107ctw_en-us_VS_110_1_0_3_0_1%] 
        interface [%$TOPIC/67107ctw_en-us_VS_110_1_0_3_0_2%] 
    end

The IDesignerHost type exposes the following members.

Properties
  NameDescription
Public property ContainerGets the container for this designer host.
Public property InTransactionGets a value indicating whether the designer host is currently in a transaction.
Public property LoadingGets a value indicating whether the designer host is currently loading the document.
Public property RootComponentGets the instance of the base class used as the root component for the current design.
Public property RootComponentClassNameGets the fully qualified name of the class being designed.
Public property TransactionDescriptionGets the description of the current transaction.
Top
Methods
  NameDescription
Public method ActivateActivates the designer that this host is hosting.
Public method AddService(Type, ServiceCreatorCallback)Adds the specified service to the service container. (Inherited from IServiceContainer.)
Public method AddService(Type, Object)Adds the specified service to the service container. (Inherited from IServiceContainer.)
Public method AddService(Type, ServiceCreatorCallback, Boolean)Adds the specified service to the service container, and optionally promotes the service to parent service containers. (Inherited from IServiceContainer.)
Public method AddService(Type, Object, Boolean)Adds the specified service to the service container, and optionally promotes the service to any parent service containers. (Inherited from IServiceContainer.)
Public method CreateComponent(Type)Creates a component of the specified type and adds it to the design document.
Public method CreateComponent(Type, String)Creates a component of the specified type and name, and adds it to the design document.
Public method CreateTransactionCreates a DesignerTransaction that can encapsulate event sequences to improve performance and enable undo and redo support functionality.
Public method CreateTransaction(String)Creates a DesignerTransaction that can encapsulate event sequences to improve performance and enable undo and redo support functionality, using the specified transaction description.
Public method DestroyComponentDestroys the specified component and removes it from the designer container.
Public method GetDesignerGets the designer instance that contains the specified component.
Public method GetServiceGets the service object of the specified type. (Inherited from IServiceProvider.)
Public method GetTypeGets an instance of the specified, fully qualified type name.
Public method RemoveService(Type)Removes the specified service type from the service container. (Inherited from IServiceContainer.)
Public method RemoveService(Type, Boolean)Removes the specified service type from the service container, and optionally promotes the service to parent service containers. (Inherited from IServiceContainer.)
Top
Events
  NameDescription
Public event ActivatedOccurs when this designer is activated.
Public event DeactivatedOccurs when this designer is deactivated.
Public event LoadCompleteOccurs when this designer completes loading its document.
Public event TransactionClosedAdds an event handler for the TransactionClosed event.
Public event TransactionClosingAdds an event handler for the TransactionClosing event.
Public event TransactionOpenedAdds an event handler for the TransactionOpened event.
Public event TransactionOpeningAdds an event handler for the TransactionOpening event.
Top
Remarks

IDesignerHost is an interface that works with the .NET Framework forms designer architecture to provide support for designer transaction and component management.

The .NET Framework does not provide an implementation of this interface. The interface is implemented by development tools that support designers.

Notes to Callers

To obtain an implementation of IDesignerHost from a development environment, call GetService while your component is active in design mode, passing the type of IDesignerHost to request an IDesignerHost service interface.

IDesignerHost provides the following members related to designer state:

  • The Loading property indicates whether a designer or document is being loaded.

  • The Activated event occurs when a designer is activated before display.

  • The Deactivated event occurs when a designer is deactivated.

  • The LoadComplete event occurs after a document is loaded.

  • The Activate method activates the designer.

IDesignerHost provides the following members related to managing components:

  • The Container property indicates the container for the designer host.

  • The RootComponent property indicates the base class for the root component.

  • The RootComponentClassName property indicates the name of the class of the root component.

  • The CreateComponent method creates the specified type of component.

  • The DestroyComponent method destroys the specified component.

  • The GetDesigner method gets the designer associated with a specified component.

  • The GetType method gets an instance of the type with the specified name.

IDesignerHost provides the following members related to managing transactions:

Examples

The following example code demonstrates how to obtain the IDesignerHost service interface from a designer or sited component.

' 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)
// 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()
IDesignerHost^ dh = static_cast<IDesignerHost^>(this->Component->Site->GetService( IDesignerHost::typeid ));

The following example code demonstrates using the IDesignerHost interface to list project components.

Imports System
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 'New 

        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 'New 

        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
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.
    [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] 
    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 );
        }	
    }
}
#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(){}
};
Version Information

.NET Framework

Supported in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1
Platforms

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.