IPropertyValueUIService 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供一个接口,用于为属性浏览器中显示的组件的属性管理图像、工具提示和事件处理程序。
public interface class IPropertyValueUIService
public interface IPropertyValueUIService
type IPropertyValueUIService = interface
Public Interface IPropertyValueUIService
示例
下面的代码示例创建一个组件,该组件获取 接口的 IPropertyValueUIService 实例,并将 添加到 PropertyValueUIHandler 服务。 处理程序为名为 HorizontalMargin
或 VerticalMargin
的组件的任何属性提供 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 对象的列表时发生。 |