[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 ...
随机推荐
- guitar pro系列教程(二十六):Guitar Pro教程之虚拟吉他功能讲解
上一章节我们讲述了Guitar Pro的组织小节的相关功能,那么本章节我们还是采用图文结合的方式为大家讲解关于guitar pro中一些虚拟的吉他功能一 一做出讲解,感兴趣的朋友可以一起进来学习了解哦 ...
- window安装elasticsearch和kibana
本次测试安装5.1.1版本 es下载地址:https://www.elastic.co/downloads/past-releases/elasticsearch-5-1-1 选择zip kibana ...
- Eclipse改字体大小
Windows ->Perferences ->General ->Appearance ->Colors and Fonts ->Basic ->Text Fon ...
- Linux下使用Docker部署nacos-server(单机模式),丧心病狂的我在半夜给UCloud提交了一份工单
1. 拉取nacos-server镜像 进入 Docker Hub 查看nacos-server最新版本为 nacos-server:1.4.0 配置阿里云镜像加速 sudo mkdir -p /et ...
- mysql建表和建数据库语句
一.数据库操作语言 数据库在操作时,需要使用专门的数据库操作规则和语法,这个语法就是 SQL(Structured Query Language) 结构化查询语言. SQL 的主要功能是和数据库建立连 ...
- PyQt信号connect连接槽方法时报:native Qt signal is not callable错误
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在将一个信号连接到槽方法时,程序异常退出,捕获异常 ...
- Python中sorted(iterable, /, *, key=None, reverse=False)的参数中的斜杆是什么意思?
通过help(sorted)查看sorted的帮助文档,显示如下: Help on built-in function sorted in module builtins: sorted(iterab ...
- 学习tcp和udp
tcp和udp的差别 tcp和udp是不一样的 tcp是一个可靠的连接,如果发出一个tcp请求,那么就一定要回复一个请求 而udp是不需要回复的,就像QQ一样,只要发过来就可以了,不管别人在不在线,发 ...
- Kubernetes的Local Persistent Volumes使用小记
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- uniapp 微信授权登陆
准备工作: 1.微信开发者账号 2.AppId .AppSecret (这些可以在开放平台申请到) 第一步 添加移动应用,仔细添加上述信息: 审批通过后,即刻 第二步 打开uniapp,开启OAuth ...