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表示运行 ...
随机推荐
- php代码没解析成功
在Apache中加载PHP模块 1.打开Apache的配置文件httpd.conf(位于Apache2\conf 目录下). 2.查找 “#LoadModule ssl_module modules/ ...
- 正斜杠(" / ")和反斜杠(" \ ")的区别
反斜杠“\”是电脑出现了之后为了表示程序设计里的特殊含义才发明的专用标点.所以除了程序设计领域外,任何地方都不应该使用反斜杠. 如何区分正反斜杠 英语:"/" 英文是forward ...
- Java程序员学习Go语言—之一
转载:https://www.luozhiyun.com/archives/206 GOPATH 工作空间 GOPATH简单理解成Go语言的工作目录,它的值是一个目录的路径,也可以是多个目录路径,每个 ...
- Doxygen -- part 2
Documenting the code 这个章节涵盖两个主题: 如何在你的代码中放置注释, 一遍doxygen可以在生成的文档中囊括它们. 如何组织一个注释块的内容, 以使得输出美观. 特殊注释块 ...
- redis缓存数据库及Python操作redis
缓存数据库介绍 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库,随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站, 特 ...
- 工具 之uniq
uniq命令的作用:显示唯一的行,对于那些连续重复的行只显示一次!接下来通过实践实例说明. [关键字] Linux Shell uniq 看test.txt文件的内容,可以看到其中的连续重复行 [ro ...
- 冬日曙光——回溯CNN的诞生
前言 卷积神经网络(CNN)作为深度学习的重要一支,在当前计算机视觉领域应用相当广泛.本文回顾了深度学习的发展历程,讲述CNN基本的理论概念和第一代卷积神经网络LeNet-5的建立.文章言有不当之处, ...
- 每天一道Java题[8]
以下题目及解答属于个人见解,欢迎大家也分享和补充一下解答的内容,互相促进,共同进步! 题目 RESTful WebService与SOAP WebService有什么异同? 解答 SOAP是一个协议, ...
- Python 入门基本知识
编码:是把机器语言翻译成人能看懂的语言 美国信息互换标准代码<<ASSIC>>这张表就是相当于语法表随着发展后面又出现了:gb2312 ——到—— gbk18030 AS ...
- artTemplate--模板使用自定义函数(1)
案例 因为公司业务需要频繁调用接口,后端返回的都是json树对象,需要有些特殊的方法做大量判断和数据处理,显然目前简单语法已经不能满足业务需要了,需要自己定制一些 方法来处理业务逻辑. 例如后台返回的 ...