【问题标题】:Check if selected text on richtextbox is all bold or not检查richtextbox上的选定文本是否全部为粗体
【发布时间】:2016-10-14 18:37:31
【问题描述】:

如何检查 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();
    }
}

还有比这更有效的方法吗?

【问题讨论】:

  • 对于初学者,您可以通过添加break; 来跳出for 循环,只要您发现一些不是粗体的内容。
  • 您可以检查richTextBox1.SelectionFont.Bold,如果所有选定的文本都是粗体,则返回true。有什么问题?
  • 不确定它是否有效;你测试了吗@Reza?实际上需要的是混合权重的第三个值..
  • @TaW,是的,如果SelectionFont 不为空,那么如果所有选定的文本都是粗体,SelectionFont.Bold 将返回 true。 SelectionFont is null, when the selection contains different fonts.
  • @TaW 新问题是另一个问题,您可能错过了新问题的某些部分。似乎需要重新提出新问题。在这个问题中,OP 需要检查整个选择是否为粗体,在新问题中,OP 想要检测 3 种状态:整体是粗体,它是混合内容并且不包含粗体。此题的答案不能用于新题。

标签: c# .net winforms richtextbox


【解决方案1】:

您可以查看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 Thx 为答案。但我刚刚意识到,今天早上我正在检查所选文本是否包含所有字符,其中并非全部为粗体。既然这篇文章得到了回答,我正在创建另一个问题。如果您想提供帮助,这里是问题。
    [stackoverflow.com/questions/40054607/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 2014-07-19
  • 2011-10-02
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
相关资源
最近更新 更多