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表示运行 ...
随机推荐
- xLua下使用lua-protobuf
本文发表于程序员刘宇的博客,转载请注明来源:https://www.cnblogs.com/xiaohutu/p/12168781.html protobuf作为一种通用套接字格式,各种插件里,最本质 ...
- Linux下利用Ant调用Jmeter脚本生成HTML测试报告
今天我们学习如何利用Ant调用Jmeter脚本,并将生成的 jtl 文件转换为 HTML 格式的测试报告. 准备工作 需要在Linux上提前安装好 JDK. Jmeter 和 Ant. 1,JDK(可 ...
- (分块)GukiZ and GukiZiana CodeForces - 551E
题意: 给你一段序列,并且有两种操作 操作①:将序列中从l-r每个元素加上x 操作②:在序列中找到ai=aj=y,j-i的最大值,如果找不到则输出-1 思路: 直接分块暴力即可 对于区间加,普通标记加 ...
- 【WPF学习】第十三章 理解路由事件
每个.NET开发人员都熟悉“事件”的思想——当有意义的事情发生时,由对象(如WPF元素)发送的用于通知代码的消息.WPF通过事件路由(event routing)的概念增强了.NET事件模型.事件路由 ...
- 3、python第三方库的安装方式
在学习Python过程中,经常要用到很多第三方库,面对各种不同情况,Python为我们提供了多种安装方法,这里主要介绍三种 方法:pycharm在线安装.pip在线安装(强烈推荐).离线安装. 方式一 ...
- 基于 Lind.DDD 的 权限管理系统
先起个头,在跟吧 表结构 12个表 ps: sxiaomais.blog.163.com/blog/static/31741203200811102630406/ 需要数据库 文件的 附件 权限 ...
- 添加动态输出 Adding Dynamic Output 精通ASP-NET-MVC-5-弗瑞曼 Listing 2-7
ViewBag Dynamic Output
- Kindle Unlimited 上线的最热书单
Kindle 也给出了一份,到现在为止,在 Kindle Unlimited 上线的最热书单: 1.岛上书店2.一个人的朝圣3.自控力4.嫌疑人 X 的献身5.沉默的大多数(王小波文集)6.跟任何人都 ...
- 每天玩转3分钟 MyBatis-Plus - 5. 高级查询(三)(条件构造器)
每天玩转3分钟 MyBatis-Plus - 1. 配置环境 每天玩转3分钟 MyBatis-Plus - 2. 普通查询 每天玩转3分钟 MyBatis-Plus - 3. 高级查询(一) 每天玩转 ...
- [Codeforces 1228E]Another Filling the Grid(组合数+容斥)
题目链接 解题思路: 容斥一下好久可以得到式子 \(\sum_{i=0}^{n}\sum_{j=0}^{n}(-1)^{i+j}C_n^iC_n^j(k-1)^{ni+nj-ij}k^{n^2-(ni ...