web-dev-qa-db-ja.com

C#/ WPFのメッセージボックスで新しい行が機能しない

短い質問:リソースに文字列があります:「これは私のテスト文字列です{0}\n\nTest」

この文字列をメッセージボックスに表示しようとしています。

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

しかし、私は新しいラインを取得しません。\nは、改行ではなく文字として表示されます。

Mystring.Replace( "\ n"、Environment.NewLine)のような回避策も試してみましたが、これでも何も変わりません。

何が悪いのですか?

編集:おもしろいこと:Replace( "\ n"、 "somethingelse")は何も変更しません。

Edit2:\ nではなく、Resource-FileでShift + Enterが機能するようです...とにかく奇妙な動作

18
Frame91

新しい行を挿入する場所にプレースホルダーを置き、そのリソース文字列を使用するコードで、それを新しい行に置き換えます:string resource: "This is first line。{0} This is second line。{0} This 3行目です。」このリソース文字列は次のように使用します。MessageBox.Show(string.Format(MyStringResourceClass.MyStringPropertyName、Environment.NewLine));

OR

型破りな方法しかし、Wordから直接(または他の場所に)改行をコピーして、リソース文字列ファイル内に貼り付けることで機能します。

It was simple..
OR

\ r\n文字は、メッセージボックスを使用して表示したり、テキストボックスに割り当てたりするとき、またはインターフェイスで使用するときはいつでも、新しい行に変換されます。

C#(ほとんどのC派生言語と同様)では、リターンやタブなどの特殊文字を表すためにエスケープ文字が使用され、文字列連結の&の代わりに+が使用されます。

C#でコードを機能させるには、2つのオプションがあります...最初の方法は、単にNewLineをリターンエスケープ文字に置き換えることです\ n ala:

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

もう1つの方法、より正確な方法は、代わりにEnvironment.NewLineに置き換えることです。これは、使用しているシステムに応じて理論的には変更される可能性があります(ただし、可能性は低いです)。

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

リソースエディターで、shift + enterを使用して文字列コンテンツを分離します。または、xmlエディターでResXファイルを編集し、Enterキーを使用してリソース文字列の新しい行を作成します。

詳細については、このリンクを参照してください: ResXファイルのキャリッジリターン/行

7
petchirajan

これを試して:

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

別の変数を使用した別の例:

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

これを試して

messageBoxButtons.OKおよびMessageBoxImageを削除します。情報。

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