Compartilhar via


IPropertyValueUIService Interface

Definição

Fornece uma interface para gerenciar as imagens, as dicas de ferramenta e os manipuladores de eventos para as propriedades de um componente exibido em um navegador de propriedade.

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

Exemplos

O exemplo de código a seguir cria um componente que obtém uma instância da IPropertyValueUIService interface e adiciona um PropertyValueUIHandler ao serviço. O manipulador fornece um PropertyValueUIItem objeto para qualquer propriedade do componente chamado HorizontalMargin ou VerticalMargin. O PropertyValueUIItem para essas propriedades fornece uma imagem, uma Dica de Ferramenta e um manipulador de eventos que exibe uma caixa de mensagem quando a imagem da propriedade é clicada. A imagem e a Dica de Ferramenta são exibidas em um PropertyGrid quando a grade está mostrando essas propriedades do 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;
                }
            }
        }
    }
}

Comentários

Um componente pode usar a IPropertyValueUIService interface para fornecer PropertyValueUIItem objetos para qualquer propriedade do componente. Um PropertyValueUIItem associado a uma propriedade pode fornecer uma imagem, uma Dica de Ferramenta e um manipulador de eventos para o evento gerado quando a imagem associada à propriedade é clicada.

A IPropertyValueUIService interface fornece métodos para adicionar, remover e recuperar PropertyValueUIHandler delegados de ou para uma lista interna. Quando as propriedades de um componente são exibidas em um navegador de propriedades, cada PropertyValueUIHandler um na lista tem a oportunidade de fornecer um PropertyValueUIItem para cada propriedade do componente.

Quando um navegador de propriedades é definido para exibir as propriedades de um objeto , ele chama o GetPropertyUIValueItems método dessa interface para cada propriedade do componente, passando um PropertyDescriptor que representa a propriedade . O GetPropertyUIValueItems método chama cada PropertyValueUIHandler um que foi adicionado ao serviço. Cada PropertyValueUIHandler um pode adicionar um PropertyValueUIItem ao ArrayList parâmetro passado no valueUIItemList parâmetro para fornecer itens de interface do usuário para a propriedade representada pelo PropertyDescriptor passado no propDesc parâmetro .

Um PropertyValueUIItem pode conter uma imagem a ser exibida ao lado do nome da propriedade, uma cadeia de caracteres ToolTip e um manipulador de eventos a ser invocado quando uma imagem associada à propriedade é clicada duas vezes.

Métodos

AddPropertyValueUIHandler(PropertyValueUIHandler)

Adiciona o PropertyValueUIHandler especificado a este serviço.

GetPropertyUIValueItems(ITypeDescriptorContext, PropertyDescriptor)

Obtém o objetos PropertyValueUIItem que correspondem as características de descritor de propriedade e de contexto especificadas.

NotifyPropertyValueUIItemsChanged()

Notifica a implementação IPropertyValueUIService que a lista global de objetos PropertyValueUIItem foi modificada.

RemovePropertyValueUIHandler(PropertyValueUIHandler)

Remove o PropertyValueUIHandler especificado do serviço de interface do usuário do valor da propriedade.

Eventos

PropertyUIValueItemsChanged

Ocorre quando a lista de objetos PropertyValueUIItem é modificada.

Aplica-se a

Confira também