实现方式: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# 制作关键字醒目显示控件的更多相关文章

  1. AvalonEdit-基于WPF的代码显示控件

    AvalonEdit是基于WPF的代码显示控件,项目地址:https://github.com/icsharpcode/AvalonEdit,支持C#,javascript,C++,XML,HTML, ...

  2. 抽屉显示控件SlidingDrawer入门

    SlidingDrawer是一个抽屉控件,代码具体路径为:android.widget.SlidingDrawer,该控件从API  Level3引入,在API 17及之后的版本将不再被支持.具体效果 ...

  3. BarTender 2016表单中的“秤显示”控件

    BarTender 2016中的表单是一个非常实用的工具,它可以实现数据输出提示,查询提示和同一表单的记录选择.这些都离开可供添加的控件,“秤显示”控件也是我们打印尝尝需要涉及的,今天我们就来看看什么 ...

  4. [转] 基于C#的波形显示控件的实现

    转自 基于C#的波形显示控件的实现[附完整源码下载] 编者记: 09年暑假正好在学院实验室呆了一段时间,做了个完整的上位机软件(具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的 ...

  5. CAD全屏显示控件

    主要用到函数说明: MxDrawXCustomFunction::Mx_FullScreen 全屏显示控件,详细说明如下: 参数 说明 int iFull = 2 0: 不完屏,1:全屏,2:自动切换 ...

  6. Expression Blend 的点滴(3)--Templating的妙用,制作自己的ScrollBar控件

    原文:Expression Blend 的点滴(3)--Templating的妙用,制作自己的ScrollBar控件 在Blend中,有一个功能,Make into control---通过它可以方便 ...

  7. 基于C#的波形显示控件的实现[转]

    编者记: 09年暑假正好在学院实验室呆了一段时间,做了个完整的上位机软件(具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的数据进行处理和保存,并以图形的方式显示),整个项目边学 ...

  8. DELPHI中如何让FORM窗体透明,只显示控件?

    DELPHI中如何让FORM窗体透明,只显示控件?分享到: 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 回复次数:7largewanglargewanglargewang等级:Blank ...

  9. Delphi 制作自定义数据感知控件并装入包(dpk文件)中(与DBText类似的数据感知控件)

    一.基础知识简介: 1.包的命名介绍: 包的命名没有规则,但是建议遵守包的命名约定:包的命名与包的版本相关,包的名称前面几个字符通常表示作者或公司名,也可以是控件的一个描述词,后面紧跟的Std表示运行 ...

随机推荐

  1. NABCD项目分析

    Share软件 N(需求):我们设计的这款手机app名为share,旨在打造一款服务于大学生的软件,像qq,微信,微博等,这些社交软件大都服务范围太广,我们就是为了满足当代大学生为了本校学生交流方便, ...

  2. 创建自定义路由处理程序(Creating a Custom Route Handler) | 定制路由系统| 高级路由特性 |精通ASP-NET-MVC-5-弗瑞曼

    自定义实现 IRouteHandler

  3. OpenCV在Mac下的部署 Java-IntelliJ IDEA

    目录 Xcode Command Line Xcode的证书许可 MacPorts的安装 环境变量的配置 安装OpenCV 安装确认 Idea配置 额外可能产生的问题 Xcode Command Li ...

  4. 请求参content-type的值为json,返回报错的解决方法

    如上图,请求后报参数错误 原因content-type的值为json requests.post左侧的data要改为json 即r = requests.post(url, json=data, he ...

  5. CSS-05-伪类及伪元素选择器

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Python和JS实现的Web SSH工具webssh,牛逼

    这个工具是使用Python开发,可以从下面地址了解详情. 官网:https://pypi.org/project/webssh/ webssh这个工具可以干啥: 在linux机器上安装python环境 ...

  7. Linux防火墙之iptables入门

    一.防火墙的概念 什么是防火墙?防火墙是一台或一组设备,用以在网络间实施访问控制策略:事实上一个防火墙能够包含OSI模型中的很多层,并且可能会涉及进行数据包过滤的设备,它可以实施数据包检查和过滤,在更 ...

  8. Oracle监听器

    Oracle 监听器 Listener 是一个重要的数据库服务器组件,在整个 Oracle 体系结构中,扮演着重要的作用.它负责管理 Oracle 数据库和客户端之间的通讯,它在一个特定的网卡端口(默 ...

  9. linux 修改系统时间 同步网络时间

    一.date命令 date -s time  修改系统时钟时间为time 设置时间和日期 例如:将系统日期设定成2018年6月8日的命令 命令 : "date -s 06/08/2018&q ...

  10. 如何最快实现物流即使查询功能-物流轨迹查询API

    上一篇文章我们介绍了一个物流服务提供商,推荐大家使用快递鸟接口,主要介绍了如何注册账号,获得密钥,找不到注册地址的,我在发一下: http://kdniao.com/reg 今天我们来聊如何利用快递鸟 ...