IComponentChangeService IComponentChangeService IComponentChangeService IComponentChangeService Interface

정의

구성 요소를 추가, 변경, 제거하거나 구성 요소의 이름을 바꾸는 이벤트에 대한 이벤트 처리기를 추가하고 제거하는 인터페이스를 제공하며 ComponentChanged 또는 ComponentChanging 이벤트를 발생시키는 메서드를 제공합니다.Provides an interface to add and remove the event handlers for events that add, change, remove or rename components, and provides methods to raise a ComponentChanged or ComponentChanging event.

public interface class IComponentChangeService
[System.Runtime.InteropServices.ComVisible(true)]
public interface IComponentChangeService
type IComponentChangeService = interface
Public Interface IComponentChangeService
특성

예제

다음 예제에서는 사용 하는 방법에 설명 합니다 IComponentChangeService 디자인 모드에서 추가, 제거, 및 구성 요소에 대 한 변경 내용에 대 한 알림을 수신 하는 인터페이스입니다.This following example demonstrates how to use the IComponentChangeService interface to receive notifications about the addition of, removal of, and changes to components in design mode.

#using <system.dll>
#using <system.windows.forms.dll>
#using <system.drawing.dll>

using namespace System;
using namespace System::Drawing;
using namespace System::Collections;
using namespace System::ComponentModel;
using namespace System::ComponentModel::Design;
using namespace System::Windows::Forms;

/*  This sample illustrates how to use the IComponentChangeService interface
    to handle component change events.  The ComponentClass control attaches
    event handlers when it is sited in a document, and displays a message
    when notification that a component has been added, removed, or changed
    is received from the IComponentChangeService.

    To run this sample, add the ComponentClass control to a Form and
    add, remove, or change components to see the behavior of the
    component change event handlers. */

public ref class ComponentClass: public UserControl
{
private:
   System::ComponentModel::Container^ components;
   ListBox^ listBox1;
   IComponentChangeService^ m_changeService;
   void InitializeComponent()
   {
      this->listBox1 = gcnew ListBox;
      this->SuspendLayout();

      // listBox1.
      this->listBox1->Location = System::Drawing::Point( 24, 16 );
      this->listBox1->Name = "listBox1";
      this->listBox1->Size = System::Drawing::Size( 576, 277 );
      this->listBox1->TabIndex = 0;

      // ComponentClass.
      array<Control^>^myArray = {listBox1};
      this->Controls->AddRange( myArray );
      this->Name = "ComponentClass";
      this->Size = System::Drawing::Size( 624, 320 );
      this->ResumeLayout( false );
   }

   void ClearChangeNotifications()
   {
      // The m_changeService value is 0 when not in design mode,
      // as the IComponentChangeService is only available at design time.
      m_changeService = dynamic_cast<IComponentChangeService^>(GetService( IComponentChangeService::typeid ));

      // Clear our the component change events to prepare for re-siting.
      if ( m_changeService != nullptr )
      {
         m_changeService->ComponentChanged -= gcnew ComponentChangedEventHandler( this, &ComponentClass::OnComponentChanged );
         m_changeService->ComponentChanging -= gcnew ComponentChangingEventHandler( this, &ComponentClass::OnComponentChanging );
         m_changeService->ComponentAdded -= gcnew ComponentEventHandler( this, &ComponentClass::OnComponentAdded );
         m_changeService->ComponentAdding -= gcnew ComponentEventHandler( this, &ComponentClass::OnComponentAdding );
         m_changeService->ComponentRemoved -= gcnew ComponentEventHandler( this, &ComponentClass::OnComponentRemoved );
         m_changeService->ComponentRemoving -= gcnew ComponentEventHandler( this, &ComponentClass::OnComponentRemoving );
         m_changeService->ComponentRename -= gcnew ComponentRenameEventHandler( this, &ComponentClass::OnComponentRename );
      }
   }

   void RegisterChangeNotifications()
   {
      // Register the event handlers for the IComponentChangeService events
      if ( m_changeService != nullptr )
      {
         m_changeService->ComponentChanged += gcnew ComponentChangedEventHandler( this, &ComponentClass::OnComponentChanged );
         m_changeService->ComponentChanging += gcnew ComponentChangingEventHandler( this, &ComponentClass::OnComponentChanging );
         m_changeService->ComponentAdded += gcnew ComponentEventHandler( this, &ComponentClass::OnComponentAdded );
         m_changeService->ComponentAdding += gcnew ComponentEventHandler( this, &ComponentClass::OnComponentAdding );
         m_changeService->ComponentRemoved += gcnew ComponentEventHandler( this, &ComponentClass::OnComponentRemoved );
         m_changeService->ComponentRemoving += gcnew ComponentEventHandler( this, &ComponentClass::OnComponentRemoving );
         m_changeService->ComponentRename += gcnew ComponentRenameEventHandler( this, &ComponentClass::OnComponentRename );
      }
   }

   /* This method handles the OnComponentChanged event to display a notification. */
   void OnComponentChanged( Object^ /*sender*/, ComponentChangedEventArgs^ ce )
   {
      if ( ce->Component != nullptr && static_cast<IComponent^>(ce->Component)->Site != nullptr && ce->Member != nullptr )
            OnUserChange( "The " + ce->Member->Name + " member of the " + static_cast<IComponent^>(ce->Component)->Site->Name + " component has been changed." );
   }


   /* This method handles the OnComponentChanging event to display a notification. */
   void OnComponentChanging( Object^ /*sender*/, ComponentChangingEventArgs^ ce )
   {
      if ( ce->Component != nullptr && static_cast<IComponent^>(ce->Component)->Site != nullptr && ce->Member != nullptr )
            OnUserChange( "The " + ce->Member->Name + " member of the " + static_cast<IComponent^>(ce->Component)->Site->Name + " component is being changed." );
   }

   /* This method handles the OnComponentAdded event to display a notification. */
   void OnComponentAdded( Object^ /*sender*/, ComponentEventArgs^ ce )
   {
      OnUserChange( "A component, " + ce->Component->Site->Name + ", has been added." );
   }

   /* This method handles the OnComponentAdding event to display a notification. */
   void OnComponentAdding( Object^ /*sender*/, ComponentEventArgs^ ce )
   {
      OnUserChange( "A component of type " + ce->Component->GetType()->FullName + " is being added." );
   }

   /* This method handles the OnComponentRemoved event to display a notification. */
   void OnComponentRemoved( Object^ /*sender*/, ComponentEventArgs^ ce )
   {
      OnUserChange( "A component, " + ce->Component->Site->Name + ", has been removed." );
   }

   /* This method handles the OnComponentRemoving event to display a notification. */
   void OnComponentRemoving( Object^ /*sender*/, ComponentEventArgs^ ce )
   {
      OnUserChange( "A component, " + ce->Component->Site->Name + ", is being removed." );
   }

   /* This method handles the OnComponentRename event to display a notification. */
   void OnComponentRename( Object^ /*sender*/, ComponentRenameEventArgs^ ce )
   {
      OnUserChange( "A component, " + ce->OldName + ", was renamed to " + ce->NewName + "." );
   }

   // This method adds a specified notification message to the control's listbox.
   void OnUserChange( String^ text )
   {
      listBox1->Items->Add( text );
   }

public:
   ComponentClass()
   {
      InitializeComponent();
   }

   property ISite^ Site 
   {
      // This override allows the control to register event handlers for IComponentChangeService events
      // at the time the control is sited, which happens only in design mode.
      virtual ISite^ get() override
      {
         return Site;
      }

      virtual void set( ISite^ value ) override
      {
         // Clear any component change event handlers.
         ClearChangeNotifications();

         // Set the new Site value.
         Site = value;
         m_changeService = static_cast<IComponentChangeService^>(GetService( IComponentChangeService::typeid ));

         // Register event handlers for component change events.
         RegisterChangeNotifications();
      }
   }

   // Clean up any resources being used.
public:
   ~ComponentClass()
   {
      ClearChangeNotifications();
      if ( components != nullptr )
      {
         delete components;
      }
   }
};
using System;
using System.Data;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Windows.Forms;

/*  This sample illustrates how to use the IComponentChangeService interface 
    to handle component change events.  The ComponentClass control attaches 
    event handlers when it is sited in a document, and displays a message 
    when notification that a component has been added, removed, or changed
    is received from the IComponentChangeService.

    To run this sample, add the ComponentClass control to a Form and
    add, remove, or change components to see the behavior of the
    component change event handlers. */

namespace IComponentChangeServiceExample 
{
    public class ComponentClass : System.Windows.Forms.UserControl 
    {
        private System.ComponentModel.Container components = null;
	private System.Windows.Forms.ListBox listBox1;
	private IComponentChangeService m_changeService;
 
	public ComponentClass() 
	{
	    InitializeComponent();
	}

	private void InitializeComponent() 
	{
  	    this.listBox1 = new System.Windows.Forms.ListBox();
	    this.SuspendLayout();

 	    // listBox1.
	    this.listBox1.Location = new System.Drawing.Point(24, 16);
	    this.listBox1.Name = "listBox1";
	    this.listBox1.Size = new System.Drawing.Size(576, 277);
	    this.listBox1.TabIndex = 0;
		   
	    // ComponentClass.
	    this.Controls.AddRange(new System.Windows.Forms.Control[] {this.listBox1});
	    this.Name = "ComponentClass";
	    this.Size = new System.Drawing.Size(624, 320);

            this.ResumeLayout(false);
	}

	// This override allows the control to register event handlers for IComponentChangeService events
	// at the time the control is sited, which happens only in design mode.
	public override ISite Site 
	{
	    get 
	    {
		return base.Site;
	    }
	    set 
	    {		
		// Clear any component change event handlers.
		ClearChangeNotifications();		
				
		// Set the new Site value.
		base.Site = value;

		m_changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService));

		// Register event handlers for component change events.
		RegisterChangeNotifications();			
	    }
	}

	private void ClearChangeNotifications()
	{
	    // The m_changeService value is null when not in design mode, 
	    // as the IComponentChangeService is only available at design time.	
	    m_changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService));

 	    // Clear our the component change events to prepare for re-siting.				
	    if (m_changeService != null) 
	    {
	 	m_changeService.ComponentChanged -= new ComponentChangedEventHandler(OnComponentChanged);
		m_changeService.ComponentChanging -= new ComponentChangingEventHandler(OnComponentChanging);
		m_changeService.ComponentAdded -= new ComponentEventHandler(OnComponentAdded);
		m_changeService.ComponentAdding -= new ComponentEventHandler(OnComponentAdding);
		m_changeService.ComponentRemoved -= new ComponentEventHandler(OnComponentRemoved);
		m_changeService.ComponentRemoving -= new ComponentEventHandler(OnComponentRemoving);
		m_changeService.ComponentRename -= new ComponentRenameEventHandler(OnComponentRename);
	    }
	}

	private void RegisterChangeNotifications()
	{
	    // Register the event handlers for the IComponentChangeService events
	    if (m_changeService != null) 
	    {
		m_changeService.ComponentChanged += new ComponentChangedEventHandler(OnComponentChanged);
		m_changeService.ComponentChanging += new ComponentChangingEventHandler(OnComponentChanging);
		m_changeService.ComponentAdded += new ComponentEventHandler(OnComponentAdded);
		m_changeService.ComponentAdding += new ComponentEventHandler(OnComponentAdding);
		m_changeService.ComponentRemoved += new ComponentEventHandler(OnComponentRemoved);
		m_changeService.ComponentRemoving += new ComponentEventHandler(OnComponentRemoving);
		m_changeService.ComponentRename += new ComponentRenameEventHandler(OnComponentRename);
	    }
	}

	/* This method handles the OnComponentChanged event to display a notification. */
	private void OnComponentChanged(object sender, ComponentChangedEventArgs ce) 
	{
 	    if( ce.Component != null && ((IComponent)ce.Component).Site != null && ce.Member != null ) 
	    OnUserChange("The " + ce.Member.Name + " member of the " + ((IComponent)ce.Component).Site.Name + " component has been changed.");
	}

	/* This method handles the OnComponentChanging event to display a notification. */
	private void OnComponentChanging(object sender, ComponentChangingEventArgs ce) 
	{
	    if( ce.Component != null && ((IComponent)ce.Component).Site != null && ce.Member != null ) 
	    OnUserChange("The " + ce.Member.Name + " member of the " + ((IComponent)ce.Component).Site.Name + " component is being changed.");
	}

	/* This method handles the OnComponentAdded event to display a notification. */
	private void OnComponentAdded(object sender, ComponentEventArgs ce) 
	{			
	    OnUserChange("A component, " + ce.Component.Site.Name + ", has been added.");
	}

	/* This method handles the OnComponentAdding event to display a notification. */		
	private void OnComponentAdding(object sender, ComponentEventArgs ce) 
	{			
	    OnUserChange("A component of type " + ce.Component.GetType().FullName + " is being added.");
	}

	/* This method handles the OnComponentRemoved event to display a notification. */
	private void OnComponentRemoved(object sender, ComponentEventArgs ce) 
	{
	    OnUserChange("A component, " + ce.Component.Site.Name + ", has been removed.");
	}

	/* This method handles the OnComponentRemoving event to display a notification. */
	private void OnComponentRemoving(object sender, ComponentEventArgs ce) 
	{
	    OnUserChange("A component, " + ce.Component.Site.Name + ", is being removed.");
	}

	/* This method handles the OnComponentRename event to display a notification. */
	private void OnComponentRename(object sender, ComponentRenameEventArgs ce) 
	{
	    OnUserChange("A component, " + ce.OldName + ", was renamed to " + ce.NewName +".");
	}

	// This method adds a specified notification message to the control's listbox.
	private void OnUserChange(string text) 
	{
	    listBox1.Items.Add(text);
	}

	// Clean up any resources being used.
	protected override void Dispose( bool disposing ) 
	{
	    if( disposing ) 
	    {
		ClearChangeNotifications();
	        
		if(components != null) 
		{
		    components.Dispose();
		}
	    }
	    base.Dispose( disposing );
	}
    }
}
Imports System.Data
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.Windows.Forms

'  This sample illustrates how to use the IComponentChangeService interface 
'    to handle component change events.  The ComponentClass control attaches 
'    event handlers when it is sited in a document, and displays a message 
'    when notification that a component has been added, removed, or changed
'    is received from the IComponentChangeService.

'    To run this sample, add the ComponentClass control to a Form and
'    add, remove, or change components to see the behavior of the
'    component change event handlers. 

Namespace IComponentChangeServiceExample
    _
   Public Class ComponentClass
      Inherits System.Windows.Forms.UserControl
      Private components As System.ComponentModel.Container = Nothing
      Private listBox1 As System.Windows.Forms.ListBox
      Private m_changeService As IComponentChangeService    
      
      Public Sub New()
         InitializeComponent()
        End Sub

        Private Sub InitializeComponent()
            Me.listBox1 = New System.Windows.Forms.ListBox()
            Me.SuspendLayout()

            ' listBox1.
            Me.listBox1.Location = New System.Drawing.Point(24, 16)
            Me.listBox1.Name = "listBox1"
            Me.listBox1.Size = New System.Drawing.Size(576, 277)
            Me.listBox1.TabIndex = 0

            ' ComponentClass.
            Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.listBox1})
            Me.Name = "ComponentClass"
            Me.Size = New System.Drawing.Size(624, 320)

            Me.ResumeLayout(False)
        End Sub

        ' This override allows the control to register event handlers for IComponentChangeService events
        ' at the time the control is sited, which happens only in design mode.
        Public Overrides Property Site() As ISite
            Get
                Return MyBase.Site
            End Get
            Set(ByVal Value As ISite)
                ' Clear any component change event handlers.
                ClearChangeNotifications()

                ' Set the new Site value.
                MyBase.Site = Value

                m_changeService = CType(GetService(GetType(IComponentChangeService)), IComponentChangeService)

                ' Register event handlers for component change events.
                RegisterChangeNotifications()
            End Set
        End Property

        Private Sub ClearChangeNotifications()
            ' The m_changeService value is null when not in design mode, 
            ' as the IComponentChangeService is only available at design time.	
            m_changeService = CType(GetService(GetType(IComponentChangeService)), IComponentChangeService)

            ' Clear our the component change events to prepare for re-siting.				
            If (m_changeService IsNot Nothing) Then
                RemoveHandler m_changeService.ComponentChanged, AddressOf OnComponentChanged
                RemoveHandler m_changeService.ComponentChanging, AddressOf OnComponentChanging
                RemoveHandler m_changeService.ComponentAdded, AddressOf OnComponentAdded
                RemoveHandler m_changeService.ComponentAdding, AddressOf OnComponentAdding
                RemoveHandler m_changeService.ComponentRemoved, AddressOf OnComponentRemoved
                RemoveHandler m_changeService.ComponentRemoving, AddressOf OnComponentRemoving
                RemoveHandler m_changeService.ComponentRename, AddressOf OnComponentRename
            End If
        End Sub

        Private Sub RegisterChangeNotifications()
            ' Register the event handlers for the IComponentChangeService events
            If (m_changeService IsNot Nothing) Then
                AddHandler m_changeService.ComponentChanged, AddressOf OnComponentChanged
                AddHandler m_changeService.ComponentChanging, AddressOf OnComponentChanging
                AddHandler m_changeService.ComponentAdded, AddressOf OnComponentAdded
                AddHandler m_changeService.ComponentAdding, AddressOf OnComponentAdding
                AddHandler m_changeService.ComponentRemoved, AddressOf OnComponentRemoved
                AddHandler m_changeService.ComponentRemoving, AddressOf OnComponentRemoving
                AddHandler m_changeService.ComponentRename, AddressOf OnComponentRename
            End If
        End Sub

        ' This method handles the OnComponentChanged event to display a notification. 
        Private Sub OnComponentChanged(ByVal sender As Object, ByVal ce As ComponentChangedEventArgs)
            If (ce.Component IsNot Nothing) And (CType(ce.Component, IComponent).Site IsNot Nothing) And (ce.Member IsNot Nothing) Then
                OnUserChange(("The " + ce.Member.Name + " member of the " + CType(ce.Component, IComponent).Site.Name + " component has been changed."))
            End If
        End Sub

        ' This method handles the OnComponentChanging event to display a notification. 
        Private Sub OnComponentChanging(ByVal sender As Object, ByVal ce As ComponentChangingEventArgs)
            If (ce.Component IsNot Nothing) And (CType(ce.Component, IComponent).Site IsNot Nothing) And (ce.Member IsNot Nothing) Then
                OnUserChange(("The " + ce.Member.Name + " member of the " + CType(ce.Component, IComponent).Site.Name + " component is being changed."))
            End If
        End Sub

        ' This method handles the OnComponentAdded event to display a notification. 
        Private Sub OnComponentAdded(ByVal sender As Object, ByVal ce As ComponentEventArgs)
            OnUserChange(("A component, " + ce.Component.Site.Name + ", has been added."))
        End Sub

        ' This method handles the OnComponentAdding event to display a notification. 
        Private Sub OnComponentAdding(ByVal sender As Object, ByVal ce As ComponentEventArgs)
            OnUserChange(("A component of type " + (CType(ce.Component, Component)).GetType().FullName + " is being added."))
        End Sub

        ' This method handles the OnComponentRemoved event to display a notification. 
        Private Sub OnComponentRemoved(ByVal sender As Object, ByVal ce As ComponentEventArgs)
            OnUserChange(("A component, " + ce.Component.Site.Name + ", has been removed."))
        End Sub

        ' This method handles the OnComponentRemoving event to display a notification. 
        Private Sub OnComponentRemoving(ByVal sender As Object, ByVal ce As ComponentEventArgs)
            OnUserChange(("A component, " + ce.Component.Site.Name + ", is being removed."))
        End Sub

        ' This method handles the OnComponentRename event to display a notification. 
        Private Sub OnComponentRename(ByVal sender As Object, ByVal ce As ComponentRenameEventArgs)
            OnUserChange(("A component, " + ce.OldName + ", was renamed to " + ce.NewName + "."))
        End Sub

        ' This method adds a specified notification message to the control's listbox.
        Private Sub OnUserChange(ByVal [text] As String)
            listBox1.Items.Add([text])
        End Sub

        ' Clean up any resources being used.
        Protected Overloads Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                ClearChangeNotifications()

                If (components IsNot Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub

    End Class
End Namespace

설명

IComponentChangeService 다음 이벤트를 처리 하는 메서드를 나타내는 데 사용할 수 있는 인터페이스를 제공 합니다.IComponentChangeService provides an interface that can be used to indicate the methods that handle the following events:

일반적으로 디자인 환경에서 이러한 구성 요소 추가 발생 시킵니다., 변경, 제거 또는 이름 바꾸기 이벤트입니다.Typically, the design environment raises these component add, change, remove, or rename events. 디자이너를 사용 하 여이 인터페이스의 메서드를 호출 해야 DesignerTransaction 개체를 실행 취소를 제공 하 고 구성 요소에 영향을 주는 디자인 타임 작업에 대 한 기능을 다시 실행 합니다.Designers should call the methods of this interface when using DesignerTransaction objects to provide undo and redo functionality for design-time actions that affect components. 자세한 내용은 설명서에서 사용할 수는 DesignerTransaction합니다.More information is available in the documentation for DesignerTransaction. 일반적으로 루트 디자이너 에서만 처리 이러한 알림을 변경 합니다.Generally, only the root designer handles these change notifications.

또한이 서비스 구성 요소 변경 이벤트 또는 이벤트를 변경 하는 구성 요소를 발생 시키는 메서드를 제공 합니다.This service also provides methods that raise a component changed event or component changing event. A PropertyDescriptor 는 구성 요소 변경 되었거나이 사용 하 여 변경 하는 구성 요소를 나타낼 수 있습니다 또는 합니다 OnComponentChangedOnComponentChanging 메서드를 각각.A PropertyDescriptor or a component can indicate that a component has changed or is changing with the OnComponentChanged and OnComponentChanging methods, respectively.

메서드

OnComponentChanged(Object, MemberDescriptor, Object, Object) OnComponentChanged(Object, MemberDescriptor, Object, Object) OnComponentChanged(Object, MemberDescriptor, Object, Object) OnComponentChanged(Object, MemberDescriptor, Object, Object)

구성 요소 변경 서비스에 특정 구성 요소가 변경되었음을 알립니다.Announces to the component change service that a particular component has changed.

OnComponentChanging(Object, MemberDescriptor) OnComponentChanging(Object, MemberDescriptor) OnComponentChanging(Object, MemberDescriptor) OnComponentChanging(Object, MemberDescriptor)

구성 요소 변경 서비스에 특정 구성 요소가 변경 중임을 알립니다.Announces to the component change service that a particular component is changing.

이벤트

ComponentAdded ComponentAdded ComponentAdded ComponentAdded

구성 요소가 추가되면 발생합니다.Occurs when a component has been added.

ComponentAdding ComponentAdding ComponentAdding ComponentAdding

구성 요소가 추가되는 동안에 발생합니다.Occurs when a component is in the process of being added.

ComponentChanged ComponentChanged ComponentChanged ComponentChanged

구성 요소가 변경되면 발생합니다.Occurs when a component has been changed.

ComponentChanging ComponentChanging ComponentChanging ComponentChanging

구성 요소가 변경되는 동안에 발생합니다.Occurs when a component is in the process of being changed.

ComponentRemoved ComponentRemoved ComponentRemoved ComponentRemoved

구성 요소가 제거되면 발생합니다.Occurs when a component has been removed.

ComponentRemoving ComponentRemoving ComponentRemoving ComponentRemoving

구성 요소가 제거되는 동안에 발생합니다.Occurs when a component is in the process of being removed.

ComponentRename ComponentRename ComponentRename ComponentRename

구성 요소의 이름을 바꾸면 발생합니다.Occurs when a component is renamed.

적용 대상

추가 정보