IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

C# WPF Conserver la mise en forme


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 3
    Par défaut C# WPF Conserver la mise en forme
    Bonjour,

    Je travaille actuellement sur un programme en C# wpf sur visual studio. Pour résumer dans un premier programme l'utilisateur peut éditer un texte (en mettant des caractères italique, gras...)

    Le 2em programme récupère le fichier ainsi créé et le copie dans une rich texte box via une variable string. Mon problème est qu'au moment de la copie le texte s'affiche bien mais la mise en forme ne se conserve pas.

    Je pense que le problème viens de la variable string, mais malgré mes recherches je n'est rien trouvé permettant de conserver cette mise en forme.

    Si quelqu'un a une idée je le remercie d'avance

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour
    Peux-tu montrer ton code ....

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 3
    Par défaut
    Bonsoir,

    Merci de ton aide voici la partie du code qui gérè l’affichage des caractères. Le but est de créer une nouvel chaine de caractère masquée à partir de la chaine original depuis laquelle on veut conserver la mise en forme. Une autre partie du code va faire exactement l'inverse pour l'afficher en claire.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
     
    private void hideCharacter()
     
            {
     
                totalWord = 0;
     
                discoverWord = 0;
     
     
     
                bool find = false;
     
     
     
                TextRange textRange = new TextRange(textDisplayed_rtb.Document.ContentStart, textDisplayed_rtb.Document.ContentEnd);
     
                string cryptedString = "";
     
                hideText = "";
     
                actualWord = "";
     
     
     
                foreach (Char c in openText) // openText : String contenant le texte du document ouvert précédemment
     
                {
     
                    if ((c >= 32 && c <= 64) || (c >= 91 && c <= 96) || (c >= 123 && c <= 126) || c == '\r' || c == '\n' || c == '«' || c == '»')
     
                    {
     
                        if (!String.IsNullOrEmpty(actualWord))
     
                        {
     
                            // Lors de la détection des caractères suivants : Affichage du texte + Suppresion du caractère.
     
                            if (actualWord.Substring(0, 1).Equals("►") || actualWord.Substring(0, 1).Equals("◄") || actualWord.Substring(0, 1).Equals("▲"))
     
                            {
     
                                if(actualWord.Substring(0, 1).Equals("▲"))
     
                                {
     
                                    actualWord = actualWord.Remove(0, 1);
     
                                    ppw.refused_words_lb.Items.Add(actualWord);
     
                                    actualWord = "";
     
                                    break;
     
                                }
     
                                else if(actualWord.Substring(0, 1).Equals("◄"))
     
                                {
     
                                    actualWord = actualWord.Remove(0, 1);
     
                                    foreach (var listBoxItems in word_discovered_lb.Items)
     
                                    {
     
                                        if (listBoxItems.Equals(actualWord))
     
                                        {
     
                                            find = true;
     
                                            break;
     
                                        }
     
                                    }
     
     
     
                                    if (find == false)
     
                                        word_discovered_lb.Items.Add(actualWord);
     
     
     
                                    acceptedWords();
     
     
     
                                } else
     
                                {
     
                                    actualWord = actualWord.Remove(0, 1);
     
                                    providedWords();
     
                                }
     
     
     
                                cryptedString += actualWord;
     
                                discoverWord++;
     
                            }
     
                            else
     
                            {
     
                                // Si aucun caractère détecté : Le mot est caché.
     
     
     
                                foreach (Char c2 in actualWord)
     
                                    cryptedString += '■';
     
                            }
     
     
     
                            hideText += cryptedString + c.ToString();
     
     
     
                            totalWord++;
     
     
     
                            actualWord = "";
     
                            cryptedString = "";
     
     
     
                            find = false;                       
     
                        }
     
                        else
     
                            hideText += c.ToString(); // Ajout du dernier caractère spécial dans la string hideText qui permet d'afficher le texte dans richTextBox
     
                    }
     
                    else
     
                        actualWord += c.ToString();
     
                }
     
     
     
                textRange.Text = hideText;
     
                number_of_word_find_rn.Text = discoverWord + " / " + totalWord;
     
            }

  4. #4
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    textRange.Save(MemoryStream, DataFormats.Xaml, true) et TextRange.Load(MemoryStream, DataFormats.Xaml) sont tes amis !!!

    code xaml du form exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
     
    <Window x:Class="WpfApplication6.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window1" Height="300" Width="300">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <Button Name="BtnCopy" Margin="10" Content="Copy" Click="BtnCopy_Click"></Button>
                <RichTextBox 
                Grid.Row="1"
                Name="rtbSrc">
                <FlowDocument FontSize="24" FontWeight="Bold" Foreground="DarkBlue"  >
                    <Paragraph Name="ParagraphSrc">
                        <Run>Le but est de créer une nouvel chaine de caractère masquée à partir de la chaine original depuis laquelle on veut conserver la mise en forme. Une autre partie du code va faire exactement l'inverse pour l'afficher en claire</Run>
                    </Paragraph>
                </FlowDocument>
            </RichTextBox>
            <RichTextBox 
                Grid.Row="2"
                Name="rtbDest">
                <FlowDocument FontSize="14" FontWeight="Regular" Foreground="Magenta"  >
                    <Paragraph  Name="ParagraphDest">
                        <Run>Le but n'est pas  ...</Run>
                    </Paragraph>
                </FlowDocument> 
            </RichTextBox>
        </Grid>
    </Window>
    et son code behind .cs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    namespace WpfApplication6
    {
        /// <summary>
        /// Logique d'interaction pour Window1.xaml
        /// </summary>
        public partial class Window1 : Window
        {
            public Window1()
            {
                InitializeComponent();
            }
            private void BtnCopy_Click(object sender, RoutedEventArgs e)
            {
                TextFromRichTextBox();
            }
     
     
            private void TextFromRichTextBox()
            {
     
                TextRange textRangeSrc = new TextRange(
                              ParagraphSrc.ContentStart, ParagraphSrc.ContentEnd);
     
                string backText = textRangeSrc.Text; //sauvegarde texte d'origine
                string hideText = "";
                foreach (Char c in textRangeSrc.Text)
                {
     
                    if (c == 'a' || c == 't' || c == 'h')
                    {
     
                        // Si aucun caractère détecté : Le mot est caché.
     
                        hideText += "■";
     
                    }
                    else
                    {
     
     
     
     
                        hideText += c;
     
     
                    }
     
                }
                textRangeSrc.Text = hideText;
                TextRange textRangeDest = new TextRange(ParagraphDest.ContentStart, ParagraphDest.ContentEnd);
     
     
     
                using (MemoryStream rtfMemoryStream = new MemoryStream())
                {
                    textRangeSrc.Save(rtfMemoryStream, DataFormats.Xaml, true);
                    textRangeDest.Load(rtfMemoryStream, DataFormats.Xaml);
                }
     
                // ne pas oublier de restorer le text d'origine ...qui est ecrase par l'operation 
                // precedente
                textRangeSrc.Text = backText;
     
     
     
     
            }
        }
    }
    bon code...

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 3
    Par défaut
    Bonsoir,

    Je te remercie cette solution marche parfaitement la mise en forme est bien conservée

Discussions similaires

  1. Réponses: 6
    Dernier message: 25/06/2009, 22h22
  2. Réponses: 6
    Dernier message: 05/05/2007, 11h12
  3. Coller en conservant la mise en forme ligne/colonne
    Par lucarno dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/04/2007, 12h52
  4. Réponses: 3
    Dernier message: 29/05/2006, 20h29
  5. Macro Excel: enreg d1 cellule en conservant le mise en forme
    Par repié dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/12/2005, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo