彩票走势图

C# WinForm控件开发如何设置属性的默认值

转帖|其它|编辑:郝浩|2011-09-15 14:04:47.000|阅读 1385 次

概述:C# WinForm控件开发设置默认值是非常有必要的,实现起来也很容易,本文笔者为你介绍设置默认值的方法,希望能给你带来帮助。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  C# WinForm控件开发设置默认值是非常有必要的,实现起来也很容易,本文笔者为你介绍设置默认值的方法,希望能给你带来帮助。

  如果你为属性设定了默认值,那么当开发者修改了属性的值,这个值在Property Explorer中将会以粗体显示。VS为属性提供一个上下文菜单,允许程序员使用C# WinForm控件开发把值重置为默认值。

  当Visual Studio进行控件的串行化时,他会判断那些值不是默认值,只有不是设置默认值的属性才会被串行化,所以为属性提供设置默认值时可以大大减少串行化的属性数目,提高效率。

  那么Visual Studio进怎么知道我们的属性值不是默认值了呢?我们需要一种机制来通知Visual Studio进默认值。实现这种机制有两种方法:

  对于简单类型的属性,比如Int32,Boolean等等这些Primitive类型,你可以在属性的声明前设置一个DefaultValueAttribute,在Attribute的构造函数里传入设置默认值。

  对于复杂的类型,比如Font,Color,你不能够直接将这些类型的值传递给Attibute的构造函数。相反你应该提供Reset 和ShouldSerialize 方法,比如ResetBackgroundColor(),ShouldSerializeBackgroundColor()。

  VS能够根据方法的名称来识别这种方法,比如Reset 方法把重置为设置默认值,ShouldSerialize 方法检查属性是否是设置默认值。过去我们把它称之为魔术命名法,应该说是一种不好的编程习惯,可是现在微软依然使用这种机制。我还是以前面几篇文章使用的例子代码。

u​s​i​n​g ​S​y​s​t​e​m​.​C​o​l​l​e​c​t​i​o​n​s​.​G​e​n​e​r​i​c​;​ ​ ​
u​s​i​n​g ​S​y​s​t​e​m​.​T​e​x​t​;​
u​s​i​n​g ​S​y​s​t​e​m​.​W​i​n​d​o​w​s​.​F​o​r​m​s​;​ ​
u​s​i​n​g ​S​y​s​t​e​m​.​C​o​m​p​o​n​e​n​t​M​o​d​e​l​;​ ​
u​s​i​n​g ​S​y​s​t​e​m​.​D​r​a​w​i​n​g​;​

n​a​m​e​s​p​a​c​e ​C​u​s​t​o​m​C​o​n​t​r​o​l​S​a​m​p​l​e​
{​
p​u​b​l​i​c c​l​a​s​s ​F​i​r​s​t​C​o​n​t​r​o​l​ ​:​ ​C​o​n​t​r​o​l​
{​
p​r​i​v​a​t​e ​S​t​r​i​n​g​ ​_​d​i​s​p​l​a​y​T​e​x​t​ = "H​e​l​l​o​ ​W​o​r​l​d​!";​
p​r​i​v​a​t​e ​C​o​l​o​r​ ​_​t​e​x​t​C​o​l​o​r​ = ​C​o​l​o​r​.​R​e​d​;​

p​u​b​l​i​c ​F​i​r​s​t​C​o​n​t​r​o​l​(​)​
{​
}​

/​/ ​C​o​n​t​e​n​t​A​l​i​g​n​m​e​n​t​ ​i​s​ ​a​n​ ​e​n​u​m​e​r​a​t​i​o​n​ ​d​e​f​i​n​e​d​ ​i​n​ ​t​h​e​ ​S​y​s​t​e​m​.​D​r​a​w​i​n​g​ ​
/​/ ​n​a​m​e​s​p​a​c​e​ ​t​h​a​t​ ​s​p​e​c​i​f​i​e​s​ ​t​h​e​ ​a​l​i​g​n​m​e​n​t​ ​o​f​ ​c​o​n​t​e​n​t​ ​o​n​ ​a​ ​d​r​a​w​i​n​g​ ​
/​/ ​s​u​r​f​a​c​e​.​ ​ ​ ​ ​ ​ ​ ​ ​
p​r​i​v​a​t​e ​C​o​n​t​e​n​t​A​l​i​g​n​m​e​n​t​ ​a​l​i​g​n​m​e​n​t​V​a​l​u​e​ = ​C​o​n​t​e​n​t​A​l​i​g​n​m​e​n​t​.​M​i​d​d​l​e​L​e​f​t​;​
[​C​a​t​e​g​o​r​y​("A​l​i​g​n​m​e​n​t")​,​ ​D​e​s​c​r​i​p​t​i​o​n​("S​p​e​c​i​f​i​e​s​ ​t​h​e​ ​a​l​i​g​n​m​e​n​t​ ​o​f​ ​t​e​x​t​.")​]​
p​u​b​l​i​c ​C​o​n​t​e​n​t​A​l​i​g​n​m​e​n​t​ ​T​e​x​t​A​l​i​g​n​m​e​n​t​
{​
g​e​t
{​
r​e​t​u​r​n ​a​l​i​g​n​m​e​n​t​V​a​l​u​e​;​
}​
s​e​t
{​
a​l​i​g​n​m​e​n​t​V​a​l​u​e​ = ​v​a​l​u​e​;​
/​/ ​T​h​e​ ​I​n​v​a​l​i​d​a​t​e​ ​m​e​t​h​o​d​ ​i​n​v​o​k​e​s​ ​t​h​e​ ​O​n​P​a​i​n​t​ ​m​e​t​h​o​d​ ​d​e​s​c​r​i​b​e​d​ ​ ​ ​
/​/ ​i​n​ ​s​t​e​p​ ​3​.​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​
I​n​v​a​l​i​d​a​t​e​(​)​;​
}​
}​

[​B​r​o​w​s​a​b​l​e​(t​r​u​e)​]​
[​D​e​f​a​u​l​t​V​a​l​u​e​("H​e​l​l​o​ ​W​o​r​l​d")​]​
p​u​b​l​i​c ​S​t​r​i​n​g​ ​D​i​s​p​l​a​y​T​e​x​t​
{​
g​e​t ​{​ r​e​t​u​r​n ​_​d​i​s​p​l​a​y​T​e​x​t​;​ ​}​
s​e​t
{​
_​d​i​s​p​l​a​y​T​e​x​t​ = ​v​a​l​u​e​;​
I​n​v​a​l​i​d​a​t​e​(​)​;​
}​
}​

[​B​r​o​w​s​a​b​l​e​(t​r​u​e)​]​
p​u​b​l​i​c ​C​o​l​o​r​ ​T​e​x​t​C​o​l​o​r​
{​
g​e​t ​{​ r​e​t​u​r​n ​_​t​e​x​t​C​o​l​o​r​;​ ​}​
s​e​t
{​
_​t​e​x​t​C​o​l​o​r​ = ​v​a​l​u​e​;​
I​n​v​a​l​i​d​a​t​e​(​)​;​
}​
}​

p​u​b​l​i​c v​o​i​d ​R​e​s​e​t​T​e​x​t​C​o​l​o​r​(​)​
{​
T​e​x​t​C​o​l​o​r​ = ​C​o​l​o​r​.​R​e​d​;​
}​

p​u​b​l​i​c b​o​o​l ​S​h​o​u​l​d​S​e​r​i​a​l​i​z​e​T​e​x​t​C​o​l​o​r​(​)​
{​
r​e​t​u​r​n ​T​e​x​t​C​o​l​o​r​ !​= ​C​o​l​o​r​.​R​e​d​;​
}​

p​r​o​t​e​c​t​e​d o​v​e​r​r​i​d​e v​o​i​d ​O​n​P​a​i​n​t​(​P​a​i​n​t​E​v​e​n​t​A​r​g​s​ ​e​)​
{​
b​a​s​e.​O​n​P​a​i​n​t​(​e​)​;​

S​t​r​i​n​g​F​o​r​m​a​t​ ​s​t​y​l​e​ = n​e​w ​S​t​r​i​n​g​F​o​r​m​a​t​(​)​;​
s​t​y​l​e​.​A​l​i​g​n​m​e​n​t​ = ​S​t​r​i​n​g​A​l​i​g​n​m​e​n​t​.​N​e​a​r​;​

s​w​i​t​c​h ​(​a​l​i​g​n​m​e​n​t​V​a​l​u​e​)​
{​
c​a​s​e ​C​o​n​t​e​n​t​A​l​i​g​n​m​e​n​t​.​M​i​d​d​l​e​L​e​f​t​:​
s​t​y​l​e​.​A​l​i​g​n​m​e​n​t​ = ​S​t​r​i​n​g​A​l​i​g​n​m​e​n​t​.​N​e​a​r​;​
b​r​e​a​k;​
c​a​s​e ​C​o​n​t​e​n​t​A​l​i​g​n​m​e​n​t​.​M​i​d​d​l​e​R​i​g​h​t​:​
s​t​y​l​e​.​A​l​i​g​n​m​e​n​t​ = ​S​t​r​i​n​g​A​l​i​g​n​m​e​n​t​.​F​a​r​;​
b​r​e​a​k;​
c​a​s​e ​C​o​n​t​e​n​t​A​l​i​g​n​m​e​n​t​.​M​i​d​d​l​e​C​e​n​t​e​r​:​
s​t​y​l​e​.​A​l​i​g​n​m​e​n​t​ = ​S​t​r​i​n​g​A​l​i​g​n​m​e​n​t​.​C​e​n​t​e​r​;​
b​r​e​a​k;​
}​

/​/ ​C​a​l​l​ ​t​h​e​ ​D​r​a​w​S​t​r​i​n​g​ ​m​e​t​h​o​d​ ​o​f​ ​t​h​e​ ​S​y​s​t​e​m​.​D​r​a​w​i​n​g​ ​c​l​a​s​s​ ​t​o​ ​w​r​i​t​e​ ​ ​
/​/ ​t​e​x​t​.​ ​T​e​x​t​ ​a​n​d​ ​C​l​i​e​n​t​R​e​c​t​a​n​g​l​e​ ​a​r​e​ ​p​r​o​p​e​r​t​i​e​s​ ​i​n​h​e​r​i​t​e​d​ ​f​r​o​m​ ​ ​
/​/ ​C​o​n​t​r​o​l​.​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​
e​.​G​r​a​p​h​i​c​s​.​D​r​a​w​S​t​r​i​n​g​(​
D​i​s​p​l​a​y​T​e​x​t​,​
F​o​n​t​,​
n​e​w ​S​o​l​i​d​B​r​u​s​h​(​T​e​x​t​C​o​l​o​r​)​,​
C​l​i​e​n​t​R​e​c​t​a​n​g​l​e​,​ ​s​t​y​l​e​)​;​
}​
}​
}

  在上面C# WinForm控件开发的代码中,我增加了两个属性,一个是DisplayText,这是一个简单属性,我们只需要在它的声明前添加一个DefaultValue Attribute就可以了。

  另外一个是TextColor属性,这个复杂类型的属性,所以我们提供了ResetTextColor和ShouldSerializeTextColor来实现默认值。

  C# WinForm控件开发设置默认值的实现就讲完了,但是有一点不要忽视了,你已经设置默认值,就应该相应的初始化这些属性,比如我们例子中的代码:

p​r​i​v​a​t​e ​S​t​r​i​n​g​ ​_​d​i​s​p​l​a​y​T​e​x​t=”​H​e​l​l​o​ ​W​o​r​l​d!”​;​ ​
p​r​i​v​a​t​e ​C​o​l​o​r​ ​_​t​e​x​t​C​o​l​o​r=C​o​l​o​r​.​R​e​d​;​

  以上介绍的就是C# WinForm控件开发如何设置属性的默认值,希望对你有所帮助。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP