C#自定义控件VS用户控件

发布时间 - 2026-01-10 22:10:29    点击率:

C#中自定义控件VS用户控件大比拼

1 自定义控件与用户控件区别

WinForm中,

用户控件(User Control):继承自 UserControl,主要用于开发 Container 控件,Container控件可以添加其他Controls控件

自定义控件(Custom Control):继承自 Control,主要用于开发windows控件的最基本的类,比如 Text,Button 控件

2 要开发自己的控件的几种方法[1]

复合控件(Composite Controls):将现有的各种控件组合起来,形成一个新的控件,来满足用户的需求。

扩展控件(Extended Controls):就是在现有的控件基础上,派生出一个新的控件,增加新的功能,或者修改原有功能,来满足用户需求。

自定义控件(Custom Controls):就是直接从System.Windows.Forms.Control类派生,也就是说完全由自己来设计、实现一个全新的控件,这是最灵活、最强大的方法,但是,对开发者的要求也是最高的。要实现一个自定义控件,必须为Control类的的OnPaint事件编写代码,在OnPaint事件中实现自定义控件的绘制工作。同时,还可以重写Control类的WndProc方法,来处理底层的Windows消息。所以说,要实现一个自定义控件,对开发者的要求较高,要求开发者必须了解GDI+和Windows API的知识。

3 示例:Clock User Control[1]

源代码

Steps:

1. 新建一个Windows控件库项目(从UserControl派生)

2. 添加一个Timer控件,并设置属性(Enable=True, Interval=1000)和事件 (Ticker=Time1_Tick)

private void timer1_Tick(object sender, EventArgs e)
  {


   this.Time = DateTime.Now;  

   Refresh();   
  }

3. 重写OnPaint事件,绘制用户界面

图1 重写OnPaint事件,绘制用户界面

#region draw clock
  private void UserClock_Paint(object sender, PaintEventArgs e)
  {
   Graphics dc = e.Graphics;
   Pen pn = new Pen(ForeColor);
   SolidBrush br = new SolidBrush(ForeColor);
   initCoordinates(dc); 
   DrawDots(dc, br);
   DrawHourHand(dc, pn);
   DrawSecondHand(dc, pn);
   DrawMinuteHand(dc, pn);
  }
  
  public void initCoordinates(Graphics dc)
  {
   if (this.Width == 0 || this.Height == 0) return;
   dc.TranslateTransform(this.Width / 2, this.Height / 2);
   dc.ScaleTransform(this.Height / 250F, this.Width / 250F);
  }
  public void DrawDots(Graphics dc, Brush brush)
  {
   int iSize;
   for (int i = 0; i <= 59; i++)
   {
    if (i % 5 == 0)
    {
     iSize = 15;
    }
    else
    {
     iSize = 5;
    }
    dc.FillEllipse(brush, -iSize / 2, -100 - iSize / 2, iSize, iSize);
    dc.RotateTransform(6);
   }
  }
  public virtual void DrawHourHand(Graphics grfx, Pen pn)
  {
   GraphicsState gs = grfx.Save();
   grfx.RotateTransform(360.0F * Time.Hour / 12 + 30.0F * Time.Minute / 60);
   grfx.DrawLine(pn, 0, 0, 0, -50);
   grfx.Restore(gs);
  }
  public virtual void DrawMinuteHand(Graphics grfx, Pen pn)
  {
   GraphicsState gs = grfx.Save();
   grfx.RotateTransform(360.0F * Time.Minute / 60 + 6.0F * Time.Second / 60);
   grfx.DrawLine(pn, 0, 0, 0, -70);
   grfx.Restore(gs);
  }
  public virtual void DrawSecondHand(Graphics grfx, Pen pn)
  {
   GraphicsState gs = grfx.Save();
   grfx.RotateTransform(360.0F * Time.Second / 60);
   grfx.DrawLine(pn, 0, 0, 0, -100);
   grfx.Restore(gs);
  }
  #endregion

4. 生成用户控件

5. 测试用户控件

创建WinForm应用程序,在Toolbox添加Tab "User Control",再往其中拖入第4步中生成的自定义控件的dll文件。再把Toolbox中的用户控件“UserControlClock”拖到界面“Form1”中,如下图所示。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# C#  # 自定义控件  # 用户控件  # C#创建自定义控件及添加自定义属性和事件使用实例详解  # c# Winform自定义控件-仪表盘功能  # C#自定义IP输入框控件  # C#设计模式之Template模板方法模式实现ASP.NET自定义控件 密码强度检测功能  # C# winform自定义翻页控件详解  # C#自定义控件实现TextBox禁止粘贴的方法  # C#实现用户自定义控件中嵌入自己的图标  # C#自定义控件添加右键菜单的方法  # 解析C#自定义控件的制作与使用实例的详解  # C#创建自定义控件的示例  # 自定义  # 重写  # 主要用于  # 自己的  # 这是  # 还可以  # 基础上  # 较高  # 所示  # 再把  # 大比拼  # 拖到  # 源代码  # 大家多多  # 如下图  # 新建一个  # 应用程序  # 再往  # 全由  # 几种方法 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: javascript中闭包概念与用法深入理解  Bootstrap整体框架之CSS12栅格系统  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  如何为不同团队 ID 动态生成多个独立按钮  如何在宝塔面板创建新站点?  QQ浏览器网页版登录入口 个人中心在线进入  JS去除重复并统计数量的实现方法  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  如何破解联通资金短缺导致的基站建设难题?  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  免费视频制作网站,更新又快又好的免费电影网站?  Android Socket接口实现即时通讯实例代码  如何用PHP工具快速搭建高效网站?  如何快速搭建自助建站会员专属系统?  如何解决hover在ie6中的兼容性问题  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  Laravel如何使用Service Container和依赖注入?(代码示例)  EditPlus中的正则表达式实战(5)  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  如何用y主机助手快速搭建网站?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  如何快速登录WAP自助建站平台?  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  详解MySQL数据库的安装与密码配置  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  C++时间戳转换成日期时间的步骤和示例代码  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Laravel怎么实现验证码(Captcha)功能  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  昵图网官网入口 昵图网素材平台官方入口  如何快速搭建高效WAP手机网站?  如何快速生成可下载的建站源码工具?  大同网页,大同瑞慈医院官网?  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  如何用虚拟主机快速搭建网站?详细步骤解析  如何快速启动建站代理加盟业务?  Linux系统命令中screen命令详解  公司网站制作需要多少钱,找人做公司网站需要多少钱?  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  Swift开发中switch语句值绑定模式  深圳网站制作平台,深圳市做网站好的公司有哪些?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?