gpt4 book ai didi

c# - PropertyGrid 中 boolean 属性的自定义编辑器 (C#)

转载 作者:行者123 更新时间:2023-11-30 21:19:01 25 4
gpt4 key购买 nike

我想将自定义编辑器分配给 PropertyGrid 中的 boolean 属性。我使用的是标准属性网格(来自命名空间 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 检查此标志以确定它是否显示下拉箭头 (flag == true) 或模式按钮 (flag == false):

bool flag = gridEntryFromRow.NeedsDropDownButton | gridEntryFromRow.Enumerable;

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

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

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

关于c# - PropertyGrid 中 boolean 属性的自定义编辑器 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3966670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com