IPropertyValueUIService Interfaccia

Definizione

Fornisce un'interfaccia per la gestione di immagini, descrizioni comandi e gestori eventi per le proprietà di un componente in un visualizzatore 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 qualsiasi proprietà del componente denominato HorizontalMargin o VerticalMargin. Per PropertyValueUIItem queste proprietà è disponibile 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ò usare 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 browser delle proprietà, a ogni PropertyValueUIHandler interno dell'elenco viene offerta l'opportunità di fornire un PropertyValueUIItem oggetto per ogni proprietà del componente.

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

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

Metodi

AddPropertyValueUIHandler(PropertyValueUIHandler)

Aggiunge a questo servizio l'oggetto PropertyValueUIHandler specificato.

GetPropertyUIValueItems(ITypeDescriptorContext, PropertyDescriptor)

Ottiene gli oggetti PropertyValueUIItem che corrispondono al contesto specificato e alle caratteristiche del descrittore delle proprietà.

NotifyPropertyValueUIItemsChanged()

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

RemovePropertyValueUIHandler(PropertyValueUIHandler)

Rimuove l'oggetto PropertyValueUIHandler specificato dal servizio UI del valore della proprietà.

Eventi

PropertyUIValueItemsChanged

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

Si applica a

Vedi anche