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

控件

关键词

c#,.net,控件,GDI+

 

我平时比较喜欢使用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;

              }

         }

好了,我们将控件的属性设计好了,下面就要我们写事件了.

时间: 2024-08-03 06:58:42

自己动手用c#写控件(上)的相关文章

自己动手用c#写控件

控件 自己动手用c#写控件 willsound(willsound@163.com) 关键词 c#,.net,控件,GDI+ 我平时比较喜欢使用delphi,小生不才,我随然喜欢delphi,平时开发(至少现在)多用delphi,但是不怕各位高手笑话,我没有用delphi写过控件,虽然原理上知道,但总感觉不知无从下手:L 但是自从接触了c#,她哪优美的身姿(代码风格),风骚而不放纵的性格(对面向对象的体现比较好,要比delphi强),深深打动了我.经过一段时间的操练,我发现在开发控件及组件上(别

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

控件 因为我们这个控件是实现背景渐变及文字填充,所以override Paint事件以完成自画. 为了完成override,现在以下的准备工作(写几个在Paint事件用的着的事件). //使用角度的方法渐近重画Button           private void DrawButtonWithAngle(Graphics dbg)          {               LinearGradientBrush brush=new LinearGradientBrush(new Re

利用.NET的File控件上传文件的最终解决方案(个人版)

个人版|解决|控件|上传    在遍历了csdn中所有关于上传大文件的帖子以后,写了这片垃圾.(:-))   上传大文件,有好几种方法:   1.思归的HttpWorkerRequest方法,太难,看不懂:-(   2.利用第三方的控件 AspNetUpload 要钱!!算了,咱还是喜欢免费的.   3.修改web.config文件,但是不能捕获错误.   4.通过ftp的方式上传.服务器需要提供ftp服务.      没辙,只好选第三种方式,谁让咱太蠢了呢!(太蠢了,没有关系,要多吃鱼,听说吃

用.NET的File控件上传文件的解决方案

解决|控件|上传 在遍历了csdn中所有关于上传大文件的帖子以后,写了这片垃圾.(:-)) 上传大文件,有好几种方法: 1.思归的HttpWorkerRequest方法,太难,看不懂:-( 2.利用第三方的控件 AspNetUpload 要钱!!算了,咱还是喜欢免费的. 3.修改web.config文件,但是不能捕获错误.4.通过ftp的方式上传.服务器需要提供ftp服务. 没辙,只好选第三种方式,谁让咱太蠢了呢!(太蠢了,没有关系,要多吃鱼,听说吃鱼能聪明点.) 那就仔细专研第三种方式吧! 修

利用.NET的File控件上传文件的最终解决方案

解决|控件|上传 在遍历了csdn中所有关于上传大文件的帖子以后,写了这片垃圾.(:-))上传大文件,有好几种方法:1.思归的HttpWorkerRequest方法,太难,看不懂:-(2.利用第三方的控件 AspNetUpload 要钱!!算了,咱还是喜欢免费的.3.修改web.config文件,但是不能捕获错误.4.通过ftp的方式上传.服务器需要提供ftp服务. 没辙,只好选第三种方式,谁让咱太蠢了呢!(太蠢了,没有关系,要多吃鱼,听说吃鱼能聪明点.) 那就仔细专研第三种方式吧! 修改Web

如何在asp.net页面上放置的控件上实现左右键菜单,同时对之操作(1

asp.net|菜单|控件|页面 前言: 大家也许开发了很多windows界面的解决方案,对于菜单的使用可以说是滚瓜烂熟,当然,如何实现windows窗口上的左右键功能也是不在话下. 但是如何在web窗口实现菜单呢? 很多人说.用javascript或者是vbscript来实现.完全正确.一般说来是在前台用脚本语言来写.现在也有基于不是用脚本语言的控件的方式来实现的方式.用控件来实现的方法大家可以参考我写的<基于asp.net的webmenu的数据操作>一文,用控件很容易的. 我说的是老生常谈

android通过socket通信实现客户端读取服务端的二进制数据,并展示在textview控件上

问题描述 android通过socket通信实现客户端读取服务端的二进制数据,并展示在textview控件上 客户端通过socket通信,完成读取服务端的二进制数据读取,并将数据显示在textview控件上,数据全为整型 解决方案 之前接触一些,但不是我我写的.JNI中C读取,生成Native方法.上层调用 解决方案二: 底层c来封装so文件调用socket API.上面Java调用so 解决方案三: ....java自己有socket啊,ls各位回答的什么意思.... 简单的socket网上教

iOS开发UI基础—手写控件,frame,center和bounds属性

一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View Contollor和view的关系 2.注意点 在OC开发中,Storyboard中的所有操作都可以通过代码实现,程序员一定要熟练掌握代码布局界面的能力! 设置控件监听方法的示例代码如下: [btn addTarget:self action:@selector(click:) forContro

asp.net-ASP.net 读取数据库某表中的值,并显示在页面的控件上

问题描述 ASP.net 读取数据库某表中的值,并显示在页面的控件上 我的思路:先从登陆页面把用户名传过来,然后根据用户名在表中查找,把该用户的信息调出来显示在页面上 Label10.Text=Session["name"].ToString(); SqlConnection conn = sc.getSqlConnection(); conn.Open(); string sql1 = "select * from XX where Name=" + Sessio