成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解C# WinForm控件開發如何設置默認值

開發 后端
我要講一下C# WinForm控件開發屬性的設置默認值。如果我們希望自己C# WinForm控件開發更易于被其它開發者使用,那么提供默認值是非常值得的。

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方法檢查屬性是否是設置默認值。過去我們把它稱之為魔術命名法,應該說是一種不好的編程習慣,可是現在微軟依然使用這種機制。我還是以前面幾篇文章使用的例子代碼。

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. using System.Windows.Forms;  
  5. using System.ComponentModel;  
  6. using System.Drawing;  
  7. namespace CustomControlSample  
  8. {  
  9.     public class FirstControl : Control  
  10.     {  
  11. private String _displayText=”Hello World!”;  
  12. private Color _textColor=Color.Red;  
  13.   public FirstControl()  
  14.         {  
  15.         }  
  16.         // ContentAlignment is an enumeration defined in the System.Drawing  
  17.         // namespace that specifies the alignment of content on a drawing   
  18.         // surface.  
  19.         private ContentAlignment alignmentValue = ContentAlignment.MiddleLeft;  
  20.         [  
  21.         Category("Alignment"),  
  22.         Description("Specifies the alignment of text.")  
  23.         ]  
  24.         public ContentAlignment TextAlignment  
  25.         {  
  26.             get 
  27.             {  
  28.                 return alignmentValue;  
  29.             }  
  30.             set 
  31.             {  
  32.                 alignmentValue = value;  
  33.                 // The Invalidate method invokes the OnPaint method described   
  34.                 // in step 3.  
  35.                 Invalidate();  
  36.             }  
  37.         }  
  38.  [Browsable(true)]  
  39.  [DefaultValue(“Hello World”)]  
  40.  public String DisplayText  
  41. {  
  42. get 
  43. {  
  44. return _displayText;  
  45. }  
  46. set 
  47. {  
  48.      _displayText =value;  
  49.     Invalidate();  
  50. }  
  51. }  
  52. [Browsable(true)]  
  53. public Color TextColor  
  54. {  
  55. get 
  56. {  
  57.     return _textColor;  
  58. }  
  59. set 
  60. {  
  61.     _textColor=value;  
  62. Invalidate();  
  63. }  
  64. }  
  65. public void ResetTextColor()  
  66. {  
  67.     TextColor=Color.Red;  
  68. }  
  69. public bool ShouldSerializeTextColor()  
  70. {  
  71. return TextColor!=Color.Red;  
  72. }  
  73. protected override void OnPaint(PaintEventArgs e)  
  74.         {  
  75.             base.OnPaint(e);  
  76.             StringFormat style = new StringFormat();  
  77.             style.Alignment = StringAlignment.Near;  
  78.             switch (alignmentValue)  
  79.             {  
  80.                 case ContentAlignment.MiddleLeft:  
  81.                     style.Alignment = StringAlignment.Near;  
  82.                     break;  
  83.                 case ContentAlignment.MiddleRight:  
  84.                     style.Alignment = StringAlignment.Far;  
  85.                     break;  
  86.                 case ContentAlignment.MiddleCenter:  
  87.                     style.Alignment = StringAlignment.Center;  
  88.                     break;  
  89.             }  
  90.             // Call the DrawString method of the System.Drawing class to write     
  91.             // text. Text and ClientRectangle are properties inherited from  
  92.             // Control.  
  93.             e.Graphics.DrawString(  
  94.                 DisplayText,  
  95.                 Font,  
  96.                 new SolidBrush(TextColor),  
  97.                 ClientRectangle, style);  
  98.         }  
  99.     }  

在上面C# WinForm控件開發的代碼中,我增加了兩個屬性,一個是DisplayText,這是一個簡單屬性,我們只需要在它的聲明前添加一個DefaultValue Attribute就可以了。

另外一個是TextColor屬性,這個復雜類型的屬性,所以我們提供了ResetTextColor和ShouldSerializeTextColor來實現默認值。

C# WinForm控件開發設置默認值的實現就講完了,但是有一點不要忽視了,你已經設置默認值,就應該相應的初始化這些屬性,比如我們例子中的代碼:

  1. private String _displayText=”Hello World!”;  
  2. private Color _textColor=Color.Red; 

原文標題:WinForm控件開發總結(十)-----為屬性設置默認值

鏈接:http://www.cnblogs.com/guanjinke/archive/2006/12/24.html

【編輯推薦】

  1. 詳解TripleDES實現C# 加密操作
  2. 淺析C# WinForm控件開發前期準備
  3. 詳解C# WinForm自定義控件的使用和調試
  4. C# Attribute的概念與使用淺析
  5. C# AttributeUsage的使用淺析
責任編輯:阡陌 來源: 博客園
相關推薦

2021-02-25 13:40:17

MySQL數據庫默認值

2009-09-11 10:41:20

C# WinForm控

2009-10-10 14:54:44

treeView1控件

2009-08-20 09:30:03

C#開發WinForm

2009-08-20 10:24:52

C#開發WinForm

2009-09-11 11:33:58

C# WinForm控Attribute

2009-08-24 11:23:41

C# TimeLabe

2009-09-11 12:07:12

C# WinForm控

2009-09-11 11:04:23

C# WinForm自

2009-11-20 09:10:21

C#開發環境

2009-09-07 03:58:42

WinForm傳值

2025-05-12 03:10:00

接口方法代碼

2009-08-24 10:10:09

C#復合控件

2009-09-01 10:35:59

C# WinForm控

2009-09-11 12:52:09

C# WinForm控編輯器

2009-09-16 10:56:22

C#開發ActiveX

2009-04-01 16:26:06

LabelWinFormC#

2010-09-28 10:35:58

SQL字段默認值

2010-09-28 10:23:36

SQL修改字段

2010-09-07 16:05:23

SQL語句刪除
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99免费在线视频 | 一区精品国产欧美在线 | 欧美久久电影 | 国产97在线视频 | 中文无码日韩欧 | 欧美一级三级在线观看 | 亚洲一区二区中文字幕 | 国产日韩欧美激情 | 一区二区三区欧美 | 91精品国产91久久久久久丝袜 | 国产 日韩 欧美 在线 | 岛国av免费在线观看 | 免费网站在线 | 天天干天天插天天 | 欧美午夜视频 | 亚洲情侣视频 | 欧美国产精品久久久 | 亚洲精品一区在线 | 91视频三区| 日韩精品一区二区久久 | 国产成人一区二区三区电影 | 国产成人精品视频在线观看 | 国产在线一区二区三区 | 天天操人人干 | 欧美最猛黑人xxxx黑人 | 激情91| 草比av | 久久久成人免费一区二区 | 国产一区二区精 | 91在线第一页 | 国产精品一区在线播放 | 麻豆changesxxx国产 | 亚洲性视频网站 | 久久99精品久久久水蜜桃 | 1000部精品久久久久久久久 | 日韩在线免费观看视频 | 深夜福利影院 | 国产亚洲一区二区三区在线 | 视频一区二区在线观看 | 香蕉一区二区 | 欧美精品1区 |