3

我有一个 Windows.Forms 组件,它有一个返回 Size 结构的“mySize”属性。我的意图是让这个属性根据组件的大小自动计算返回的 mySize,除非 mySize 已明确设置,在这种情况下,返回 mySize 的设置值。不幸的是,现在我将组件嵌入到窗体中,Windows 窗体设计器决定开始显式生成并设置 mySize 属性的值,这让我很头疼。

所以我需要设置一个 DefaultValue,这样设计师就会走开,让我一个人呆着。

我已经阅读了处理 System.ComponentModel.DefaultValue 的答案,所以我知道我必须在构造函数中手动设置属性的值,但我发现的答案和文档只处理设置 False 的 DefaultValue,一个持续的。

Size 结构不是常量,因此 VB 编译器吓坏了,告诉我我不能将 Size 设置为 Size 类型的属性的 DefaultValue,因为 Sizes 不是常量。

这让我的大脑很受伤。

我可能可以通过使用 getMySize 和 setMySize 方法而不是使用属性来解决这个问题,但我想知道实际上是否有任何方法可以为 Size 设置默认属性。

注意:我没有将 mySize 用作覆盖 Size 属性的某种疯狂尝试(其 DefaultValue 为 150x150,因此 SOMETHING 似乎能够为 Sizes 设置 DefaultValues);mySize 只是 Class 所需的一些 Size 值。

4

2 回答 2

6

不要应用 DefaultValue 属性,而是编写以下两个方法:

bool ShouldSerializemySize() { ... }
void ResetmySize() { ... }

在 ShouldSerializemySize 中,如果值应序列化为代码,则返回 true。在 ResetmySize 中,将属性重置为其默认值。

组件设计者将通过反射自动选择这些方法。

更多信息在这里:http: //msdn.microsoft.com/en-us/library/53b8022e (VS.71).aspx

于 2009-05-01T09:11:40.863 回答
1

我注意到,在DefaultValue 的 MSDN 页面的 Community Content 部分中,实际上给出了一个设置 Size 类型的 defaultValue 的具体示例,它建议使用此页面上描述的 DefaultValue 构造函数。

不幸的是,虽然给出的示例是正确的,但它确实有效,但在我看来,MSDN 文档不会自然而然地引导任何人找到这个答案。

我将设置 albahari 的答案作为这个问题的答案(因为他的回答至少有某种意义),为了完整起见,把这个例子留在这里。

于 2009-05-01T09:26:50.593 回答