英語で読む

次の方法で共有


IComponentChangeService インターフェイス

定義

コンポーネントの追加、変更、削除、または名前変更のイベントのイベント ハンドラーを追加および削除するためのインターフェイスを提供すると共に、ComponentChanged イベントまたは ComponentChanging イベントを発生させるメソッドを提供します。

C#
public interface IComponentChangeService
C#
[System.Runtime.InteropServices.ComVisible(true)]
public interface IComponentChangeService
属性

次の例では、 インターフェイスを IComponentChangeService 使用して、デザイン モードでのコンポーネントの追加、削除、および変更に関する通知を受け取る方法を示します。

C#
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 );
    }
    }
}

注釈

IComponentChangeService は、次のイベントを処理するメソッドを示すために使用できるインターフェイスを提供します。

  • ComponentAddedは、コンポーネントが追加されたときに発生します。

  • ComponentAddingは、コンポーネントが追加されるときに発生します。

  • ComponentChangedは、コンポーネントが変更されたときに発生します。

  • ComponentChangingは、コンポーネントが変更されようとしているときに発生します。

  • ComponentRemovedは、コンポーネントが削除されたときに発生します。

  • ComponentRemovingは、コンポーネントが削除されるときに発生します。

  • ComponentRenameは、コンポーネントの名前が変更されたときに発生します。

通常、デザイン環境では、これらのコンポーネントの追加、変更、削除、または名前変更イベントが発生します。 デザイナーは、オブジェクトを使用して DesignerTransaction 、コンポーネントに影響を与えるデザイン時のアクションに対して元に戻す機能とやり直し機能を提供する場合は、このインターフェイスのメソッドを呼び出す必要があります。 詳細については、 のドキュメントを参照してください DesignerTransaction。 一般に、ルート デザイナーのみがこれらの変更通知を処理します。

このサービスには、コンポーネント変更イベントまたはコンポーネント変更イベントを発生させるメソッドも用意されています。 PropertyDescriptorまたは コンポーネントは、コンポーネントがそれぞれ および メソッドでOnComponentChangedOnComponentChanging変更または変更されていることを示すことができます。

メソッド

OnComponentChanged(Object, MemberDescriptor, Object, Object)

コンポーネント変更サービスに対して、特定のコンポーネントが変更されたことを通知します。

OnComponentChanging(Object, MemberDescriptor)

コンポーネント変更サービスに対して、特定のコンポーネントがこれから変更されることを通知します。

イベント

ComponentAdded

コンポーネントが追加されたときに発生します。

ComponentAdding

コンポーネントが追加されているときに発生します。

ComponentChanged

コンポーネントが変更されたときに発生します。

ComponentChanging

コンポーネントが変更されているときに発生します。

ComponentRemoved

コンポーネントが削除されたときに発生します。

ComponentRemoving

コンポーネントが削除されているときに発生します。

ComponentRename

コンポーネントの名前が変更されたときに発生します。

適用対象

製品 バージョン
.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

こちらもご覧ください