C#工具箱中已经自带了一些基础控件,对于要求不高的项目来说已经可以满足需求,如果觉得自带控件不好用的可以使用第三方的控件库,这个收费和免费的都有很多,如果这些还满足不了自己的个性化需求的就只能自己写了,基本上自己写的控件库根据自定义的程度不同可以分为三档:
第一档:复合控件
这类控件只是为了解决某一些重复出现的控件组合的需求而编写的,比如TrackBar和label组合显示的复合控件,这类控件从UserControl类派生而来,只是几个现有控件的组合体,自定义这几个控件的逻辑关系,并没有重写;
第二档:扩展控件
这类控件为了解决现有控件不能完全满足需求的情况而编写,可以增加新功能或者修改原有功能,比如为了使ListView控件更新时不闪烁而继承ListView派生出一个新的ListView类,修改了其中的一部分功能;
第三档:自定义控件
这类控件为了解决现有的控件中并没有所需的功能而编写,可以直接与自带控件一样继承于System.Windows.Forms.Control类,作为一种真正全新的控件,除了Control类提供的最基本的功能外,其他的事件、属性、功能甚至于界面的绘制,都需要由编写者自己添加,不能在“UserControl测试容器”中进行测试,第三方控件库就属于这一类。自定义控件也不一定非要从Control类派生,也可以从UserControl类派生而来,如果是从UserControl类派生而来,就可以在“UserControl测试容器”中进行测试。

复合控件篇
首先在VS中新建用户控件库:

现在让我们新建一个控件吧,拖入一个TrackBar和label,如下图:

代码如下:

        public UserControl1(){InitializeComponent();label1.Text= (((double)trackBar1.Value / (double)trackBar1.Maximum) * 100).ToString() + "%";}private void trackBar1_Scroll(object sender, EventArgs e){label1.Text = (((double)trackBar1.Value/ (double)trackBar1.Maximum)*100).ToString()+"%";}public string CurrentValue{set{label1.Text = value+"%";if (Convert.ToDouble(value) != 0) trackBar1.Value = (Int32)(Convert.ToDouble(value) / 100 * trackBar1.Maximum);else trackBar1.Value = 0;}get{return label1.Text.Remove(label1.Text.Length-1);}}

点击启动以后开始运行,和普通的winform程序不同的是,控件是在用户控件测试容器中运行的,可以让用户看到此控件的预览效果,这个小控件很简单就是显示当前游标所在位置的百分比。


生成解决方案后将会在生成文件夹中生成相应的dll文件,如下图:

这个dll文件就是我们新制作的集合控件。现在来测试一下吧,新建一个winform项目,点击工具->选择工具箱项,点击浏览,选择前面生成的dll文件:

现在在工具箱中出现了我们的用户控件,拖入窗口,加个按钮和文本框用输入来改变游标位置:


输入按钮绑定的函数代码:

        private void button1_Click(object sender, EventArgs e){if (Convert.ToDouble(textBox1.Text) < 0 || Convert.ToDouble(textBox1.Text) > 100){MessageBox.Show("请输入0-100之间数值!"); return;}userControl11.CurrentValue = textBox1.Text;}

最终效果:

扩展控件篇
参考C#中ListView详解这篇文章末尾的这个吧,派生一下根据自己的需求重写或者增加即可。

自定义控件篇
自定义控件这边就转载另一个老哥的代码吧(传送门在末尾),制作效果是当鼠标指针移动到控件时,控件颜色就会发生改变,当鼠标离开时就恢复原来的颜色。
首先在窗口项目中添加一个新的类。在解决方案资源管理器窗口中设置:引用---->添加引用,勾选:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Design;namespace Contol
{//[DefaultProperty("HoverColor")]//[Designer(typeof(ColourControl))]public class ColourControl : Control{#region //重写该属性以设置控件默认大小protected override System.Drawing.Size DefaultSize{get{return new Size(100, 100);}}//当鼠标指针移动到控件区域内时的颜色public Color HoverColor{get { return M_hoverColor; }set{M_hoverColor = value;Invalidate();//强制重新绘制}}#endregion#region//该变量标识鼠标指针是否已经进入控件的区域private bool isMouseEnter = false;//当鼠标进入控件区域后的背景颜色Color M_hoverColor;#endregion#region 方法protected override void OnMouseEnter(EventArgs e){//标识鼠标指正已经进入区域isMouseEnter = true;//强制重新绘制Invalidate();base.OnMouseEnter(e);}protected override void OnMouseLeave(EventArgs e){//标识鼠标指针是否已经离开控件isMouseEnter = false;//强制重新绘制Invalidate();base.OnMouseLeave(e);}protected override void OnPaint(PaintEventArgs e){//用于填充控件背景区域的画刷SolidBrush brush = new SolidBrush(BackColor);if (isMouseEnter){brush.Color = HoverColor;}e.Graphics.FillRectangle(brush, e.ClipRectangle);//释放画刷资源brush.Dispose();}#endregion}
}

不使用自带控件生成,只继承于Control,不能在“UserControl测试容器”中进行测试,重写OnPaint方法,鼠标进入/离开此区域时重绘此区域颜色。
点击重新生成项目。项目->刷新项目工具箱,找到新生成的控件,拖到窗口中,调整前景色背景色:





原文传送门

C#中新建用户控件示例相关推荐

  1. 技巧:在Silverlight 2应用程序中切换用户控件

    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://terrylee.blog.51cto.com/342737/85341 ...

  2. 关于从页面中获取用户控件中的其它控件(如DropDownList)事件的方法

    在项目中经常把一些经常使用的代码做成用户控件以提高代码的可重用性, 一个经常遇到的就是在页面中调用用户控件中的服务器控件的事件,下面给出简单的代码示列. 我们在一个用户控件(MaterialRepor ...

  3. 使用观察者模式在 Silverlight 中切换用户控件

    有一篇技巧,见 http://tech.sina.com.cn/s/2008-07-03/1528718607.shtml 或 http://kb.cnblogs.com/page/42897/?pa ...

  4. Winform中使用用户控件实现带行数和标尺的RichTextBox(附代码下载)

    场景 RichTextBox控件允许用户输入和编辑文本的同时提供了比普通的TextBox控件更高级的格式特征. 效果 注: 博客主页: https://blog.csdn.net/badao_lium ...

  5. Web.config中注册用户控件和自定义控件

    在ASP.NET 的早先版本里,我们通过在页面的顶部添加 <%@ Register %> 指令来引入和使用自定义服务器控件和用户控件时,象这样: <%@ Register TagPr ...

  6. C#中,用户控件UserControl里面用Panl加载UserControl,并实现利用委托互相传值

    用户控件主窗体结构:左侧树形菜单,右侧Panl: 根据点击的菜单节点,panl里面选择性加载某一个子窗体用户控件,并传值给子窗体: 反之,在子窗体进行相应的操作之后,传值给主窗体,触发主窗体的刷新. ...

  7. wpf项目中类库内新建用户控件和自定义控件的问题

    项目中碰到这么个问题:在类库中添加自定义控件,有2个问题:1.添加时没有模板:2.自行添加类和资源文件后编译没问题,但是使用时失败: 这个问题困扰我好几天了网上也没找到方法,今天解决了 ,希望可以帮助 ...

  8. ASP.NET开发:在用户控件中添加属性

    在WEB开发中,可重用的代码我们可以把它写成一个通用模块供需要的地方来引用.本文就是介绍在ASP.NET的web编程时,如何在用户控件中添加属性,实现这种方法:举例说明详解. 在WEB开发中经常有一些 ...

  9. VS2008 Tips #008 如何创建ASP.NET Web 用户控件并包含在Web 页面中

    在 Visual Web Developer 中创建 ASP.NET Web 用户控件就像 ASP.NET Page 页面一样简单. 以下是创建步骤: 1.打开您想添加用户控件的站点. 2.右键点击站 ...

  10. html 调用c#dll中的控件,C#实现反射调用动态加载的DLL文件中的方法和在窗体中加载DLL文件的用户控件...

    反射的作用: 1. 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型 2. 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射. ...

最新文章

  1. Memcached全面剖析
  2. windows cmd post请求_cmd命令集合
  3. PIC18F452之1602自定义字符
  4. cayenne:用于随机模拟的Python包
  5. android手机 scala环境,在Android中使用Scala中的Java常量
  6. matlab veristand,matlab和NI VeriStand联合仿真环境搭建(一)
  7. .Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建
  8. linux下qt制作日历,基于QT的多功能日历设计与开发.doc
  9. 光芒国际——我的面试(二)
  10. php上证指数抽奖代码,上证指数etf基金代码,场内etf基金一览表
  11. 数字黑洞java,java解决数字黑洞问题
  12. webx3对请求的处理流程详解一
  13. 蜜瓜文案:水果店蜜瓜简单文案,蜜瓜水果朋友圈配的文案
  14. html滚动条固定前几行,bootstrapTable定位行固定滚动条
  15. Oracle+mybatis+Java批量插入如何提升效率(10W级)
  16. 资本市场+金融科技,广州试点能否擦出新火花?
  17. 想学好前端 H5 CSS3 的小朋友们康康我~
  18. 【信号处理】数字信号处理Matlab设计附GUI界面和报告
  19. 计算机文字录入培训大纲,《计算机文字录入》课程教学大纲.pdf
  20. 【Java-笔试面试】面向对象与面向过程(结构化程序设计)的区别?

热门文章

  1. 借助 PowerVR 开发工具,让 iOS 应用在苹果 M1 电脑上实现更好体验
  2. Kafka学习征途:不再依赖ZK的KRaft
  3. “80后”全国模范检察官白静:传递青年干警正能量
  4. 关于skl计算机题目,系统崩溃,并且您不能更改 Windows 8.1 或 Windows Server 2012 R2 中的英特尔 SKL 平台上的 CPU 频率...
  5. 为什么很多新型编程语言都抛弃了 C 语言风格的 for 语句?
  6. linux 下 lamp 编译安装 20160424 szx
  7. 思考犹太家庭如何教育出这么多精英及富豪
  8. ESXi5安装vib格式驱动
  9. vba模拟鼠标点击_这些掌握了,你才敢说自己懂VBA
  10. Spring - 事件监听机制 源码解析