检查RichTextBox中选择的文本是否全部为粗体

3

如何检查richtextbox上选择的文本是否全部为粗体。例如:

asdasdasdasd ← 这不是全部粗体
我全部都是粗体 ← 这是全部粗体

这是我编写的代码,它可以检查是否全部为粗体,但速度较慢,因为它使用Selection.StartSelection.Length逐个字符检查是否为粗体。

bool allbold = 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)
    {
        allbold = false;
        richTextBox1.SelectionStart = 0;
        richTextBox1.SelectionLength = 0;
        richTextBox1.SelectionStart = start;
        richTextBox1.SelectionLength = end;
        richTextBox1.Focus();
    }
}

有没有比这更有效的方法?


1
首先,如果你发现某个元素不是粗体,你可以通过添加 break; 来跳出 for 循环。 - Darren Wainwright
1
你可以检查 richTextBox1.SelectionFont.Bold,如果所有选定的文本都是加粗的,则返回 true。有什么问题吗? - Reza Aghaei
@TaW,是的,如果SelectionFont不为null,则SelectionFont.Bold返回true,如果所有选定的文本都是粗体。当选择包含不同字体时,SelectionFont为null。 - Reza Aghaei
1
@TaW 新问题与旧问题不同,你可能错过了新问题的某些部分。看起来新问题需要重新开放。在这个问题中,OP 需要检查整个选择是否为粗体,在新问题中,OP 想要检测 3 种状态:全部为粗体、混合内容和不包含粗体。这个问题的答案不能用于新问题。 - Reza Aghaei
@TaW 没问题,希望你一切都好:) - 我会等待你的意见。 - Reza Aghaei
显示剩余8条评论
1个回答

3

您可以检查 richTextBox1.SelectionFont.Bold。如果所有选定的文本都是粗体,则返回true。


要进行测试,只需使用以下值初始化RichTextBox即可:

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

然后按照以下方式检查不同的选择:

if (richTextBox1.SelectionFont != null)
    MessageBox.Show(string.Format("{0}", richTextBox1.SelectionFont.Bold));

嗨@Reza-Aghaei,感谢您的回答。但是今天早上我才意识到,我正在检查所选文本是否具有所有不是全部粗体的字符。由于这篇文章已经得到了回答,我正在创建另一个问题。如果您想帮忙,这里是问题。<br> [https://dev59.com/gZvga4cB1Zd3GeqP46Xe] - Calvin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接