【问题标题】:C# Propertygrid property nullableC# Propertygrid 属性可为空
【发布时间】:2010-06-22 12:10:18
【问题描述】:

在 C# (.Net 2.0) 的一个项目中,我使用了 propertygrid。此属性网格显示通过 SOAP 从 PHP 后端检索到的对象。某些对象包含字符串属性,其中空字符串的含义与 NULL 字符串的含义不同。 SOAP 调用返回的对象示例可能是:

SomeObject {
  PropertyA = "Foo"
  PropertyB = "Bar"
  PropertyC = Null
}

只要我不在 PropertyGrid 中“触摸”PropertyC,PropertyC 的值就会保持为空。当我输入“foobar”作为值,然后清除 PropertyC 的属性网格中的文本时,该值将等于一个空字符串。这对我来说很好;用户应该能够“输入”一个空字符串。但我也希望用户能够指定一个“null”值。

我设想的方式是,用户可以右键单击属性的值,然后会弹出一个带有“清除值”选项的上下文菜单,该选项会将值设置为 Null。

重要提示:我确实不想使用像 string“Null”或“Magix123”这样的“神奇值”来指定值必须为空。当然,后端可以解释这些值并存储一个实际的空值,但是这个“解决方案”除了很脏之外,是不需要的,因为它需要在处理“魔术值”的地方更改大量代码。

理想情况下,PropertyGrid 还将空值显示为 ("grayed") "",以便用户可以看到空字符串和 Null 值之间的区别。

有人知道如何处理这种情况吗? (.Net 2.0!)PropertyGrid 允许我做这种事情吗?那我该怎么办呢?我需要创建自己的从 PropertyGrid 派生的用户控件,还是 PropertyGrid 有一些我错过的功能?

【问题讨论】:

    标签: c# user-interface propertygrid


    【解决方案1】:

    将默认值null 的DefaultValueAttribute 添加到属性应启用上下文菜单中的命令Reset。 对于进一步的自定义,您可能需要添加 EditorAttribute 并编写自定义 UITypeEditor。

    【讨论】:

    • 你在开玩笑吧。这么简单? Jeeeeeez ...大声笑我会去看看,让你知道。谢谢!
    • 至少理论上应该是那么容易。许多控件中集成了许多功能和魔法。
    • 嗯,我已将 [DefaultValue(null)] 添加到 Reference.cs 文件的属性中,但“重置”命令不可用。也许我在这里做错了什么。我正在努力...任何帮助/提示表示赞赏。还;我将不得不弄清楚如何在 References.cs 之外的其他地方应用这些更改,因为在更新网络参考时,这个文件总是会被覆盖(重新生成)。我想部分课程是要走的路吗?
    • 嗯,可以看看 [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)]
    • 你是对的 - 它不适用于标准 PropertyGrid。它仅适用于开箱即用的 WinForms 设计器的属性网格,因为他们以这种方式对其进行了扩展。但是很容易将此功能添加到自定义属性网格中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多