文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C# 中怎么设置WinForm控件

2023-06-17 22:05

关注

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方法检查属性是否是设置默认值。过去我们把它称之为魔术命名法,应该说是一种不好的编程习惯,可是现在微软依然使用这种机制。我还是以前面几篇文章使用的例子代码。

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;

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯