C# 中怎么设置WinForm控件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
如果你为属性设定了默认值,那么当开发者修改了属性的值,这个值在Property Explorer中将会以粗体显示。VS为属性提供一个上下文菜单,允许程序员使用C# WinForm控件开发把值重置为默认值。
当Visual Studio进行控件的串行化时,他会判断那些值不是默认值,只有不是设置默认值的属性才会被串行化,所以为属性提供设置默认值时可以大大减少串行化的属性数目,提高效率。
那么Visual Studio进怎么知道我们的属性值不是默认值了呢?我们需要一种机制来通知Visual Studio进默认值。实现这种机制有两种方法:
对于简单类型的属性,比如Int32,Boolean等等这些Primitive类型,你可以在属性的声明前设置一个DefaultValueAttribute,在Attribute的构造函数里传入设置默认值。
对于复杂的类型,比如Font,Color,你不能够直接将这些类型的值传递给Attibute的构造函数。相反你应该提供Reset
VS能够根据方法的名称来识别这种方法,比如Reset
using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.ComponentModel; using System.Drawing; namespace CustomControlSample { public class FirstControl : Control { private String _displayText=”Hello World!”; private Color _textColor=Color.Red; public FirstControl() { } // ContentAlignment is an enumeration defined in the System.Drawing // namespace that specifies the alignment of content on a drawing // surface. private ContentAlignment alignmentValue = ContentAlignment.MiddleLeft; [ Category("Alignment"), Description("Specifies the alignment of text.") ] public ContentAlignment TextAlignment { get { return alignmentValue; } set { alignmentValue = value; // The Invalidate method invokes the OnPaint method described // in step 3. Invalidate(); } } [Browsable(true)] [DefaultValue(“Hello World”)] public String DisplayText { get { return _displayText; } set { _displayText =value; Invalidate(); } } [Browsable(true)] public Color TextColor { get { return _textColor; } set { _textColor=value; Invalidate(); } } public void ResetTextColor() { TextColor=Color.Red; } public bool ShouldSerializeTextColor() { return TextColor!=Color.Red; } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); StringFormat style = new StringFormat(); style.Alignment = StringAlignment.Near; switch (alignmentValue) { case ContentAlignment.MiddleLeft: style.Alignment = StringAlignment.Near; break; case ContentAlignment.MiddleRight: style.Alignment = StringAlignment.Far; break; case ContentAlignment.MiddleCenter: style.Alignment = StringAlignment.Center; break; } // Call the DrawString method of the System.Drawing class to write // text. Text and ClientRectangle are properties inherited from // Control. e.Graphics.DrawString( DisplayText, Font, new SolidBrush(TextColor), ClientRectangle, style); } } }
在上面C# WinForm控件开发的代码中,我增加了两个属性,一个是DisplayText,这是一个简单属性,我们只需要在它的声明前添加一个DefaultValue Attribute就可以了。
另外一个是TextColor属性,这个复杂类型的属性,所以我们提供了ResetTextColor和ShouldSerializeTextColor来实现默认值。
C# WinForm控件开发设置默认值的实现就讲完了,但是有一点不要忽视了,你已经设置默认值,就应该相应的初始化这些属性,比如我们例子中的代码:
private String _displayText=”Hello World!”; private Color _textColor=Color.Red;
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。