C# 制作关键字醒目显示控件
实现方式:WinForm自定义控件,继承系统Label控件实现。

第1步:创建“组件”,取名为:MarkLabel

第2步:修改添加如下代码:
/* 添加命名空间引用:
* using System.Windows.Forms;
* using System.Drawing;
* */
public partial class MarkLabel : Label // 继承自: System.Windows.Forms.Label
{
[Browsable(true), Category("CUIT-DX037"), Description("关键字标记数组")]
public MarkKey[] KeyWords { get; set; } = new MarkKey[]; public MarkLabel()
{ } protected override void OnPaint(PaintEventArgs e)
{
//base.OnPaint(e);
TextRenderer.DrawText(e.Graphics, this.Text, this.Font, new Point(, ), this.ForeColor); if (this.Text.Length <= ) return; // 依次将每一个关键字重新覆盖绘制一次
for (int i = ; i < KeyWords.Length; i++)
{
string keyWord = KeyWords[i].KeyWord;
Color keyColor = KeyWords[i].KeyColor; int keyWidth = TextRenderer.MeasureText(keyWord, this.Font).Width; // 当前关键字的测量宽度
int IndexOffset = this.Text.IndexOf(keyWord); // 第一次出现该关键字的位置
while (IndexOffset >= )
{
string StrFront = Text.Substring(, IndexOffset); // 该关键字前面的所有字符
if (StrFront.Length > )
{
int strWidth = TextRenderer.MeasureText(StrFront + keyWord, this.Font).Width;
// 计算好关键字的位置,然后重新覆盖绘制。
TextRenderer.DrawText(e.Graphics, keyWord, Font, new Point((strWidth - keyWidth), ), keyColor);
}
else
{
// 使用该关键字指定的颜色,重绘该关键字
TextRenderer.DrawText(e.Graphics, keyWord, Font, new Point(, ), keyColor);
} // 判断条件,然后退出该关键字循环
IndexOffset += keyWord.Length;
if (IndexOffset >= Text.Length) break;
// 提取关键字后面的所有字符
string StrBehind = Text.Substring(IndexOffset);
if (StrBehind.Length <= ) break;
int index2 = StrBehind.IndexOf(keyWord);
if (index2 < ) break;
IndexOffset += index2; // 当前关键字,下一个位置
}
} // 遍历访问每一个关键字
} } public class MarkKey
{
/// <summary>
/// 关键字-字符串
/// </summary>
public string KeyWord { get; set; }
/// <summary>
/// 关键字凸显颜色
/// </summary>
public Color KeyColor { get; set; } = Color.Red; }
然后,编译生成。
第3步:使用,在窗体界面上,添加该控件,然后设置它的属性。

以后,在修改该控件的Text属性时,将会自动刷新显示效果。

提高一下:给控件再添加几个方法:
/// <summary>
/// 指定一个关键字,以默认(红色)标记
/// </summary>
public void ResetKeyWord(string keyString)
{
ResetKeyWord(keyString, Color.Red);
} /// <summary>
/// 指定一个关键字,以指定颜色标记
/// </summary>
public void ResetKeyWord(string keyString, Color keyColor)
{
this.KeyWords = new MarkKey[] { new MarkKey() { KeyWord = keyString, KeyColor = keyColor } };
this.Refresh();
} /// <summary>
/// 指定多个关键字,以默认(红色)标记
/// </summary>
/// <param name="keyStringList"></param>
public void ResetKeyWord(params string[] keyStringList)
{
var query = from str in keyStringList
select new MarkKey() { KeyWord = str, KeyColor = Color.Red }; this.KeyWords = query.ToArray();
this.Refresh();
}
然后,设计窗体界面,并添加如下代码即可。
=》
完成!
您的支持,是我分享的动力!感谢支持!!!

C# 制作关键字醒目显示控件的更多相关文章
- AvalonEdit-基于WPF的代码显示控件
AvalonEdit是基于WPF的代码显示控件,项目地址:https://github.com/icsharpcode/AvalonEdit,支持C#,javascript,C++,XML,HTML, ...
- 抽屉显示控件SlidingDrawer入门
SlidingDrawer是一个抽屉控件,代码具体路径为:android.widget.SlidingDrawer,该控件从API Level3引入,在API 17及之后的版本将不再被支持.具体效果 ...
- BarTender 2016表单中的“秤显示”控件
BarTender 2016中的表单是一个非常实用的工具,它可以实现数据输出提示,查询提示和同一表单的记录选择.这些都离开可供添加的控件,“秤显示”控件也是我们打印尝尝需要涉及的,今天我们就来看看什么 ...
- [转] 基于C#的波形显示控件的实现
转自 基于C#的波形显示控件的实现[附完整源码下载] 编者记: 09年暑假正好在学院实验室呆了一段时间,做了个完整的上位机软件(具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的 ...
- CAD全屏显示控件
主要用到函数说明: MxDrawXCustomFunction::Mx_FullScreen 全屏显示控件,详细说明如下: 参数 说明 int iFull = 2 0: 不完屏,1:全屏,2:自动切换 ...
- Expression Blend 的点滴(3)--Templating的妙用,制作自己的ScrollBar控件
原文:Expression Blend 的点滴(3)--Templating的妙用,制作自己的ScrollBar控件 在Blend中,有一个功能,Make into control---通过它可以方便 ...
- 基于C#的波形显示控件的实现[转]
编者记: 09年暑假正好在学院实验室呆了一段时间,做了个完整的上位机软件(具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的数据进行处理和保存,并以图形的方式显示),整个项目边学 ...
- DELPHI中如何让FORM窗体透明,只显示控件?
DELPHI中如何让FORM窗体透明,只显示控件?分享到: 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 回复次数:7largewanglargewanglargewang等级:Blank ...
- Delphi 制作自定义数据感知控件并装入包(dpk文件)中(与DBText类似的数据感知控件)
一.基础知识简介: 1.包的命名介绍: 包的命名没有规则,但是建议遵守包的命名约定:包的命名与包的版本相关,包的名称前面几个字符通常表示作者或公司名,也可以是控件的一个描述词,后面紧跟的Std表示运行 ...
随机推荐
- 开始使用Manjaro
Manjaro是什么? 一个基于Arch系列,开源的linux发行版 Mnajrao官网了解更多,这里不做更多阐述内容 为什么使用Manjaro 第一点,为了方便自己隔离腾讯网游 第二点,更方便的学习 ...
- [bzoj4942] [洛谷P3822] [NOI2017] 整数
题目链接 https://www.luogu.org/problemnew/show/P3822 想法 这个啊,就是线段树哇 最初的想法是每位一个节点,然后进位.退位找这一位前面第一个0或第一个1,然 ...
- 关于SOA架构设计的案例分析
关于SOA架构设计的案例分析 面向服务的体系结构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.它可以根据需求通过网络对松散耦合的粗粒度应 ...
- Ogre3d 1.7.x 的 RTShaderSystem的一个BUG
来源:http://www.ogre3d.org/forums/viewtopic.php?f=2&t=63644 表现:使用dx的shader可能会造成程序崩溃. 在文件OgreShader ...
- Python中随机数的生成
在Python中要实现随机数的生成,需要使用random模块中randint方法. 其具体实现方法如下: import random a = random.randint(1,20) #(1,20)为 ...
- AVLTree(C++实现)没有统一旋转操作
最近疫情比较严重,只能在家里休息,利用休息之余,我用C++把AVL树实现了一遍 大学老师只讲一些比较简单的数据结构和算法,这些高级数据结构还是需要自己主动学习并且动手来实现的, 从前只听说过AVLTr ...
- PKU-3580 SuperMemo(Splay模板题)
SuperMemo 题目链接 Your friend, Jackson is invited to a TV show called SuperMemo in which the participan ...
- [C语言学习笔记二] extern 函数的用法
extern 用来定义一个或多个变量.其后跟数据类型名和初始值.例如: extern int a =10 它与 int,long long int,double,char的本质区别,在于 extern ...
- JSP-导入taglib 出现classNotFound异常
案例 前端登录跳转到指定jsp,报classNoFoundException,原因是页面导入 <%@ taglib uri="http://java.sun.com/jsp/jstl/ ...
- ICC教程 - Flow系列 - 概念系列 - ECO (理论+实践+脚本分享)
本文转自:自己的微信公众号<集成电路设计及EDA教程> <ICC教程 - Flow系列 - 概念系列 - ECO (理论+实践+脚本分享)> 这篇推文讲一下数字IC设计中的po ...