次の方法で共有


IPropertyValueUIService インターフェイス

プロパティ ブラウザに表示されるコンポーネントのプロパティのイメージ、ツール ヒント、およびイベント ハンドラを管理するユーザー インターフェイスを提供します。

この型のすべてのメンバの一覧については、IPropertyValueUIService メンバ を参照してください。

Public Interface IPropertyValueUIService
[C#]
public interface IPropertyValueUIService
[C++]
public __gc __interface IPropertyValueUIService
[JScript]
public interface IPropertyValueUIService

解説

コンポーネントでは、 IPropertyValueUIService インターフェイスを使用することで、コンポーネントのすべてのプロパティに対して PropertyValueUIItem オブジェクトを提供できます。プロパティに関連付けられた PropertyValueUIItem では、イメージとツール ヒントの他に、プロパティに関連付けられたイメージがクリックされたときに発生するイベントのイベント ハンドラを提供できます。

IPropertyValueUIService インターフェイスは、内部リストに対して PropertyValueUIHandler デリゲートの追加、削除、および検索を行うメソッドを提供します。コンポーネントのプロパティがプロパティ ブラウザに表示されるときに、リスト中の各 PropertyValueUIHandler は、 PropertyValueUIItem をコンポーネントの各プロパティに提供できます。

プロパティ ブラウザは、オブジェクトのプロパティを表示するように設定されると、コンポーネントの各プロパティごとに、プロパティを表す PropertyDescriptor を渡して、このインターフェイスの GetPropertyUIValueItems メソッドを呼び出します。 GetPropertyUIValueItems メソッドは、サービスに追加されている各 PropertyValueUIHandler を呼び出します。各 PropertyValueUIHandler は、 valueUIItemList パラメータで渡される PropertyValueUIItemArrayList パラメータに追加することによって、 propDesc パラメータで渡される PropertyDescriptor が表すプロパティに対してそれらの UI 項目を提供します。

PropertyValueUIItem には、プロパティ名の横に表示するイメージ、ツール ヒント文字列、およびプロパティに関連付けられたイメージがダブルクリックされたときに呼び出されるイベント ハンドラを格納できます。

使用例

[Visual Basic, C#, C++] 次のコード例では、 IPropertyValueUIService インターフェイスのインスタンスを取得するコンポーネントを作成します。このコンポーネントは、取得したサービスに PropertyValueUIHandler を追加します。追加されたこのハンドラは、コンポーネントに含まれているプロパティのうち、 HorizontalMargin または VerticalMargin という名前のすべてのプロパティに対して、 PropertyValueUIItem オブジェクトを提供します。なお、この PropertyValueUIItem は、対象のプロパティにイメージとツールヒントを提供するだけでなく、それらのプロパティのイメージがクリックされたときにメッセージ ボックスを表示するイベント ハンドラも提供します。イメージとツールヒントは、これらのプロパティが System.Windows.Forms.PropertyGrid に表示されているときに表示されます。

 
Imports System
Imports System.Collections
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.Drawing
Imports System.Drawing.Design
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.Windows.Forms
Imports System.Windows.Forms.Design

' This component obtains the IPropertyValueUIService and adds a
' PropertyValueUIHandler that provides PropertyValueUIItem objects
' which provide an image, tooltip and invoke event handler to
' any properties named HorizontalMargin and VerticalMargin, 
' such as the example integer properties on this component.    
Public Class PropertyUIComponent
    Inherits System.ComponentModel.Component

    ' Example property for which to provide PropertyValueUIItem.
    Public Property HorizontalMargin() As Integer
        Get
            Return hMargin
        End Get
        Set(ByVal Value As Integer)
            hMargin = Value
        End Set
    End Property

    ' Example property for which to provide PropertyValueUIItem.       
    Public Property VerticalMargin() As Integer
        Get
            Return vMargin
        End Get
        Set(ByVal Value As Integer)
            vMargin = Value
        End Set
    End Property

    ' Field storing the value of the HorizontalMargin property
    Private hMargin As Integer

    ' Field storing the value of the VerticalMargin property
    Private vMargin As Integer

    ' Base64-encoded serialized image data for image icon.
    Private imageBlob1 As String = "AAEAAAD/////AQAAAAAAAAAMAgAAAFRTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj0xLjAuMzMwMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABVTeXN0ZW0uRHJhd2luZy5CaXRtYXABAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA9gAAAAJCTfYAAAAAAAAANgAAACgAAAAIAAAACAAAAAEAGAAAAAAAAAAAAMQOAADEDgAAAAAAAAAAAAD///////////////////////////////////8AAAD///////////////8AAAD///////8AAAD///////////////8AAAD///////8AAAD///8AAAAAAAD///8AAAD///////8AAAD///8AAAAAAAD///8AAAD///////8AAAD///////////////8AAAD///////8AAAD///////////////8AAAD///////////////////////////////////8L"

    ' Constructor.
    Public Sub New(ByVal container As System.ComponentModel.IContainer)
        If Not (container Is Nothing) Then
            container.Add(Me)
        End If
        hMargin = 0
        vMargin = 0
    End Sub

    ' Default component constructor that specifies no container.
    Public Sub New()
        MyClass.New(Nothing)
    End Sub

    ' PropertyValueUIHandler delegate that provides PropertyValueUIItem
    ' objects to any properties named HorizontalMargin or VerticalMargin.
    Private Sub marginPropertyValueUIHandler(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal propDesc As System.ComponentModel.PropertyDescriptor, ByVal itemList As ArrayList)
        ' A PropertyValueUIHandler added to the IPropertyValueUIService
        ' is queried once for each property of a component and passed
        ' a PropertyDescriptor that represents the characteristics of 
        ' the property when the Properties window is set to a new 
        ' component. A PropertyValueUIHandler can determine whether 
        ' to add a PropertyValueUIItem for the object to its ValueUIItem 
        ' list depending on the values of the PropertyDescriptor.
        If propDesc.DisplayName.Equals("HorizontalMargin") Then
            Dim img As Image = DeserializeFromBase64Text(imageBlob1)
            itemList.Add(New PropertyValueUIItem(img, New PropertyValueUIItemInvokeHandler(AddressOf Me.marginInvoke), "Test ToolTip"))
        End If
        If propDesc.DisplayName.Equals("VerticalMargin") Then
            Dim img As Image = DeserializeFromBase64Text(imageBlob1)
            img.RotateFlip(RotateFlipType.Rotate90FlipNone)
            itemList.Add(New PropertyValueUIItem(img, New PropertyValueUIItemInvokeHandler(AddressOf Me.marginInvoke), "Test ToolTip"))
        End If
    End Sub

    ' Invoke handler associated with the PropertyValueUIItem objects 
    ' provided by the marginPropertyValueUIHandler.
    Private Sub marginInvoke(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal propDesc As System.ComponentModel.PropertyDescriptor, ByVal item As PropertyValueUIItem)
        MessageBox.Show("Test invoke message box")
    End Sub

    ' Component.Site override to add the marginPropertyValueUIHandler
    ' when the component is sited, and to remove it when the site is 
    ' set to null.
    Public Overrides Property Site() As System.ComponentModel.ISite
        Get
            Return MyBase.Site
        End Get
        Set(ByVal Value As System.ComponentModel.ISite)
            If Not (Value Is Nothing) Then
                MyBase.Site = Value
                Dim uiService As IPropertyValueUIService = CType(Me.GetService(GetType(IPropertyValueUIService)), IPropertyValueUIService)
                If Not (uiService Is Nothing) Then
                    uiService.AddPropertyValueUIHandler(New PropertyValueUIHandler(AddressOf Me.marginPropertyValueUIHandler))
                End If
            Else
                Dim uiService As IPropertyValueUIService = CType(Me.GetService(GetType(IPropertyValueUIService)), IPropertyValueUIService)
                If Not (uiService Is Nothing) Then
                    uiService.RemovePropertyValueUIHandler(New PropertyValueUIHandler(AddressOf Me.marginPropertyValueUIHandler))
                End If
                MyBase.Site = Value
            End If
        End Set
    End Property

    ' This method can be used to retrieve an Image from a block 
    ' of Base64-encoded text.
    Private Function DeserializeFromBase64Text(ByVal [text] As String) As Image
        Dim img As Image = Nothing
        Dim memBytes As Byte() = Convert.FromBase64String([text])
        Dim formatter = New BinaryFormatter()
        Dim stream As New MemoryStream(memBytes)
        img = CType(formatter.Deserialize(stream), Image)
        stream.Close()
        Return img
    End Function

End Class

[C#] 
using System;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Drawing.Design;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Windows.Forms;
using System.Windows.Forms.Design;

namespace PropertyValueUIServiceExample
{
    // This component obtains the IPropertyValueUIService and adds a
    // PropertyValueUIHandler that provides PropertyValueUIItem objects
    // which provide an image, ToolTip, and invoke event handler to
    // any properties named HorizontalMargin and VerticalMargin, 
    // such as the example integer properties on this component.    
    public class PropertyUIComponent : System.ComponentModel.Component
    {
        // Example property for which to provide a PropertyValueUIItem.
        public int HorizontalMargin 
        {
            get
            {
                return hMargin;
            }
            set
            {
                hMargin = value;
            }
        }
        // Example property for which to provide a PropertyValueUIItem.
        public int VerticalMargin
        {
            get
            {
                return vMargin;
            }
            set
            {
                vMargin = value;
            }
        }

        // Field storing the value of the HorizontalMargin property.
        private int hMargin;

        // Field storing the value of the VerticalMargin property.
        private int vMargin;        

        // Base64-encoded serialized image data for image icon.
        private string imageBlob1 = "AAEAAAD/////AQAAAAAAAAAMAgAAAFRTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj0xLjAuMzMwMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABVTeXN0ZW0uRHJhd2luZy5CaXRtYXABAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA9gAAAAJCTfYAAAAAAAAANgAAACgAAAAIAAAACAAAAAEAGAAAAAAAAAAAAMQOAADEDgAAAAAAAAAAAAD///////////////////////////////////8AAAD///////////////8AAAD///////8AAAD///////////////8AAAD///////8AAAD///8AAAAAAAD///8AAAD///////8AAAD///8AAAAAAAD///8AAAD///////8AAAD///////////////8AAAD///////8AAAD///////////////8AAAD///////////////////////////////////8L";
                
        // Constructor.
        public PropertyUIComponent(System.ComponentModel.IContainer container)
        {
            if( container != null )
                container.Add(this);
            hMargin = 0;        
            vMargin = 0;
        }

        // Default component constructor that specifies no container.
        public PropertyUIComponent() : this(null)
        {}

        // PropertyValueUIHandler delegate that provides PropertyValueUIItem
        // objects to any properties named HorizontalMargin or VerticalMargin.
        private void marginPropertyValueUIHandler(System.ComponentModel.ITypeDescriptorContext context, System.ComponentModel.PropertyDescriptor propDesc, ArrayList itemList)
        {
            // A PropertyValueUIHandler added to the IPropertyValueUIService
            // is queried once for each property of a component and passed
            // a PropertyDescriptor that represents the characteristics of 
            // the property when the Properties window is set to a new 
            // component. A PropertyValueUIHandler can determine whether 
            // to add a PropertyValueUIItem for the object to its ValueUIItem 
            // list depending on the values of the PropertyDescriptor.
            if( propDesc.DisplayName.Equals( "HorizontalMargin" ) )
            {
                Image img = DeserializeFromBase64Text(imageBlob1);
                itemList.Add( new PropertyValueUIItem( img, new PropertyValueUIItemInvokeHandler(this.marginInvoke), "Test ToolTip") );
            }
            if( propDesc.DisplayName.Equals( "VerticalMargin" ) )
            {
                Image img = DeserializeFromBase64Text(imageBlob1);
                img.RotateFlip(RotateFlipType.Rotate90FlipNone);
                itemList.Add( new PropertyValueUIItem( img, new PropertyValueUIItemInvokeHandler(this.marginInvoke), "Test ToolTip") );
            }
        }

        // Invoke handler associated with the PropertyValueUIItem objects 
        // provided by the marginPropertyValueUIHandler.
        private void marginInvoke(System.ComponentModel.ITypeDescriptorContext context, System.ComponentModel.PropertyDescriptor propDesc, PropertyValueUIItem item)
        {
            MessageBox.Show("Test invoke message box");
        }

        // Component.Site override to add the marginPropertyValueUIHandler
        // when the component is sited, and to remove it when the site is 
        // set to null.
        public override System.ComponentModel.ISite Site
        {
            get
            {
                return base.Site;
            }
            set
            {                
                if( value != null )
                {
                    base.Site = value;
                    IPropertyValueUIService uiService = (IPropertyValueUIService)this.GetService(typeof(IPropertyValueUIService));
                    if( uiService != null )                    
                        uiService.AddPropertyValueUIHandler( new PropertyValueUIHandler(this.marginPropertyValueUIHandler) );                                        
                }
                else
                {
                    IPropertyValueUIService uiService = (IPropertyValueUIService)this.GetService(typeof(IPropertyValueUIService));
                    if( uiService != null )                    
                        uiService.RemovePropertyValueUIHandler( new PropertyValueUIHandler(this.marginPropertyValueUIHandler) );                                        
                    base.Site = value;
                }
            }
        }

        // This method can be used to retrieve an Image from a block 
        // of Base64-encoded text.
        private Image DeserializeFromBase64Text(string text)
        {
            Image img = null;
            byte[] memBytes = Convert.FromBase64String(text);
            IFormatter formatter = new BinaryFormatter();
            MemoryStream stream = new MemoryStream(memBytes);
            img = (Image)formatter.Deserialize(stream);
            stream.Close();
            return img;
        }
    }
}

[C++] 
#using <mscorlib.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>
#using <System.dll>

using namespace System;
using namespace System::Collections;
using namespace System::ComponentModel;
using namespace System::ComponentModel::Design;
using namespace System::Drawing;
using namespace System::Drawing::Design;
using namespace System::IO;
using namespace System::Runtime::Serialization;
using namespace System::Runtime::Serialization::Formatters::Binary;
using namespace System::Windows::Forms;
using namespace System::Windows::Forms::Design;

namespace PropertyValueUIServiceExample {
   // This component obtains the IPropertyValueUIService and adds a
   // PropertyValueUIHandler that provides PropertyValueUIItem objects
   // which provide an image, ToolTip, and invoke event handler to
   // any properties named horizontalMargin and verticalMargin,
   // such as the example integer properties on this component.
public __gc class PropertyUIComponent : public System::ComponentModel::Component {
   // Example property for which to provide a PropertyValueUIItem.
public:
   __property int get_horizontalMargin() {
      return hMargin;
   }
   __property void set_horizontalMargin(int value) {
      hMargin = value;
   }

   // Example property for which to provide a PropertyValueUIItem.
   __property int get_verticalMargin() {
      return vMargin;
   }
   __property void set_verticalMargin(int value) {
      vMargin = value;
   }


private:
   // Field storing the value of the horizontalMargin property.
   int  hMargin;
   // Field storing the value of the verticalMargin property.
   int  vMargin;
   // Base64-encoded serialized image data for image icon.
   String* imageBlob1;

public:
   // Constructor.
   PropertyUIComponent(System::ComponentModel::IContainer* container) {
      imageBlob1 = S"AAEAAAD/////AQAAAAAAAAAMAgAAAFRTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj0xLjAuMzMwMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABVTeXN0ZW0uRHJhd2luZy5CaXRtYXABAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA9gAAAAJCTfYAAAAAAAAANgAAACgAAAAIAAAACAAAAAEAGAAAAAAAAAAAAMQOAADEDgAAAAAAAAAAAAD///////////////////////////////////8AAAD///////////////8AAAD///////8AAAD///////////////8AAAD///////8AAAD///8AAAAAAAD///8AAAD///////8AAAD///8AAAAAAAD///8AAAD///////8AAAD///////////////8AAAD///////8AAAD///////////////8AAAD///////////////////////////////////8L";
      if (container != 0)
         container->Add(this);
      hMargin = 0;
      vMargin = 0;
   }

   // Default component constructor that specifies no container.
   PropertyUIComponent(){
      imageBlob1 = S"AAEAAAD/////AQAAAAAAAAAMAgAAAFRTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj0xLjAuMzMwMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABVTeXN0ZW0uRHJhd2luZy5CaXRtYXABAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA9gAAAAJCTfYAAAAAAAAANgAAACgAAAAIAAAACAAAAAEAGAAAAAAAAAAAAMQOAADEDgAAAAAAAAAAAAD///////////////////////////////////8AAAD///////////////8AAAD///////8AAAD///////////////8AAAD///////8AAAD///8AAAAAAAD///8AAAD///////8AAAD///8AAAAAAAD///8AAAD///////8AAAD///////////////8AAAD///////8AAAD///////////////8AAAD///////////////////////////////////8L";
      hMargin = 0;
      vMargin = 0;
   }

   // PropertyValueUIHandler delegate that provides PropertyValueUIItem
   // objects to any properties named horizontalMargin or verticalMargin.
private:
   void marginPropertyValueUIHandler(System::ComponentModel::ITypeDescriptorContext* /*context*/, System::ComponentModel::PropertyDescriptor* propDesc, ArrayList* itemList) {
      // A PropertyValueUIHandler added to the IPropertyValueUIService
      // is queried once for each property of a component and passed
      // a PropertyDescriptor that represents the characteristics of
      // the property when the Properties window is set to a new
      // component. A PropertyValueUIHandler can determine whether
      // to add a PropertyValueUIItem for the object to its ValueUIItem
      // list depending on the values of the PropertyDescriptor.
      if (propDesc->DisplayName->Equals(S"horizontalMargin")) {
         Image* img = DeserializeFromBase64Text(imageBlob1);
         itemList->Add(new PropertyValueUIItem(img, new PropertyValueUIItemInvokeHandler(this, &PropertyUIComponent::marginInvoke), S"Test ToolTip"));
      }
      if (propDesc->DisplayName->Equals(S"verticalMargin")) {
         Image* img = DeserializeFromBase64Text(imageBlob1);
         img->RotateFlip(RotateFlipType::Rotate90FlipNone);
         itemList->Add(new PropertyValueUIItem(img, new PropertyValueUIItemInvokeHandler(this, &PropertyUIComponent::marginInvoke), S"Test ToolTip"));
      }
   }

   // Invoke handler associated with the PropertyValueUIItem objects
   // provided by the marginPropertyValueUIHandler.
   void marginInvoke(System::ComponentModel::ITypeDescriptorContext* /*context*/, System::ComponentModel::PropertyDescriptor* /*propDesc*/, PropertyValueUIItem* /*item*/) {
      MessageBox::Show(S"Test invoke message box");
   }

   // Component::Site  to add the marginPropertyValueUIHandler
   // when the component is sited, and to remove it when the site is
   // set to 0.
public:
   __property System::ComponentModel::ISite* get_Site() {
      return Component::get_Site();
   }
   __property void set_Site(System::ComponentModel::ISite* value) {
      if (value != 0) {
         Component::set_Site( value );
         IPropertyValueUIService* uiService = dynamic_cast<IPropertyValueUIService*>(this->GetService(__typeof(IPropertyValueUIService)));
         if (uiService != 0)
            uiService->AddPropertyValueUIHandler(new PropertyValueUIHandler(this, &PropertyUIComponent::marginPropertyValueUIHandler));
      } else {
         IPropertyValueUIService* uiService = dynamic_cast<IPropertyValueUIService*>(this->GetService(__typeof(IPropertyValueUIService)));
         if (uiService != 0)
            uiService->RemovePropertyValueUIHandler(new PropertyValueUIHandler(this, &PropertyUIComponent::marginPropertyValueUIHandler));
         Component::Site = value;
      }
   }


   // This method can be used to retrieve an Image from a block
   // of Base64-encoded text.
private:
   Image* DeserializeFromBase64Text(String* text) {
      Image* img = 0;
      Byte memBytes[] = Convert::FromBase64String(text);
      IFormatter* formatter = new BinaryFormatter();
      MemoryStream* stream = new MemoryStream(memBytes);
      img = dynamic_cast<Image*>(formatter->Deserialize(stream));
      stream->Close();
      return img;
   }
};
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Drawing.Design

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

アセンブリ: System.Drawing (System.Drawing.dll 内)

参照

IPropertyValueUIService メンバ | System.Drawing.Design 名前空間 | PropertyValueUIHandler | PropertyValueUIItem