2012-06-04 2 views
2

У меня есть строка текста для отображения, и я хочу подчеркнуть только часть заголовка текста на дисплее. Как это сделать, пожалуйста?Winforms - Подчеркивание части текста, отображаемого в текстовом поле

Сообщение: Это сообщение для имени клиента.

Где «Сообщение:» подчеркнуто.

+1

Вы используете неправильный контроль за этим. Если вы действительно чувствуете непреодолимую причину этого подчеркивания, выберите RichTextBox. – Steve

+0

Я никогда раньше не использовал один из них. Как отформатировать текст, чтобы подчеркнуть часть строки, в которой я нуждаюсь, чтобы это понравилось? – Kobojunkie

+1

Какой текст вы хотите отобразить? Откуда вы знаете, какая часть текста является заголовком? –

ответ

2

Если вы хотите, чтобы показать текст, используя богатый текстовый блок, вы могли бы сделать что-то вроде этого:

richTextBox1.SelectionFont = new Font("Times New Roman", 10, FontStyle.Underline); 
richTextBox1.SelectedText = "Message:"; 
richTextBox1.SelectionFont = new Font("Times New Roman", 10, FontStyle.Regular); 
richTextBox1.SelectedText = " This is a message for Name of Client."; 

Или, если сообщение является динамическим, а заголовок и текст всегда разделены двоеточие, вы могли бы сделать что-то вроде этого:

string message = "Message: This is a message for Name of Client"; 
string[] parts = message.Split(':'); 
richTextBox1.SelectionFont = new Font("Times New Roman", 10, FontStyle.Underline); 
richTextBox1.SelectedText = parts[0] + ":"; 
richTextBox1.SelectionFont = new Font("Times New Roman", 10, FontStyle.Regular); 
richTextBox1.SelectedText = parts[1]; 

Или, если вы хотите, чтобы показать текст динамически в метках, вы могли бы сделать что-то вроде этого:

string message = "Message: This is a message for Name of Client"; 
string[] parts = message.Split(':'); 

Label heading = new Label(); 
heading.Text = parts[0] + ":"; 
heading.Font= new Font("Times New Roman", 10, FontStyle.Underline); 
heading.AutoSize = true; 
flowLayoutPanel1.Controls.Add(heading); 

Label message = new Label(); 
message.Text = parts[1]; 
message.Font = new Font("Times New Roman", 10, FontStyle.Regular); 
message.AutoSize = true; 
flowLayoutPanel1.Controls.Add(message); 
4

Вы можете сделать это подчеркивание с помощью элемента управления RichTextBox

int start = rtbTextBox.Text.IndexOf("Message:", StringComparison.CurrentCultureIgnoreCase); 
    if(start > 0) 
    { 
     rtbTextBox.SelectionStart = start;   
     rtbTextBox.SelectionLength = "Message:".Length-1;   
     rtbTextBox.SelectionFont = new Font(rtbTextBox.SelectionFont, FontStyle.Underline); 
     rtbTextBox.SelectionLength = 0; 
    } 

Этот пример использования непосредственно текст, который вы предоставили в вопросе. Будет лучше, если вы инкапсулируете этот код в частный метод и передаете текст заголовка.

Например:

private void UnderlineHeading(string heading) 
{ 
    int start = rtbTextBox.Text.IndexOf(heading, StringComparison.CurrentCultureIgnoreCase); 
    if(start > 0) 
    { 
     rtbTextBox.SelectionStart = start;   
     rtbTextBox.SelectionLength = heading.Length-1;   
     rtbTextBox.SelectionFont = new Font(rtbTextBox.SelectionFont, FontStyle.Underline); 
     rtbTextBox.SelectionLength = 0; 
    } 
} 

и звонить из вашей формы ти: UnderlineHeading("Message:");

+0

WoW, я клянусь писать, мы закончили почти то же самое :) –

+0

Я обновил свое оригинальное сообщение с образцом строки. Я хочу указать, что подчеркивается только начальный текст конкретной строки. – Kobojunkie

+0

Я обновил свой ответ, используя текст и позицию, поставленные вами в вопросе. – Steve

5

Используйте RichTextBox вместо этого!

this.myRichTextBox.SelectionStart = 0; 
    this.myRichTextBox.SelectionLength = this.contactsTextBox.Text.Length-1; 
    myRichTextBox.SelectionFont = new Font(myRichTextBox.SelectionFont, FontStyle.Underline); 
    this.myRichTextBox.SelectionLength = 0; 
0

Только мысль. Вы можете использовать скрытое текстовое поле или создать настраиваемый элемент управления с richtextbox с подчеркиванием и использовать его в клиентском приложении. Я слышал, что есть возможность создать текстовое поле с подчеркиванием, используя GDI + api, но не уверен.

Благодаря Махеш kotekar

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