RichTextBox: использование RichTextBox.Selection.start и т. Д. С содержимым с вкладками - PullRequest
1 голос
/ 20 сентября 2011

Я хотел бы подчеркнуть выделенный текст, но обнаружил, что подчеркивание продолжается до следующей табуляции

пример кода

 //rtbList is a richTextBox
        rtbList.AppendText("\t");  
        selStart = rtbList.TextLength;
        rtbList.AppendText("Bought"); 
        rtbList.SelectionStart = selStart;           
        rtbList.SelectionLength = rtbList.TextLength - selStart;
        rtbList.SelectionFont = hdgFont; // bold & underline
        rtbList.AppendText("\t");
        //
        selStart = rtbList.TextLength;
        rtbList.SelectionLength = 0;
        rtbList.AppendText("Maturity");
        rtbList.SelectionStart = selStart;            
        rtbList.SelectionLength = rtbList.TextLength - selStart;
        rtbList.SelectionFont = hdgFontNoUnderline;

Есть ли способ преодолеть это или это основной "недостаток "в формате rtf?

[Ясно, что я мог бы избежать этого, используя фиксированный формат, например" Courier ", и создавая строки

с пробелами для выравнивания текста.]

1 Ответ

0 голосов
/ 20 сентября 2011

Похоже, ваш selStart происходит до строки AppendText("\t").Ваш шрифт NoUnderline не включает диапазон, включающий вкладку.

По сути, любой текст, который вы добавляете после шрифта подчеркивания, получает этот шрифт, пока вы его не измените.

rtbList.AppendText("\t");  
selStart = rtbList.TextLength;
rtbList.AppendText("Bought"); 
rtbList.SelectionStart = selStart;           
rtbList.SelectionLength = rtbList.TextLength - selStart;
rtbList.SelectionFont = hdgFont; // bold & underline

//Move before AppendText:
selStart = rtbList.TextLength;

rtbList.AppendText("\t");
rtbList.SelectionLength = 0;
rtbList.AppendText("Maturity");
rtbList.SelectionStart = selStart;            
rtbList.SelectionLength = rtbList.TextLength - selStart;
rtbList.SelectionFont = hdgFontNoUnderline;
...