[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 ...
随机推荐
- ppt-1 操作界面与基本操作
1.Ctrl+N快速建立新文档 2.新模板:文件--新建--可免费搜索.下载新模板 3.恢复未保存的演示文稿 文件--打开(首先看到的是近期使用的演示文稿,)--鼠标滚动至末尾,可看到"恢复 ...
- 虚拟机VM14.X安装Mac10.12启动出现问题的解决方法
虚拟机安装Mac系统,会出现的问题太多,于是乎变记录下来,方便以后使用或者方便大家解决问题. 一:VM14.X安装Mac10.12虚拟机,启动出现下面无限重启问题 解决方法: 亲测有效 在OS X 1 ...
- Java基础教程——Random随机数类
Random类 java.util.Random类用于产生随机数.需要导入包: import java.util.Random; 方法 解释 Random() 创建一个Random类对象 Random ...
- Ajax Status(状态码) & readyState()
Ajax Status & readyState readyState(状态值) 是指运行AJAX所经历过的几种状态,论访问是否成功都将响应的步骤,可以理解成为AJAX运行步骤,使用" ...
- 6.2 Binding基础
WPF最为核心的思想是数据驱动UI,实现这一技术的基石就是绑定技术(binding).如果把Binding比作数据的桥梁,那么它的两端分别是源(Source)和目标(Target),Binging是架 ...
- 02_启动和销毁Service
在Application关闭后,Service仍然会运行. package com.example.servdemo; import android.app.Activity; import andr ...
- 【GDOI2007】JZOJ2020年8月10日提高组T1 夏娜的菠萝包
[GDOI2007]JZOJ2020年8月10日提高组T1 夏娜的菠萝包 题目 Description 夏娜很喜欢吃菠萝包,她的经纪人RC每半个月就要为她安排接下来的菠萝包计划.今天是7月份,RC又要 ...
- moviepy音视频剪辑:mask clip遮罩剪辑、遮片、蒙版的作用以及其包含的构成内容
☞ ░ 前往老猿Python博文目录 ░ 在阅读moviepy的类ImageClip的构造方法代码时,对于其中涉及遮罩的处理没有理解,到处查找遮罩的资料没有查到,最后到moviepy的官网上尝试了一下 ...
- PyQt(Python+Qt)学习随笔:QListWidget获取当前选中项的selectedItems方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListWidget的selectedItems方法返回列表部件中所有选中项的一个列表,调用语法如 ...
- float和double有什么区别?
float和double在游戏行业肯定是用的很多的,虽然这是个很基础的问题,但是面试时被问到还是感觉说的不是很好. 所以还是总结一下: float 单精度浮点数在机内占 4 个字节,用 32 位二进制 ...