如何有选择地为RichTextBox中的字符串加下划线?
-
03-07-2019 - |
题
在我的程序中单击按钮后 - 选中的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是由整个文本继承的,我从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
不隶属于 StackOverflow