IPropertyValueUIService Interfaccia

Definizione

Fornisce un'interfaccia per gestire le immagini, le descrizioni comandi e i gestori eventi per le proprietà di un componente visualizzato in un visualizzatore delle proprietà.

public interface class IPropertyValueUIService
public interface IPropertyValueUIService
type IPropertyValueUIService = interface
Public Interface IPropertyValueUIService

Esempio

Nell'esempio di codice seguente viene creato un componente che ottiene un'istanza dell'interfaccia IPropertyValueUIService e aggiunge un oggetto PropertyValueUIHandler al servizio. Il gestore fornisce un PropertyValueUIItem oggetto per tutte le proprietà del componente denominato HorizontalMargin o VerticalMargin. per PropertyValueUIItem queste proprietà fornisce un'immagine, una descrizione comando e un gestore eventi che visualizza una finestra di messaggio quando si fa clic sull'immagine per la proprietà. L'immagine e la descrizione comando vengono visualizzate in un PropertyGrid oggetto quando la griglia mostra queste proprietà del componente.

using System.Collections;
using System.Drawing;
using System.Drawing.Design;
using System.Windows.Forms;

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; set; }

        // Example property for which to provide a PropertyValueUIItem.
        public int VerticalMargin { get; set; }

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

        // Constructor.
        public PropertyUIComponent(System.ComponentModel.IContainer container)
        {
            if (container != null)
                container.Add(this);
            HorizontalMargin = 0;
            VerticalMargin = 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 = Image.FromFile("SampImag.jpg");
                itemList.Add(new PropertyValueUIItem(img, new PropertyValueUIItemInvokeHandler(this.marginInvoke), "Test ToolTip"));
            }
            if (propDesc.DisplayName.Equals("VerticalMargin"))
            {
                Image img = Image.FromFile("SampImag.jpg");
                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;
                }
            }
        }
    }
}

Commenti

Un componente può utilizzare l'interfaccia IPropertyValueUIService per fornire PropertyValueUIItem oggetti per qualsiasi proprietà del componente. Un PropertyValueUIItem oggetto associato a una proprietà può fornire un'immagine, una descrizione comando e un gestore eventi per l'evento generato quando si fa clic sull'immagine associata alla proprietà .

L'interfaccia IPropertyValueUIService fornisce metodi per aggiungere, rimuovere e recuperare PropertyValueUIHandler delegati da o verso un elenco interno. Quando le proprietà di un componente vengono visualizzate in un visualizzatore di proprietà, a ogni PropertyValueUIHandler nell'elenco viene data l'opportunità di fornire un oggetto PropertyValueUIItem per ogni proprietà del componente.

Quando un visualizzatore di proprietà è impostato per visualizzare le proprietà di un oggetto, chiama il GetPropertyUIValueItems metodo di questa interfaccia per ogni proprietà del componente, passando un oggetto PropertyDescriptor che rappresenta la proprietà . Il GetPropertyUIValueItems metodo chiama ogni PropertyValueUIHandler classe aggiunta al servizio. Ognuno PropertyValueUIHandler può aggiungere un PropertyValueUIItem al ArrayList parametro passato nel valueUIItemList parametro per fornire elementi dell'interfaccia utente per la proprietà rappresentata dal PropertyDescriptor parametro passato propDesc .

Un PropertyValueUIItem oggetto può contenere un'immagine da visualizzare accanto al nome della proprietà, una stringa tooltip e un gestore eventi da richiamare quando viene fatto doppio clic su un'immagine associata alla proprietà.

Metodi

Nome Descrizione
AddPropertyValueUIHandler(PropertyValueUIHandler)

Aggiunge l'oggetto specificato PropertyValueUIHandler a questo servizio.

GetPropertyUIValueItems(ITypeDescriptorContext, PropertyDescriptor)

Ottiene gli PropertyValueUIItem oggetti che corrispondono alle caratteristiche del contesto e del descrittore di proprietà specificati.

NotifyPropertyValueUIItemsChanged()

Notifica all'implementazione che l'elenco IPropertyValueUIService globale di PropertyValueUIItem oggetti è stato modificato.

RemovePropertyValueUIHandler(PropertyValueUIHandler)

Rimuove l'oggetto specificato PropertyValueUIHandler dal servizio dell'interfaccia utente del valore della proprietà.

Eventi

Nome Descrizione
PropertyUIValueItemsChanged

Si verifica quando viene modificato l'elenco di PropertyValueUIItem oggetti.

Si applica a

Vedi anche