如何有选择地为RichTextBox中的字符串加下划线?

在我的程序中单击按钮后 – 选中的ListView条目应该复制到RichTextBox。 ListView包含联系信息,我想要完成的效果类似于Oultook中的效果(从联系簿中选择联系人时)。 我的代码的一部分用于此目的看起来像这样:

private void toButton_Click(object sender, EventArgs e) { int start = 0; for (int i = 0; i < contactsListView.SelectedItems.Count; i++) { if (contactsTextBox.TextLength != 0) contactsTextBox.Text += "; "; start = contactsTextBox.TextLength; contactsTextBox.Text += contactsListView.SelectedItems[i].Text + " " + contactsListView.SelectedItems[i].SubItems[1].Text + " [" + contactsListView.SelectedItems[i].SubItems[2].Text + "]"; contactsTextBox.Select(start, contactsTextBox.TextLength); contactsTextBox.SelectionFont = new Font(contactsTextBox.SelectionFont, FontStyle.Underline); contactsTextBox.DeselectAll(); contactsTextBox.SelectionFont = new Font(contactsTextBox.SelectionFont, FontStyle.Regular); } } 

不幸的是,不知何故FontStyle是由整个文本inheritance的,我从ListView进入后输入的所有内容也加下划线。

所以我的问题是 – 如何仅强调某些文本(我犯了错误)?

不幸的是,在我的案例解决方案中,有关于stackoverflow的类似主题,将会浪费资源。

试试这个:

  int start = 0; for (int i = 0; i < contactsListView.SelectedItems.Count; i++) { if (contactsTextBox.TextLength != 0) contactsTextBox.Text += "; "; start = contactsTextBox.TextLength; contactsTextBox.Text += contactsListView.SelectedItems[i].Text +" " + contactsListView.SelectedItems[i].SubItems[1].Text + " [" + contactsListView.SelectedItems[i].SubItems[2].Text + "]"; } this.contactsTextBox.Text += " "; this.contactsTextBox.SelectionStart = 0; this.contactsTextBox.SelectionLength = this.contactsTextBox.Text.Length-1; contactsTextBox.SelectionFont = new Font(contactsTextBox.SelectionFont, FontStyle.Underline); this.contactsTextBox.SelectionLength = 0; 

完全破解,但基本上,如果您选择文本后,但不要选择所有文本(这就是为什么我添加额外的“”),然后设置选择文本,它具有所需的效果。

您的代码的问题是SelectionFont就是 – 选择的字体。 如果没有选择,则字体更改不会执行任何操作。 BFree提供的解决方案似乎可行。 如果我在WORD中键入文档,那将是我要做的事情 – 我在下划线部分之后添加一些字符,然后我加下划线,这样多余的字符将“保存”原始格式,以便我继续文档。

为BFree +1,但我还没有声誉:( …

在将更多文本添加到文本框末尾之前,将光标放在末尾,并将字体设置为所需的样式。 然后调用rtb.AppendLine()应该产生所需的结果。

记住RTB控件的执行方式与任何其他字处理器相同,这是关键。 您设置样式并开始输入。 然后,在设置该样式后输入的任何内容都将采用corsor下的那些属性。

更新:这似乎完美。

 Dim tTexts() As String = {"Dont underline me", "Underline me", "Dont underline me", "Underline me", "Dont underline me", "Underline me", "Dont underline me", "Underline me", "Dont underline me", "Underline me", "Dont underline me", "Underline me"} Dim tUnderline As Boolean = False Dim tIndex As Integer = 0 With oRTB For tIndex = tTexts.GetLowerBound(0) To tTexts.GetUpperBound(0) If tUnderline Then .SelectionStart = .Text.Length .SelectionFont = New Font("Arial", 12, FontStyle.Underline) Else .SelectionStart = .Text.Length .SelectionFont = New Font("Arial", 12, FontStyle.Regular) End If .AppendText(tTexts(tIndex)) tUnderline = Not tUnderline Next End With