Question

Dans mon programme après avoir cliqué sur le bouton - les entrées ListView sélectionnées doivent être copiées dans RichTextBox. ListView contient des informations de contact et l’effet que je souhaite obtenir est similaire à celui d’Oultook (lors de la sélection des contacts dans le carnet de contacts). Une partie de mon code qui sert à cela ressemble à ceci:

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

Malheureusement, FontStyle est hérité d'un texte entier et tout ce que j'entre après la saisie dans ListView est également souligné.

Ma question est donc la suivante: comment souligner uniquement un texte (où j'ai commis une erreur)?

Il existe un sujet similaire sur stackoverflow ici malheureusement dans mon cas solution indiquée, il y aura un gaspillage de ressources.

Était-ce utile?

La solution

Essayez plutôt ceci:

        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;

Total bidouillage, mais si vous sélectionnez le texte une fois qu'il est terminé, ne sélectionnez pas TOUT (c’est pourquoi j’ajoute l’extra """), puis définissez le texte de sélection. effet désiré.

Autres conseils

Le problème avec votre code est que SelectionFont n’est que cela - la police de la sélection. S'il n'y a pas de sélection, le changement de police ne fera rien. La solution proposée par BFree semble fonctionner. C’est la même chose que si j’écrivais le document en WORD - j’ajouterais quelques caractères après la section soulignée avant de le souligner, pour que les caractères supplémentaires soient "sauvegardés". la mise en forme originale pour quand j'ai continué le document.

+1 pour BFree, mais je n'ai pas encore de réputation :( ...

Avant d'ajouter davantage de texte à la fin de la zone de texte, positionnez le curseur à la fin et réglez la police sur le style souhaité. Ensuite, un appel à rtb.AppendLine () devrait produire les résultats souhaités.

Il est important de rappeler que le contrôle RTB fonctionne de la même manière que tout autre traitement de texte. Vous définissez un style et commencez à taper. Ensuite, tout ce que vous tapez après avoir défini ce style prendra les attributs qui se trouvent sous le corsor.

Mise à jour: Cela semble fonctionner parfaitement.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top