【问题标题】:Highlight specific text in richtextbox突出显示富文本框中的特定文本
【发布时间】:2013-01-23 19:52:18
【问题描述】:

我有一个包含listbox 和一些richtextboxex 的窗口窗体。 listbox 包含一些值。当我从listbox 中选择任何值时,richtextboxex 根据所选值绑定数据。

当我从列表框中选择一个值时,我必须突出显示一些绑定到richtextbox 的文本,例如:

友情提醒,您有 > 逾期发票,逾期余额为 >。如果您对所欠金额有任何疑问,请给我们打电话,我们很乐意讨论。如果您已经付款,请忽略此提醒。

所有数据都来自数据库。

我想突出显示<<OverdueInvCount>><<OverdueInvTotal>> 这两个词。

【问题讨论】:

  • 定义“列表框”——这样的事情发生在许多不同的上下文中,你的标签没有给出任何线索。 Winforms、ASP.NET 还是其他?

标签: c# richtextbox highlighting


【解决方案1】:

这样的东西应该可以工作(刚刚测试过..似乎工作正常):

int openBrace = richTextBox.Text.IndexOf("<");
while (openBrace > -1) {
    int endBrace = richTextBox.Text.IndexOf(">", openBrace);
    if (endBrace > -1) {
        richTextBox.SelectionStart = openBrace;
        richTextBox.SelectionLength = endBrace - openBrace;
        richTextBox.SelectionColor = Color.Blue;
    }
    openBrace = richTextBox.Text.IndexOf("<", openBrace + 1);
}

【讨论】:

    【解决方案2】:

    一种不强制转换为具有所需功能的新对象的方法是覆盖ListBoxDrawItem

    void listBox1_DrawItem(object sender, DrawItemEventArgs e)
    {
        var item = listBox1.Items[e.Index] as <Your_Item>;
    
        e.DrawBackground();
        if (item.fIsTemplate)
        {
            e.Graphics.DrawString(item.Text + "(Default)", new Font("Microsoft Sans Serif", 8, FontStyle.Regular), Brushes.Black, e.Bounds);
        }
        else
        {
            e.Graphics.DrawString(item.Text, new Font("Microsoft Sans Serif", 8, FontStyle.Regular), Brushes.Black, e.Bounds);
        }
        e.DrawFocusRectangle();
    }
    

    并将其添加到您的构造函数中(在InitializeComponent(); 调用之后)

    listBox1.DrawMode = DrawMode.OwnerDrawFixed;
    listBox1.DrawItem += new DrawItemEventHandler(listBox1_DrawItem);
    

    【讨论】:

    • 不应该使用一些系统变量来避免对字体进行硬编码吗?另一方面,Format 事件 (msdn.microsoft.com/en-us/library/…) 可能更容易,因为您不必自己进行绘图。
    猜你喜欢
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2013-01-05
    • 2019-10-03
    • 2014-08-15
    • 2010-11-08
    • 2015-07-19
    相关资源
    最近更新 更多