PropertyGrid中的布尔属性的自定义编辑器(C#)

时间:2010-10-19 08:52:18

标签: c# boolean propertygrid

我想将自定义编辑器分配给boolean中的PropertyGrid属性。我正在使用标准的propertygrid(来自命名空间System.Windows.Forms)。可以使用UITypeEditor类为属性分配自定义编辑器。但是,据我所知,无法将其用于boolean属性。

我试图通过覆盖属性网格来解决它,以便我可以手动添加项目。我可以通过以下代码添加一个具有自定义编辑器的string属性:

Properties.Item.Add("My Custom Editor", "", false, "Properties with custom UITypeEditor", "The component accept custom UITypeEditor.", true);
Properties.Item[Properties.Item.Count - 1].CustomEditor = new MyEditor();

到目前为止,一个自定义编辑器出现(网格中有一个按钮)。但是,当我通过在boolean上设置默认值(见下文)将类型更改为false时,不会显示用于打开自定义编辑器的按钮。相反,会出现一个包含true / false的下拉菜单。

Properties.Item.Add("My Custom Editor", false, false, "Properties with custom UITypeEditor", "The component accept custom UITypeEditor.", true);
Properties.Item[Properties.Item.Count - 1].CustomEditor = new MyEditor();

有人有解决方案吗?

向前谢谢!

此致 彼得

1 个答案:

答案 0 :(得分:4)

Microsoft PropertyGrid检查此标志以确定它是否显示下拉箭头(flag == true)或模式按钮(flag == false):

bool flag = gridEntryFromRow.NeedsDropDownButton | gridEntryFromRow.Enumerable;

如果UITypeEditor样式是DropDown,则第一部分为true,如果附加的TypeConverter的GetStandardValuesSupported返回true,则第二部分为true。

您可以在Reflector中的PropertyGridView.SelectRow中检查所有这些。

如果您能够将自定义TypeConverter附加到您的布尔值(我将从BooleanConverter派生),其GetStandardValuesSupported方法被覆盖以返回false,那么您将获得模态按钮。当然你放松了标准值(例如双击不会循环值),这是一个权衡。我很久以前就已经发现了这个问题,这就是为什么在我自己的PropertyGrid中我不是那么严格,即使我定义了标准值,只要我将一个ForceEditor属性附加到属性上,它就会启用一个模态编辑器。