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#创建自定义控件的示例
# 自定义
# 重写
# 主要用于
# 自己的
# 这是
# 还可以
# 基础上
# 较高
# 所示
# 再把
# 大比拼
# 拖到
# 源代码
# 大家多多
# 如下图
# 新建一个
# 应用程序
# 再往
# 全由
# 几种方法
相关文章:
如何实现建站之星域名转发设置?
公司网站设计制作厂家,怎么创建自己的一个网站?
建站之星各版本价格是多少?
如何通过IIS搭建网站并配置访问权限?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Python lxml的etree和ElementTree有什么区别
小型网站建站如何选择虚拟主机?
Swift开发中switch语句值绑定模式
如何快速搭建响应式可视化网站?
C#如何序列化对象为XML XmlSerializer用法
建站主机选购指南:核心配置优化与品牌推荐方案
C#怎么创建控制台应用 C# Console App项目创建方法
如何通过主机屋免费建站教程十分钟搭建网站?
建站之星免费模板:自助建站系统与智能响应式一键生成
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
,在苏州找工作,上哪个网站比较好?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
如何解决ASP生成WAP建站中文乱码问题?
开心动漫网站制作软件下载,十分开心动画为何停播?
深圳网站制作案例,网页的相关名词有哪些?
建站之星安装路径如何正确选择及配置?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
如何基于云服务器快速搭建个人网站?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
定制建站如何定义?其核心优势是什么?
股票网站制作软件,网上股票怎么开户?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
如何在万网自助建站中设置域名及备案?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
制作网站怎么制作,*游戏网站怎么搭建?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
如何在腾讯云服务器上快速搭建个人网站?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
常州自助建站工具推荐:低成本搭建与模板选择技巧
建站之星如何实现PC+手机+微信网站五合一建站?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
建站之星客服服务时间及联系方式如何?
大型企业网站制作流程,做网站需要注册公司吗?
建站之星后台管理如何实现高效配置?
上海网站制作开发公司,上海买房比较好的网站有哪些?
建站VPS能否同时实现高效与安全翻墙?
网页设计与网站制作内容,怎样注册网站?
建站主机选虚拟主机还是云服务器更好?
制作网站的公司有哪些,做一个公司网站要多少钱?
*请认真填写需求信息,我们会在24小时内与您取得联系。