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

标签 c# boolean propertygrid

我想将自定义编辑器分配给 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/

相关文章:

c# - PropertyGrid 属性列表

c# - core 2.0 和 office interop - microsoft.office.core 包在哪里?

c# - Stream Reader(从 .txt 文件中提取数据以显示在 listBox 中)

c# - 如何使用 string.Contains 作为值列表

c# - 我无法理解这种编程风格

c# - PropertyGrid 控件的默认内置编辑器

c# - 从 C# 中的单词中删除前缀和后缀

debugging - 将一对 int 列表转换为 OCaml 中的 boolean 矩阵

javascript - 为什么假的不会变成真的?

c# - PropertyGrid 显示也是类的类成员