none
RichTextBox : enregistrer le texte et le format (gras, italique...) RRS feed

  • Question

  • Bonjour,

    Sur une appli WindowForm, je souhaite enregistrer le texte d'une RTB qui a été mis en forme pour ensuite le recupérer avec celle-ci : vers une base SQL est-ce possible, sinon ? Il me semble qu'il faut convertir en Xml ou Xaml le texte.

    J'ai tenté d'exploiter l'exemple de  'Vue d'ensemble d'une RTB dans msdn (http://msdn.microsoft.com/fr-fr/library/aa970779.aspx )mais VB2010 pro/NFW4 ne reconnait pas les espaces de nom > Imports System.Windows.Controls >Imports System.Windows.Documents et d'autres éléments (pourquoi ?), donc bug avec ces lignes de codes. 
      Merci de vos contributions

    jeudi 15 juillet 2010 08:32

Réponses

  • Bonjour,

     

    Pour enregistrer les données d’un RTB dans SQL, il faut garder la propriété Rtf du contrôle dans un blob. Pour enregistrer des champs BLOB avec ADO.NET je vous propose cet article :

    http://support.microsoft.com/kb/309158

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    • Marqué comme réponse Alex Petrescu lundi 19 juillet 2010 08:21
    vendredi 16 juillet 2010 08:22
  • Bonjour,

    la propriété Rtf contient le text ET sa mise en forme : c'est l'interet d'utiliser le format Rtf.

    Par exemple si vous exécutez le code suivant dans une form avec une richtextbox :

    RichTextBox1.Text = "Test mise en forme"
    RichTextBox1.SelectAll()
    RichTextBox1.SelectionFont = New Font("Verdana", 12, FontStyle.Bold)
    Dim rtf As String = RichTextBox1.Rtf
    

    la variable rtf aura pour valeur :

    {\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Verdana;}{\f1\fnil\fcharset0 Microsoft Sans Serif;}}\viewkind4\uc1\pard\lang1036\b\f0\fs24 Test mise en forme\b0\f1\fs17\par}

    Cette valeur contient à la fois le text et la mis en forme. Cette valeur peut être stockée en base.

    Si exécutez le code suivant vous affecter directement cette valeur (qui pourrait provenir de la base de donnée ) :

    RichTextBox1.Rtf = "{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Verdana;}{\f1\fnil\fcharset0 Microsoft Sans Serif;}} " & _
      "\viewkind4\uc1\pard\lang1036\b\f0\fs24 Test mise en forme\b0\f1\fs17\par}"
    

    Cordialement

     

     

     

     

     

     

    • Marqué comme réponse Alex Petrescu lundi 19 juillet 2010 08:21
    vendredi 16 juillet 2010 08:34
    Modérateur

Toutes les réponses

  • Bonjour,

     

    Pour utiliser les espaces de noms System.Windows.Controls et System.Windows.Documents il faut attacher à votre projet la référence PresentationFramework (Project->Add reference->onglet .NET, cherchez PresentationFramework).

     

    Pour le reste de votre message, je ne comprends pas ce que vous essayez de faire. Voulez-vous enregistrer le contenu d’un RTB dans la base de données en gardant le format du texte ?

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

     

    jeudi 15 juillet 2010 12:44
  • Bonjour Alex,

    Merci de votre réponse.

    C'est bien ce que je veux faire : enregistrer le contenu RTB dans une Bdd (ici SQL) en conservant le format du texte.

    (est-ce possible ?)

    Cordialement

    Domi

    jeudi 15 juillet 2010 13:16
  • Bonjour,

    Si vous faites une application Windows Form le controle se situe dans le namespace System.Windows.Forms : system.windows.forms.richtextbox.

    Le lien que vous référencez System.Windows.Controls concerne les applications WPF.

    Dans une application Winform, pour récupérer le le contenu au format rtf de la RichTextBox il suffit de lire la propriété Rtf de l'objet RichTextBox.

    Si il ne s'agit que de text le contenu peut être sauvé dans un champ varchar(max) ou nvarchar(max) par exemple sous sql server.

    Cordialement

     

    jeudi 15 juillet 2010 14:54
    Modérateur
  • Bonsoir Nikho,

    Merci de vos conseils. Au sujet de l'espace de nom je fait maintenant le rapprochement avec WPF.

    En ce qui concerne  la RTB et la base SQL, effectivement, je stocke le texte en varchar(max), mais bien sur, lorsque je requete sql et rappelle le texte dans la RTB, le format n'y est plus (gras, italique... perdu).

    Je pense qu'il faut jouer d'astuce pour stocker le texte avec son format dans la base SQL. D'où une idée éventuelle de convertir le texte avec son format en XML et de stocker le XML dans la base SQL, puisque ce format de champ semble exister. (Mais convertir d'un sens puis de l'autre me semble un très gros travail, sauf s'il existe un convertisseur ou des fonctions apparentées !)

    Qu'en pensez vous ?

    Cordialement

    jeudi 15 juillet 2010 17:10
  • Bonjour,

     

    Pour enregistrer les données d’un RTB dans SQL, il faut garder la propriété Rtf du contrôle dans un blob. Pour enregistrer des champs BLOB avec ADO.NET je vous propose cet article :

    http://support.microsoft.com/kb/309158

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    • Marqué comme réponse Alex Petrescu lundi 19 juillet 2010 08:21
    vendredi 16 juillet 2010 08:22
  • Bonjour,

    la propriété Rtf contient le text ET sa mise en forme : c'est l'interet d'utiliser le format Rtf.

    Par exemple si vous exécutez le code suivant dans une form avec une richtextbox :

    RichTextBox1.Text = "Test mise en forme"
    RichTextBox1.SelectAll()
    RichTextBox1.SelectionFont = New Font("Verdana", 12, FontStyle.Bold)
    Dim rtf As String = RichTextBox1.Rtf
    

    la variable rtf aura pour valeur :

    {\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Verdana;}{\f1\fnil\fcharset0 Microsoft Sans Serif;}}\viewkind4\uc1\pard\lang1036\b\f0\fs24 Test mise en forme\b0\f1\fs17\par}

    Cette valeur contient à la fois le text et la mis en forme. Cette valeur peut être stockée en base.

    Si exécutez le code suivant vous affecter directement cette valeur (qui pourrait provenir de la base de donnée ) :

    RichTextBox1.Rtf = "{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Verdana;}{\f1\fnil\fcharset0 Microsoft Sans Serif;}} " & _
      "\viewkind4\uc1\pard\lang1036\b\f0\fs24 Test mise en forme\b0\f1\fs17\par}"
    

    Cordialement

     

     

     

     

     

     

    • Marqué comme réponse Alex Petrescu lundi 19 juillet 2010 08:21
    vendredi 16 juillet 2010 08:34
    Modérateur
  • Merci de vos informations, je ferai les tests ce WE

    Cordialement

    vendredi 16 juillet 2010 08:38
  • Merci de votre proposition, je ferai les tests ce WE, cela me parait également une solution.

    Cordialement

    vendredi 16 juillet 2010 08:40