web-dev-qa-db-fra.com

La nouvelle ligne ne fonctionne pas dans MessageBox en C #/WPF

Petite question: mes ressources contiennent une chaîne: "Ceci est ma chaîne de test {0}\n\nTest"

J'essaie d'afficher cette chaîne dans ma boîte aux lettres:

MessageBox.Show(String.Format(Properties.Resources.About, 
    Constants.VERSION), 
    Properties.Resources.About_Title, MessageBoxButton.OK, 
    MessageBoxImage.Information);

Cependant, je ne reçois pas de nouvelles lignes. Les\n apparaissent toujours en tant que caractères, pas en tant que nouvelles lignes.

J'ai également essayé d'utiliser une solution de contournement telle que mystring.Replace ("\ n", Environment.NewLine), mais cela ne change rien non plus.

Qu'est-ce que je fais mal?

Edit: chose amusante à mentionner: remplacer ("\ n", "quelque chose de différent") ne change rien. 

Edit2: Maj + Entrée dans mon fichier de ressources au lieu de\n semble fonctionner ... Un comportement étrange quand même

14
Frame91

Placez un paramètre fictif à l'endroit où vous souhaitez insérer une nouvelle ligne et dans le code où vous utilisez cette chaîne de ressource, remplacez-la simplement par la nouvelle ligne: chaîne ressource: "Ceci est la première ligne. {0} Ceci est la deuxième ligne. {0} This est la troisième ligne. " Vous utiliserez cette chaîne de ressources comme suit: MessageBox.Show (string.Format (MyStringResourceClass.MyStringPropertyName, Environment.NewLine));

OR

Méthode non conventionnelle Mais je viens juste de le faire fonctionner en copiant newline à partir de Word directement (ou de tout autre endroit) et en le collant dans le fichier de chaîne de ressources.

It was simple..
OR

Les caractères\r\n sont convertis en nouvelle ligne lorsque vous les affichez à l'aide d'une boîte de message ou que vous les affectez à une zone de texte ou à chaque fois que vous l'utilisez dans l'interface.

En C # (comme la plupart des langages dérivés du C), les caractères d'échappement sont utilisés pour désigner des caractères spéciaux tels que return et tab, et + à la place de & pour la concaténation de chaînes.

Pour que votre code fonctionne sous C #, vous avez deux options ... la première consiste simplement à remplacer NewLine par le caractère d'échappement de retour\n ala:

MessageBox.Show("this is first line" + "\n" + "this is second line");

L’autre méthode, et la plus correcte, consiste à la remplacer par Environment.NewLine qui, en théorie, pourrait changer en fonction du système que vous utilisez (bien que cela soit peu probable).

MessageBox.Show("this is first line" + Environment.NewLine + "this is second line");
21
Arjun Chaudhary

Dans l'éditeur de ressources, séparez le contenu de votre chaîne à l'aide de la combinaison de touches Maj + Entrée. Sinon, éditez votre fichier ResX dans l’éditeur xml et utilisez la touche Entrée pour créer une nouvelle ligne pour votre chaîne de ressources.

Reportez-vous à ce lien pour plus d'informations: Retour chariot/ligne dans le fichier ResX.

6
petchirajan

Essaye ça:

    String outputMessage = string.Format("Line 1{0}Line 2{0}Line 3", Environment.NewLine);
    MessageBox.Show(outputMessage);

Un autre exemple avec une autre variable:

    String anotherValue = "Line 4";
    String outputMessage = string.Format("Line 1{0}Line 2{0}Line 3{0}{1}", Environment.NewLine, anotherValue);
    MessageBox.Show(outputMessage);
4
Chris

Essaye ça

supprimer les MessageBoxButtons.OK et MessageBoxImage. Information. 

 MessageBox.Show(String.Format(Properties.Resources.About, 
Constants.VERSION), 
Properties.Resources.About_Title);
0
justPassingBy