检查richtextbox上的选定文本是否全部为粗体或混合[C#]

时间:2016-10-15 03:24:38

标签: c# .net winforms richtextbox

如何检查richtextbox上的选定文本

  

它的字符并不全是大胆的。

例如:

notbold 粗体 notbold←这是混合的。
我不是都大胆←这不是全是大胆的

这是我所做的代码,它检查richtextbox上的选定文本是否文本包含一些粗体文本。
它的速度很慢,因为它使用Selection.Start逐个检查char。选择.Length和检查是否粗体。如果我使用richTextBox1.SelectionFont.Bold,它将返回false,因为它不是全部粗体,这也意味着如果它与粗体混合而不是粗体。

bool notallbold = true;
int start = richTextBox1.SelectionStart;
int end = richTextBox1.SelectionLength;
for (int i = 1; i < end; i++)
{
    richTextBox1.SelectionStart = start+i;
    richTextBox1.SelectionLength = 1;
    if (richTextBox1.SelectionFont.Bold)
    {
        notallbold = false;
        richTextBox1.SelectionStart = 0;
        richTextBox1.SelectionLength = 0;
        richTextBox1.SelectionStart = start;
        richTextBox1.SelectionLength = end;
        richTextBox1.Focus();
    }
}

检查长字符串时,我可以看到文本在检查时变得粗体。 有没有比这更有效的方法呢?

1 个答案:

答案 0 :(得分:2)

在RTF文本中,\b表示文本的粗体部分的开头。因此,您可以先检查richTextBox1.SelectionFont.Bold是否为真,然后表示文本全部为粗体,否则,如果所选rtf包含\b,则表示内容为混合,否则未选中粗体文本文本:

private void button1_Click(object sender, EventArgs e)
{
    if (richTextBox1.SelectionFont == null)
        return;
    if (richTextBox1.SelectionFont.Bold)
        MessageBox.Show("All text is Bold");
    else if (richTextBox1.SelectedRtf.Replace(@"\\", "").IndexOf(@"\b") > -1)
        MessageBox.Show("Mixed Content");
    else
        MessageBox.Show("Text doesn't contain Bold");
}

要测试解决方案,只需使用以下值初始化RichtextBox

this.richTextBox1.SelectedRtf = @"{\rtf1\fbidis\ansi\ansicpg1256\deff0\deflang1065" +
    @"{\fonttbl{\f0\fnil\fcharset0 Calibri;}}\uc1\pard\ltrpar" +
    @"\lang9\b\f0\fs22 T\b0 his is a \b test}";