Partage
  • Partager sur Facebook
  • Partager sur Twitter

C# Prise en charge de la Font dans RichTextBox

Comment faire prendre en charge ma Font dans RichTextBox

    24 mai 2022 à 17:09:55

    Bonjour à tous,

    Je suis bloqué depuis quelques jours avec les changements de Font dans la RichTextBox de mon application de messagerie.

    J'ai crée 2 ComboBox, un pour la Font: 

      private void CmbStyle_SelectedIndexChanged(object sender, EventArgs e)
            {
                RichTextBox1.Font = new Font(CmbStyle.Text, RichTextBox1.Font.Size);
    
            }

    Un autre pour la taille:

     private void CmbSize_SelectedIndexChanged(object sender, EventArgs e)
            {
                RichTextBox1.Font = new Font(RichTextBox1.Font.FontFamily, float.Parse(CmbSize.SelectedItem.ToString()));
                
            }
    

    Puis j'ai ajouté les Items à RichTextBox: 

    private void RichTextBox1_TextChanged(object sender, EventArgs e)
            {
                foreach (FontFamily ff in FontFamily.Families)
                {
                    CmbStyle.Items.Add(ff.Name.ToString());
                    
                }
                
            }

    Jusqu'ici tout va bien, les changements de Font et de Size s'effectuent mais mon probleme est lorsque j'envois un mail(j'utilise MimeKit) ma font n'est pas prise en charge dans le corps du message, je ne comprend pas pourquoi et ce que j'oublie de faire pour cela.

    L'envoi se passe comme cela: 

    MimeMessage mime = new MimeMessage();
    BodyBuilder builder = new BodyBuilder(); 
    mime.From.Add(new MailboxAddress(TxtName.Text, TxtUser.Text)); 
    mime.Subject = TxtSbj.Text; builder.TextBody = RichTextBox1.Text; 
    mime.Body = builder.ToMessageBody(); 
    foreach (string str in LstMail.Items) 
    { 
      mime.To.Add(MailboxAddress.Parse(str)); 
    } 
    client.Send(mime);

    J'ai, bien sur, lu tout ce que je pouvais trouver en rapport avec cela mais sans succés...

    Merci à tous :)

    -
    Edité par Smoky1 29 mai 2022 à 16:21:58

    • Partager sur Facebook
    • Partager sur Twitter
      31 mai 2022 à 1:24:37

      umfred a écrit:

      text tu obtiens le texte, et rtf tu obtiens le text avec son format https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.richtextbox.rtf?view=windowsdesktop-6.0

      Merci pour ta reponse umfred, j'ai bien sur essayé avec rtf comme cela:

      mime.From.Add(new MailboxAddress(TxtName.Text, TxtUser.Text));
                          mime.Subject = TxtSbj.Text;
                          builder.HtmlBody = RichTextBox1.Rtf;

      Mais, dans ce cas, je reçois le corps du mail avec une erreur de format:

      {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1036{\fonttbl{\f0\fnil\fcharset0 Arial Black;}} {\*\generator Riched20 10.0.19041}\viewkind4\uc1 \pard\f0\fs24 Les bulles technologiques \'e9clatent de partout, les valeurs technologiques auraient chut\'e9 de pr\'e8s de 30 % depuis le d\'e9but de l'ann\'e9e\par }

      Je ne comprend pas pourquoi...j'ai aussi suivi ces documentations mais, pareil, sans succés..

      http://www.mimekit.net/docs/html/Creating-Messages.htm

      http://www.mimekit.net/docs/html/M_MimeKit_TextPart__ctor_2.htm

      http://www.mimekit.net/docs/html/T_MimeKit_Text_TextFormat.htm




      -
      Edité par Smoky1 31 mai 2022 à 1:28:22

      • Partager sur Facebook
      • Partager sur Twitter
        31 mai 2022 à 15:40:29

        si je reprends les exemples de tes liens, pas d'utilisation de BodyBuilder, mais directement 

        mime.Body= new TextPart("rtf"){RichTextBox1.Rtf}

        Autre façon (non testé) issu de https://stackoverflow.com/questions/439301/convert-rtf-to-html est de convertir le rtf en html

        private string HTMLFromRtf(string rtfString)
        {
                    Clipboard.SetData(DataFormats.Rtf, rtfString);
                    return Clipboard.GetData(DataFormats.Html);         
        }



        • Partager sur Facebook
        • Partager sur Twitter
          31 mai 2022 à 23:04:30

          umfred a écrit:

          si je reprends les exemples de tes liens, pas d'utilisation de BodyBuilder, mais directement 

          mime.Body= new TextPart("rtf"){RichTextBox1.Rtf}

          Autre façon (non testé) issu de https://stackoverflow.com/questions/439301/convert-rtf-to-html est de convertir le rtf en html

          private string HTMLFromRtf(string rtfString)
          {
                      Clipboard.SetData(DataFormats.Rtf, rtfString);
                      return Clipboard.GetData(DataFormats.Html);         
          }

          La premiére façon avec mime.Body ne fonctionne pas et la seconde me génére une exception mais je viens de trouver la solution grace à ton aide, merci beaucoup :)

          J'ai ajouter le package RtfPipe et j'ai remplacé : 

          builder.HtmlBody = richTextBox1.Rtf;

          par: 

          builder.HtmlBody = RtfPipe.Rtf.ToHtml(RichTextBox1.Rtf);

          et maintenant, la Font et la taille sont bien appliquées!

          https://stackoverflow.com/questions/8988018/convert-rtf-to-html-in-net/59572912#59572912

          Encore merci pour ton aide précieuse Umfred ;)

          -
          Edité par Smoky1 1 juin 2022 à 0:27:23

          • Partager sur Facebook
          • Partager sur Twitter

          C# Prise en charge de la Font dans RichTextBox

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown