Frage

In meinem Programm auf den Button klicken - ausgewählte Listview-Einträge zum RichTextBox kopiert werden. Listview enthält Kontaktinformationen und die Wirkung ich erreichen will ist ähnlich dem in Oultook (wenn die Kontakte aus Kontaktbuch wählen). Ein Teil meiner Code, der diesem Zweck dient sieht wie folgt aus:

    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);
        }
    }

Leider ist irgendwie Fontstyle von gesamten Text und alles geerbt Ich trete nach der Eingabe von Listview unterstrichen auch.

Also meine Frage ist - wie nur bestimmten Text zu unterstreichen (wo ich einen Fehler gemacht habe)

Es gibt ähnliches Thema auf Stackoverflow hier leider in meinem Fall Lösung angegeben wird es Verschwendung von Ressourcen.

War es hilfreich?

Lösung

Versuchen Sie stattdessen:

        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;

Insgesamt Hack, aber im Grunde, wenn Sie den Text auswählen, nachdem es ist alles da, aber nicht alles davon wählen (weshalb ich die extra "„add) und stellen Sie dann den Auswahltext, hat es die gewünschte Wirkung .

Andere Tipps

Das Problem mit Ihrem Code ist, dass die SelectionFont ist genau das - die Schriftart der Auswahl. Wenn es keine Auswahl gibt, wird die Schriftart ändern werde nichts tun. Die Lösung, die BFree angeboten scheint, wie es funktionieren würde. Das ist das gleiche, was ich tun würde, wenn ich das Dokument in Word eingeben wurde - ich nach dem unterstrichenen Abschnitt einig Zeichen hinzufügen würde, bevor ich unterstrich sie so die zusätzlichen Zeichen würden „retten“ die ursprüngliche Formatierung, wenn ich das Dokument fortgesetzt.

1 für BFree, aber ich habe nicht den Ruf noch :( ...

Vor mehr Text an das Ende des Textfeldes hinzufügen, positionieren Sie den Cursor am Ende, und stellen Sie die Schriftart auf den gewünschten Stil. Dann ein Anruf an rtb.AppendLine () soll die gewünschten Ergebnisse erzielen.

Es ist entscheidend, dass die RTB Steuerung führt in der gleichen Weise wie jede andere Textverarbeitung zu erinnern. Sie setzen einen Stil und die Eingabe beginnen. Dann alles, was Sie geben nach, dass Stil Einstellung auf diese Attribute übernehmen, die unter dem Korsör sind.

Update: Dies scheint perfekt zu arbeiten.

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top