2016-10-15 9 views
2

Как проверить, если выбранный текст на RichTextBox, чтоПроверьте выбранный текст на RichTextBox не все полужирный или смешанные [C#]

его символы не все жирным шрифтом.

Например:

notbold жирным шрифтом notbold ← это смешанные.
Im не все жирные ← это еще не все bold

Это код, который я сделал, он проверяет выделенный текст в richtextbox, содержит ли текст выделенный текст или нет.
его медленный, потому что он проверяет символ один за другим с помощью Selection.Start to 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(); 
    } 
} 

При проверке длинной строки, я вижу, что текст становится полужирным при проверке. Есть ли эффективный способ, чем это?

+0

Можно предположить, все выделенный текст использует тот же шрифт? Потому что, если выделенный текст содержит более одного шрифта, 'SelectionFont' возвращает null. –

+0

@RezaAghaei - смелость сделает его другим шрифтом, да? –

+0

Нет, это тот же шрифт. –

ответ

2

В тексте RTF \b указывает начало полужирной части текста. Таким образом, вы можете сначала проверить, если richTextBox1.SelectionFont.Bold верно, то это означает, что текст все жирный шрифт, в противном случае, если выбранный РТФ содержит \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}"; 
+0

Шрифт выбора будет пустым, если имеется несколько шрифтов, поэтому он может быть смешанным. Кроме того, было бы лучше не нужно сначала заменять все символы эвакуации ... –

+0

@ Clockwork-Muse Я не утверждаю, что это лучшее решение, но оно работает для всех случаев, в которых выбранный текст использует одно и то же имя шрифта. И о 'Replace (@" \\ "," ")' потому, что '' \\ b "' не следует рассматривать как начало полужирного. Пользователи, которым требуется лучшее решение, могут использовать парсер RTF или ждать лучшего решения :) –

 Смежные вопросы

  • Нет связанных вопросов^_^