我想将自定义编辑器分配给 PropertyGrid
中的 boolean
属性。我正在使用标准 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();
到目前为止一切顺利,出现了一个自定义编辑器(网格中带有一个按钮)。但是,当我通过将默认值设置为 false
(见下文)将类型更改为 boolean
时,打开自定义编辑器的按钮不会出现。相反,会出现一个带有 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();
有人有解决办法吗?
谢谢转发!
问候, 彼得
最佳答案
Microsoft PropertyGrid 检查此标志以确定它是否显示下拉箭头(标志 == true)或模式按钮(标志 == false):
bool flag = gridEntryFromRow.NeedsDropDownButton | gridEntryFromRow.Enumerable;
如果 UITypeEditor 样式为 DropDown,则第一部分为 true;如果附加的 TypeConverter 的 GetStandardValuesSupported 返回 true,则第二部分为 true。
您可以在 Reflector 的 PropertyGridView.SelectRow 中检查所有这些。
如果您能够将自定义 TypeConverter 附加到您的 boolean 值(我将从 BooleanConverter 派生它),其 GetStandardValuesSupported 方法被重写以返回 false,那么您将获得模态按钮。当然,您会失去标准值(例如,双击不会循环值),这是一种权衡。我很久以前就发现了这个问题,这就是为什么在我自己的 PropertyGrid 中我没有那么严格,即使定义了标准值,只要我将 ForceEditor 属性附加到属性,也会启用模式编辑器。
关于c# - PropertyGrid 中 boolean 属性的自定义编辑器 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3966670/