在我的程序中单击按钮后 - 选中的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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top