【发布时间】:2016-10-15 03:24:38
【问题描述】:
如何检查是否在richtextbox上选择了文本
它的字符并不全是粗体。
例如:
notboldboldnotbold ← 这是混合的。
我不全是粗体←这不是全粗体
这是我编写的代码,它检查richtextbox上的选定文本是否包含一些粗体文本。
它的速度很慢,因为它使用Selection.Start到Selection.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();
}
}
检查长字符串时,我可以看到文本在检查时变粗了。 还有比这更有效的方法吗?
【问题讨论】:
-
我们可以假设所有选定的文本都使用相同的字体吗?因为如果选中的文本包含不止一种字体,
SelectionFont会返回 null。 -
@RezaAghaei - 加粗会使其成为不同的字体,是吗?
-
@Clockwork-Muse 一般来说是不同风格的字体是不同的,但是这里正如
SelectionFont文档中提到的,如果当前文本选择有多个指定的字体,这个属性是空。 .我测试过,如果具有单个字体系列的文本包含一些具有不同样式的部分,则该属性不为空,这意味着控件决定使用字体系列名称。这就是为什么我说它是相同的字体。 -
@RezaAghaei - .... :headdesk: .... 所以,尽管这两种字体在后端被认为不相等(即,实际上有两个
Font实例和 @987654329 @ 返回 false),它会愉快地返回一个(大概是开始时的样式)。好吧,二分搜索的想法就出现了。
标签: c# .net winforms richtextbox