[C#] (原创)一步一步教你自定义控件——05,Label(原生控件)
一、前言
技术没有先进与落后,只有合适与不合适。
自定义控件可以分为三类:
一类是“无中生有”。就如之前文章中的的那些控件,都是继承基类Control,来实现特定的功能效果;
一类是“有则改之”。是对原生控件的改造,以达到特定的功能效果;
一类是“用户控件”。是将多个控件进行组合,以实现比较复杂的功能效果。
本篇将实现第二类“有则改之”,通过改造最常用的控件:Label,来讲解一下实现的基本流程。
相信看完的你,一定会有所收获。
本文地址:https://www.cnblogs.com/lesliexin/p/14165466.html
二、前期分析
(一)为什么要改造原生控件
之所以要改造原生控件,是因为原生控件在某些方面不符合自己的需要。
对于Label而言,当Label的属性:AutoEllipsis=True,AutoSize=False,且文本长度超过Label宽度时(此时Label文本最后几个字符会变成“...”)。如果将鼠标放在Label上,则会自动弹出悬浮提示,提示文本为当前Label的内容。
这个自动弹出悬浮提示的功能是很人性化的,但是在某些情况下我不想Label弹出悬浮提示,而Label并没有一个开放的属性去控件,所以需要对Label进行改造,以达到悬浮提示可控制化。
(二)预期效果
通过一个公开属性,去控制Label是否自动弹出悬浮提示。

三、开始实现
(一)前期准备
新建类:LLabel.cs(注:不可与系统Label重名,虽然是对系统控件的改造,但其实是实现一个新的控件)
添加继承:Label(需要添加引用:System.Windows.Forms.dll)
(注:此处与之前文章不同,之前文章中都是继承Control的。现在因为要对Label进行改造,所以要继承Label)
修改可访问性为:public

(二)添加属性
1,是否启用自动弹出悬浮提示
我们将通过本属性来控制是否自动弹出悬浮提示。

在这里,我们除了之前使用过的“Category”(分类)和“Description”(描述)外,还使用了一个新的“DefaultValue”(默认值)。效果是指示当前属性的默认值,在设计器窗口的“属性”窗口中,如果属性是默认值,则属性值显示为标准字体,如果不是默认值,则显示为粗体。

(三)重写事件
因为是对原生控件的改造,所以不再添加事件,而是对当前事件重写。
1,OnMouseEnter
因为是在鼠标进行控件后,才弹出悬浮提示,所以,我们对需要对鼠标进入控件事件进行重写,也就是重写OnMouseEnter事件。

四、效果演示
如图:

五、结束语
本篇对Label控件的改造非常简单,也没有涉及到太深的内容。本篇更多的是为了让大家对原生控件的改造有个整体的印象。
虽然每个人的需求都不一样,对原生控件的所做改造也不一样,但是整体的改造流程却是类似的。
六、源代码及工程下载
https://files.cnblogs.com/files/lesliexin/06,LLabel.7z
[C#] (原创)一步一步教你自定义控件——05,Label(原生控件)的更多相关文章
- [原创]C#应用WindowsApi实现查找\枚举(FindWindow、EnumChildWindows)窗体控件,并发送消息。
首先介绍基本WindowsApi: public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 函 ...
- 一步一步学Silverlight 2系列(10):使用用户控件
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- Iocomp控件教程之Analog Display—模拟显示控件(优于EDIT控件)
Analog Display是简洁的显示控件.用于显示指定准确度和单位的模拟值(实数),能够将准确度设置为0.使显示结果为整数. 第一步:建立MFC对话框 第二步:插入AnalogDisplay控件 ...
- Iocomp控件教程之Pie Chart——饼状图控件
Pie Chart--饼状图控件(Pie Chart)以饼状图形式显示每一个项目内容所占的百分比比重.在设计时.能够使用属性编辑器加入或者移除项目以及更改属性值.在执行时.使用AddItem,Remo ...
- Iocomp控件教程之LinearGauge--线性刻度尺控件
线性刻度尺-线性刻度尺控件(LinearGauge)是一个具有线性表达式刻度的图像控件.支持多达5种颜色断面和4种指示器样式,相同功能,查看线性对数刻度尺(Linear Log Gauge)控件内容 ...
- 【原创】自己动手写控件----XSmartNote控件
一.前面的话 在上一篇博文自己动手写工具----XSmartNote [Beta 3.0]中,用到了若干个自定义控件,其中包含用于显示Note内容的简单的Label扩展控件,用于展示标签内容的labe ...
- [原创][开源]SunnyUI.Net, C# .Net WinForm开源控件库、工具类库、扩展类库、多页面开发框架
SunnyUI.Net, 基于 C# .Net WinForm 开源控件库.工具类库.扩展类库.多页面开发框架 Blog: https://www.cnblogs.com/yhuse Gitee: h ...
- [C#] (原创)一步一步教你自定义控件——01,TrackBar
一.前言 技术没有先进落后之分,只有合不合适. WinForm有着非常多的优点,在使用WinForm久了之后,难免会觉得WinForm自带的某些控件外观上有些许朴素.或者功能上有些不如意,自然而然便想 ...
- [C#] (原创)一步一步教你自定义控件——04,ProgressBar(进度条)
一.前言 技术没有先进与落后,只有合适与不合适. 本篇的自定义控件是:进度条(ProgressBar). 进度条的实现方式多种多样,主流的方式有:使用多张图片去实现.使用1个或2个Panel放到Use ...
随机推荐
- 【VUE】5.路由导航守卫
1. 功能需求 1. 当用户登陆成功后,把得到的token存到Session Storage 2. components -> Form.vue , 对预验证进行校验,如果验证不正确就跳出,如果 ...
- C#设计模式-装饰器模式(Decorator Pattern)
引言 当我们完成一个软件产品开发后就需要对其进行各种测试,适配快速迭代下质量的保障.当有一个完善的产品的对象后,如果我们想要给他添加一个测试功能,那么我们可以用一个新的类去装饰它来实现对原有对象职责的 ...
- mysql5.5升级5.7(1)
卸载旧版本mysql 当然要记得备份数据库数据啦 1.查看需要卸载的部分: rpm -qa |grep -i mysql 2.开始卸载: yum remove mysql* 接下来是安装新版mysql ...
- Java基础教程——包装类
Java出道之时,自诩为"纯面向对象的语言",意思是之前的所谓"面向对象语言"不纯. 但是,有人指责Java也不纯--8种基本类型并非类类型.为此,Java为他 ...
- linux设置共享文件夹 - samba
安装samba sudo apt-get install samba 配置 /etc/samba/smb.conf 的global模块添加security = user 最下加入 [share] pa ...
- SimpleChannelInboundHandler生命周期
转载:https://www.pianshen.com/article/1766171597/
- Cisco交换机常见配置
-------查看当前系统基础信息-------- sh version //查看当前IOS版本. sh running-config //查看当前系统中运行的配置信息 -------清除当前系统配置 ...
- CentOS硬软链接
硬软链接说明 软链接: 1.软链接,以路径的形式存在.类似于Windows操作系统中的快捷方式 2.软链接可以 跨文件系统 ,硬链接不可以 3.软链接可以对一个不存在的文件名进行链接 4.软链接可以对 ...
- 删除list列表中的某一个元素的多种方法
当我们在处理业务的时候,很多情况下数据都要进行一层层的过滤,最近需要给一个列表中去除不符合条件的元素, 本来觉着挺简单的,Google了下发现很多方法都是旧方法,根本不符合我的需求. 于是参考着网上的 ...
- 老猿学5G随笔:5G系统构成
5G系统(5G智能计费方案)简称5GS,由以下部分组成: 用户设备:User Equipment,简写UE,用户访问网络的设备 5G接入网:5G Access NetWork,简写为5G-AN,负责用 ...