在一个C# (.Net 2.0)项目中,我使用了一个属性网格(propertygrid)。这个属性网格显示从PHP后端通过SOAP检索到的对象。一些对象包含字符串属性,其中空字符串的含义与NULL的字符串不同。一个由SOAP调用返回的对象的例子可能是:
只要我不在PropertyGrid中“触摸”PropertyC,PropertyC的值将保持为null。当我将“foobar”输入值并清除PropertyC的属性网格中的文本时,该值将等于空字符串。这对我来说都很好; 用户应该能够“输入”空字符串。但我也希望用户能够指定一个“null”值。
我设想的方法是,用户可以右键单击属性值,然后弹出上下文菜单,其中包含“清除值”选项,该选项将设置值为空。
重要提示:我不想使用“神奇值”(如“Null”或“Magix123”)来指定需要为null的值。当然,后端可以解释这些值并存储实际的null,但这种“解决方案”除了变得非常混乱之外,还不受欢迎,因为它需要更改处理“神奇值”的所有代码。
理想情况下,属性网格还将显示为灰色的null值,以便用户可以看到空字符串和Null值之间的区别。
有没有人对如何处理这种情况有什么想法? (.Net 2.0!)属性网格是否允许我执行此类操作?如果是这样,我该如何处理?我需要创建一个派生自PropertyGrid的自定义用户控件吗?还是属性网格有我错过的某些功能?
SomeObject {
PropertyA = "Foo"
PropertyB = "Bar"
PropertyC = Null
}
只要我不在PropertyGrid中“触摸”PropertyC,PropertyC的值将保持为null。当我将“foobar”输入值并清除PropertyC的属性网格中的文本时,该值将等于空字符串。这对我来说都很好; 用户应该能够“输入”空字符串。但我也希望用户能够指定一个“null”值。
我设想的方法是,用户可以右键单击属性值,然后弹出上下文菜单,其中包含“清除值”选项,该选项将设置值为空。
重要提示:我不想使用“神奇值”(如“Null”或“Magix123”)来指定需要为null的值。当然,后端可以解释这些值并存储实际的null,但这种“解决方案”除了变得非常混乱之外,还不受欢迎,因为它需要更改处理“神奇值”的所有代码。
理想情况下,属性网格还将显示为灰色的null值,以便用户可以看到空字符串和Null值之间的区别。
有没有人对如何处理这种情况有什么想法? (.Net 2.0!)属性网格是否允许我执行此类操作?如果是这样,我该如何处理?我需要创建一个派生自PropertyGrid的自定义用户控件吗?还是属性网格有我错过的某些功能?
PropertyGrid
不兼容。它只与 WinForms 设计器的属性网格开箱即用,因为他们以这种方式扩展了它。但是,将此功能添加到自定义属性网格非常容易。 - Daniel Brückner