自己动手用c#写控件(上)

自己动手用c#写控件(上)


Author: willsound  &;nbspFrom:Internet


                willsound(willsound@163.com)
 
  我平时比较喜欢使用delphi,小生不才,我随然喜欢delphi,平时开发(至少现在)多用delphi,但是不怕各位高手笑话,我没有用delphi写过控件,虽然原理上知道,但总感觉不知无从下手:L
 
  但是自从接触了c#,她哪优美的身姿(代码风格),风骚而不放纵的性格(对面向对象的体现比较好,要比delphi强),深深打动了我。经过一段时间的操练,我发现在开发控件及组件上(别的方面,小生我不敢妄断),其简便性真令我耳目一新。怎么样,试一把吧.J
 
  对了,我的开发平台是windows 2000 server .vs.net 正式版
 
  我所实现的这个控件,是从窗体控件Button继乘的,能够实现渐变背景,实现图案及纹理填充文字.
 
  好了,我们开在开始吧
 
  1 首先打个vs.net
 
  2在“文件”菜单中,指向“新建”,然后选择“项目”以打开“新建项目”对话框。从“C# 项目”列表中选择“Windows 控件库”项目模板,然后在“名称”框中键入LinearGradientButtonLib,然后点确定。
 
  3 在解决方案资源管理器中,右击 UserControl1.cs,并从快捷菜单中选择“查看代码”。
 
  4 找到 class 语句 public class UserControl1,将 UserControl1 更改为 LinearGradientButton以更改组件的名称。找到构造函数 public UserControl1(),将它更改为 public LinearGradientButton ()。
 
  5 在 Class 语句,将该控件从 System.Windows.Forms.UserControl 继承的类型更改为 System.Windows.Forms.Button。这允许继承的控件继承 Button 控件的所有功能。
 
  6 在解决方案资源管理器中,单击 UserControl1.cs,并在“属性”窗口中,将 FileName 属性更改为LinearGradientButton.cs.
 
  好了,到现在工作就告一段落了,下面的工作,是向咱们的控件添加属性了。喝口水,继续!
 
  先加上名字空间using System.Drawing.Drawing2D;
 
  1找到 class 语句。在紧靠 { 的后面键入下面的代码:
 
  private Color froColor; //渐变前景色
 
            private Color backColor;//渐变背景色
 
            private bool isUseFloat;//是否使用角度转变
 
            private float angle;    //放置角度
 
            private LinearGradientMode mode;//设定渐变的角度
 
            private HatchStyle hatchStyle; //设定文本的填充图案
 
            private bool isUseStyle;//设定是否用图案填充图案
 
 
 
  上面这些是我们控件需要的私有域,下面开始为每个私有域做它们对应的属性.在以上代码的下面,写入以下代码:
 
      [Description("设定按钮渐变的前景色"),Category("Appearance")]
 
          public Color FrontColor
 
          {
 
                get
 
                {
 
                    return froColor;
 
                }
 
                set
 
                {
 
                    froColor=value;
 
                }
 
          }
 
            [Description("设定按钮渐变的背景色"),Category("Appearance")]
 
          public Color BackGroundColor
 
          {
 
                get
 
                {
 
                    return backColor;
 
                }
 
                set
 
                {
 
                    backColor=value;
 
                }
 
          }
 
            [DefaultValue(false),Description("设定是否人工设定角度")]
 
          public bool UseFloat
 
          {
 
                get
 
                {
 
                    return isUseFloat;
 
                }
 
                set
 
                {
 
                    isUseFloat=value;
 
                }
 
          }
 
            [DefaultValue(false),Description("设定是否使用图案填充文本")]
 
          public bool UseStyle
 
          {
 
                get
 
                {
 
                    return isUseStyle;
 
                }
 
                set
 
                {
 
                    isUseStyle=value;
 
                }
 
          }
 
            [DefaultValue(0),Description("定义渐变方向的角度,以度为单位从 X 轴顺时针测量。 "),Category("Appearance")]
 
          public float Angle
 
          {
 
                get
 
                {
 
                    return angle;
 
                }
 
                set
 
                {
 
                    angle=value;
 
                }
 
          }
 
            [DefaultValue(0),Description("当UseFloat设为false时,设定渐变方向。 "),Category("Appearance")]
 
          public LinearGradientMode Mode
 
          {
 
                get
 
                {
 
                    return mode;
 
                }
 
                set
 
                {
 
                    mode=value;
 
                }
 
          }
 
            [DefaultValue(false),Description("设定文本要填充的图案"),Category("Appearance")]
 
          public HatchStyle FillStyle
 
          {
 
                get
 
                {
 
                    return hatchStyle;
 
                }
 
                set
 
                {
 
                    hatchStyle=value;
 
                }
 
          }
 
  好了,我们将控件的属性设计好了,下面就要我们写事件了.
    (2005-5-31:09:28)
 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 警告:持续变种木马正在发起农历新年攻势!
 您可能对 [C#] 的这些文章也感兴趣:
C# 3.0中的分部方法
.net程序员的盲点(一):参数修饰符ref,out ,params的区别
.net程序员的盲点(二):两个“属性”引起的歧异
使用VBA.NET压缩备份C#工程
C#处理数码相片之马赛克的实现
如何把图片插入Excel的一个单元格中
c#写的五子棋程序
如何杀死Word,Excel等进程?
HttpClient, 使用C#操作Web
C#精髓集合(1)
C#精髓集合(2)
C#精髓集合(3)