我想将自定义编辑器分配给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();
有人有解决方案吗?
向前谢谢!
此致 彼得
答案 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属性附加到属性上,它就会启用一个模态编辑器。