IPropertyValueUIService 接口

定义

提供一个接口,用于为属性浏览器中显示的组件的属性管理图像、工具提示和事件处理程序。

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

示例

下面的代码示例创建一个组件,该组件获取 接口的 IPropertyValueUIService 实例,并将 添加到 PropertyValueUIHandler 服务。 处理程序为名为 HorizontalMarginVerticalMargin的组件的任何属性提供 PropertyValueUIItem 对象。 PropertyValueUIItem这些属性的 提供图像、工具提示和事件处理程序,在单击属性的图像时显示消息框。 当网格显示组件的这些属性时,图像和工具提示将显示在 中 PropertyGrid

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

注解

组件可以使用 IPropertyValueUIService 接口为组件的任何属性提供 PropertyValueUIItem 对象。 PropertyValueUIItem与 属性关联的 可以为单击与 属性关联的图像时引发的事件提供图像、工具提示和事件处理程序。

接口 IPropertyValueUIService 提供用于向内部列表添加、删除和检索委托或从内部列表检索 PropertyValueUIHandler 委托的方法。 当组件的属性显示在属性浏览器中时,列表中的每个 PropertyValueUIHandler 属性都有机会为组件的每个属性提供 PropertyValueUIItem

当属性浏览器设置为显示对象的属性时,它会为组件的每个属性调用 GetPropertyUIValueItems 此接口的 方法,并传递表示 PropertyDescriptor 属性的 。 方法 GetPropertyUIValueItems 调用已添加到服务的每个 PropertyValueUIHandler 。 每个PropertyValueUIHandler都可以向 ArrayList 参数中valueUIItemList传递的参数添加 ,PropertyValueUIItem以便为 参数中propDesc传递的 表示的属性PropertyDescriptor提供 UI 项。

可以 PropertyValueUIItem 包含要显示在属性名称旁边的图像、工具提示字符串,以及双击与属性关联的图像时要调用的事件处理程序。

方法

AddPropertyValueUIHandler(PropertyValueUIHandler)

将指定的 PropertyValueUIHandler 添加到此服务。

GetPropertyUIValueItems(ITypeDescriptorContext, PropertyDescriptor)

获取与指定的上下文和属性描述符特征匹配的 PropertyValueUIItem 对象。

NotifyPropertyValueUIItemsChanged()

通知 IPropertyValueUIService 实现:PropertyValueUIItem 对象的全局列表已修改。

RemovePropertyValueUIHandler(PropertyValueUIHandler)

从属性值 UI 服务中移除指定的 PropertyValueUIHandler

事件

PropertyUIValueItemsChanged

当修改 PropertyValueUIItem 对象的列表时发生。

适用于

另请参阅