Partager via

Controle richTextBox C# winForms

Anonyme
2024-09-27T19:19:27+00:00

Bonjour,

J'ai un contrôle RichTextBox C# dotnet winforme dans une application bureau et je veux parcourir cet controle et compléter le vide de chaque ligne dans ce contrôle par des tirets jusqu(au la fin de chaque ligne pronnons en compte le retour à la ligne automatique du contorle, comme dans l'office Word tabulations automatique, tout on prend on considération que le texte a des styles différents des mots en gras en majuscule en Italie majuscule et minuscule.
Ma methode suivante donne le resultat mais pas parfaitement :

private void CompleteLinesWithDots(RichTextBox rtb)

{

    // Sauvegarder l'état actuel pour revenir à la position initiale

    int initialSelectionStart = rtb.SelectionStart;

    int initialSelectionLength = rtb.SelectionLength;

    // Modèle de point (par exemple, espace suivi d'un tiret)

    string spaceDash = " -";

    // Désactiver le retour à la ligne automatique pour éviter des décalages

    rtb.WordWrap = false;

    // Parcourir chaque ligne dans le RichTextBox

    for (int i = 0; i < rtb.Lines.Length; i++)

    {

        // Obtenir le texte de la ligne actuelle

        string currentLine = rtb.Lines[i];

        // Si la ligne n'est pas vide, traiter

        if (!string.IsNullOrWhiteSpace(currentLine))

        {

            // Sauvegarder la position de départ et de fin de la ligne

            int start = rtb.GetFirstCharIndexFromLine(i);

            int end = start + currentLine.Length;

            // Calculer la largeur du texte ajouté

            float leftWidth = rtb.GetPositionFromCharIndex(end).X - rtb.GetPositionFromCharIndex(start).X;

            // Calculer la largeur totale disponible en prenant en compte les marges

            float totalWidth = rtb.ClientSize.Width - rtb.Margin.Left - rtb.Margin.Right - 10; // 10 pixels de marge supplémentaire

            // Calculer la largeur restante pour les points de suite

            float remainingWidth = totalWidth - leftWidth;

            // S'assurer qu'il reste suffisamment d'espace pour insérer des points

            if (remainingWidth > 0)

            {

                // Calculer le nombre de répétitions de ' -'

                int patternCount = (int)(remainingWidth / TextRenderer.MeasureText(spaceDash, rtb.SelectionFont).Width);

                string dots = new string(' ', patternCount).Replace(" ", spaceDash); // Génère la séquence ' -'

                // Ajouter les points à la ligne

                rtb.Select(start + currentLine.Length, 0); // Se placer à la fin de la ligne

                rtb.SelectedText = dots; // Insérer les espaces et tirets

            }

        }

    }

    // Restaurer la sélection initiale

    rtb.SelectionStart = initialSelectionStart;

    rtb.SelectionLength = initialSelectionLength;

    // Rétablir le retour à la ligne automatique si nécessaire

    rtb.WordWrap = true;

}

Merci.

Microsoft 365 et Office | Installer, entrer des clés, activer | Autres | Autres

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

1 réponse

  1. Anonyme
    2024-09-29T11:53:49+00:00

    Cette réponse a été traduite automatiquement. Par conséquent, il peut y avoir des erreurs grammaticales ou des formulations étranges.

    Bonjour Rachid HCHICHI, Merci d’utiliser les produits Microsoft et de les publier dans la communauté. En ce qui concerne ce problème d’amélioration du code que vous rencontrez.

    Le forum de support produit Microsoft est davantage axé sur la résolution des problèmes liés aux produits Microsoft eux-mêmes. Pour vos questions liées au développement, vous pouvez envisager de consulter Stack Overflow. Les experts peuvent avoir une meilleure compréhension de la façon de résoudre votre problème et vous fournir des conseils professionnels.

    Note: Stack Overflow a quelques directives, telles que l’exigence d’un titre descriptif, d’un énoncé de problème complet et concis et de suffisamment de détails pour reproduire votre problème. Les demandes de fonctionnalités ou les questions trop larges seront considérées comme hors sujet.

    Démenti: Microsoft n’offre aucune garantie, implicite ou autre, et n’est pas responsable des informations ou du support technique que vous recevez des sites à triple lien.

    Nous espérons que si vous contactez le bon service, votre problème sera traité de manière appropriée. Merci de votre compréhension ! Sincères salutationsArthur - MSFT | Spécialiste du support communautaire Microsoft

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire