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

原创 2002年07月11日 09:43:00

因为我们这个控件是实现背景渐变及文字填充,所以override Paint事件以完成自画。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

为了完成override,现在以下的准备工作(写几个在Paint事件用的着的事件).

//使用角度的方法渐近重画Button

          private void DrawButtonWithAngle(Graphics dbg)

         {

              LinearGradientBrush brush=new LinearGradientBrush(new Rectangle(0,0,this.Width,this.Height),froColor,backColor,angle);

              dbg.FillRectangle(brush,0,0,this.Width,this.Height);

              brush.Dispose();

         }

         ////使用模式的方法渐近重画Button

          private void DrawButtonWithMode(Graphics dbg,LinearGradientMode Mode)

         {

              LinearGradientBrush brush=new LinearGradientBrush(new Rectangle(0,0,this.Width,this.Height),froColor,backColor,Mode);

              dbg.FillRectangle(brush,0,0,this.Width,this.Height);

              brush.Dispose();

         }

         //重画Button的文本(Text),不使用图案填充

          private void DrawButtonText(Graphics dbg)

         {

              StringFormat format=new StringFormat();

              format.LineAlignment=StringAlignment.Center;

              format.Alignment=StringAlignment.Center;

              dbg.DrawString(this.Text,this.Font,new SolidBrush(this.ForeColor),new Rectangle(0,0,this.Width,this.Height),format);

         }

          //override DrawButtonText函数,使之可以用图案填充文本

          private  void DrawButtonText(Graphics dbg, HatchStyle hs)

         {

              StringFormat format=new StringFormat();

              format.LineAlignment=StringAlignment.Center;

              format.Alignment=StringAlignment.Center;

              dbg.DrawString(this.Text,this.Font,new HatchBrush(hs,this.ForeColor,Color.Aquamarine),new Rectangle(0,0,this.Width,this.Height),format);

     }

好了,现在开始重写Paint事件了.

protected override void OnPaint(PaintEventArgs pe)

         {

             

              Graphics g=pe.Graphics;

              base.OnPaint(pe); //调用父控件的方法

              if(isUseFloat==true) //假如使用角度控制渐变的角度

                   DrawButtonWithAngle(g);

              if(isUseFloat==false)

                   DrawButtonWithMode(g,mode);

              if(isUseStyle==true)//假如使用图案填充文字

             DrawButtonText(g,hatchStyle);

              else

                   DrawButtonText(g);

     }

好了,现在大功告成了,进行保存,生成。

创建测试项目

1.        文件菜单上,指向添加项目,然后单击新建项目以打开添加新项目对话框。

2.        选择“Visual C# 项目节点,然后单击“Windows 应用程序

3.        名称框中键入 Test

4.        在解决方案资源管理器中,右击测试项目的引用节点,然后从快捷菜单中选择添加引用以显示添加引用对话框。

5.        单击标记为项目的选项卡。

6.        双击 LinearGradientButtonLib 项目,并注意该项目此时出现在选定的组件窗格中。

添加引用后,应将新控件添加到工具箱。如果您的控件已经出现在工具箱中,则应该跳过下一节。

将控件添加到工具箱

1.        右击工具箱,然后从快捷菜单中选择自定义工具箱

“自定义工具箱”对话框打开。

2.        选择“.NET 框架组件选项卡并单击浏览。浏览到 LinearGradientButtonLib/bin/debug 文件夹并选择 LinearGradientButtonLib.dll

LinearGradientButton 出现在“自定义工具箱”对话框的组件列表中。

3.        自定义工具箱对话框中,单击 LinearGradientButton 旁的框并关闭窗口。

LinearGradientButton 被添加到选定的工具箱的选项卡上。

将控件添加到窗体

1.        在解决方案资源管理器中,右击“Form1.cs”,然后从快捷菜单中选择视图设计器

2.        在工具箱中,向下滚动直到到达标记为 LinearGradientButton 的图标。双击该图标。

窗体上显示一个LinearGradientButton”。

3.        右击LinearGradientButton并从快捷菜单中选择属性

4.        属性窗口中检查该控件的属性。注意,它们与标准按钮公开的属性相同,不同的是多了我们自己加入的一些属性

5.        设定本控件的前景色及背景色,然后可以选择是否填充文字,是使用角度还是使用系统设定值进行渐变角度的变化。

6.        调试菜单中选择启动 出现 Form1

谁如果需要源码的话,请给我发信.

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

自己动手用c#写控件(下)作者: willsound   www.ASPCool.com 时间:2002-7-11 17:24:15  阅读次数:6736      因为我们这个控件是实现背景渐变及文...
  • shinerpipul
  • shinerpipul
  • 2005年01月05日 23:07
  • 570

自己动手用c#写控件

平时比较喜欢使用delphi,小生不才,我随然喜欢delphi,平时开发(至少现在)多用delphi,但是不怕各位高手笑话,我没有用delphi写过控件,虽然原理上知道,但总感觉不知无从下手:L ...
  • laolaowhn
  • laolaowhn
  • 2007年07月23日 17:53
  • 1424

自己动手用c#写控件

自己动手用c#写控件                                                                 willsound(willsound@163.c...
  • Uncommon
  • Uncommon
  • 2004年10月09日 04:06
  • 2468

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

自己动手用c#写控件(上)作者: willsound   www.ASPCool.com 时间:2002-7-11 17:23:41  阅读次数:7629      willsound(willsou...
  • shinerpipul
  • shinerpipul
  • 2005年01月05日 23:05
  • 625

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

自己动手用c#写控件                                                                                          ...
  • willsound
  • willsound
  • 2002年07月11日 09:44
  • 1405

(转载)自己动手用c#写控件 + 自己小结

 自己动手用c#写控件                                                                 willsound(willsound@163....
  • petit
  • petit
  • 2005年03月15日 02:31
  • 834

自己动手写ORM的感受

之前看到奋斗前辈和时不我待前辈的自己动手写ORM系列博客,感觉讲解的通俗易懂,清晰透彻。作为一个菜鸟,闲来也想着自己写一个ORM,一来加深自己对ORM的理解,以求对EF,NHibernate等ROM框...
  • hh_92
  • hh_92
  • 2016年09月04日 01:30
  • 739

自己动手用python写豆瓣FM

以前装过几次ubuntu,但总是因为缺少一些软件工具而最终不得不回到windows下。最近又迷上了ubuntu,逐渐从windows系统转战ubuntu。这次,openfetion、wineqq、ch...
  • shawpan
  • shawpan
  • 2013年07月19日 21:49
  • 1081

自己动手用ICMP写ping程序

ICMP是(Internet Control Message Protocol)Internet控制报文协议,它传数据,但是对数据有监督功能,比如你的数据没到达,则会返回一个icmp报文。 ic...
  • zhangqi_gsts
  • zhangqi_gsts
  • 2015年12月05日 15:47
  • 1977

自己动手用javascript写xpath

       自己以前写过一篇文章,是关于dom下xpath的编写,不过那是借助浏览器本身的特性,这次我想用javascrip和正则表达式打造自己的xpath,不多啰嗦,看代码:   function...
  • sx1989827
  • sx1989827
  • 2009年11月29日 16:13
  • 720
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自己动手用c#写控件(下)
举报原因:
原因补充:

(最多只允许输入30个字)