在我的程序中单击按钮后 - 选中的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 here上有类似的主题,遗憾的是,在我的案例中,解决方案表明会浪费资源。
答案 0 :(得分:3)
请改为尝试:
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;
总的黑客攻击,但基本上,如果你选择了文本全部,但不要选择全部(这就是为什么我添加了额外的“”),然后设置选择文本,它具有所需的效果
答案 1 :(得分:0)
在文本框末尾添加更多文本之前,将光标放在末尾,然后将字体设置为所需的样式。然后调用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
答案 2 :(得分:0)
您的代码存在的问题是SelectionFont就是 - 选择的字体。如果没有选择,字体更改将不会执行任何操作。 BFree提供的解决方案似乎可行。如果我在WORD中键入文档,那将是我要做的事情 - 我在下划线部分之后添加一些字符,然后我加下划线,这样额外的字符将“保存”原始格式,以便我继续文档。
为BFree +1,但我还没有声誉:( ...