DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Resourceにエスケープ文字を含める方法

環境/言語:[C#、.NET FX 1.1]
分類:[.NET]

2005/11/17(Thu) 18:53:47 編集(投稿者)

Zolgear と申します。

Visual Studio のサンプルにあるResEditorを使って、*.resources を作成しています。
ResourceManager のGetStringメソッドで文字列を取得していますが、
この文字列に、エスケープ文字(例えば \n)を含めても、ただの文字列になってしまいます。

ResourceManager の GetString で取得した文字列は、
逐語的文字列リテラル(@)になってしまうのでしょうか?

そもそも、Resourceにエスケープ文字を含めるのが間違っているのでしょうか?
# すると、ResEditor を改行入力できるように改造する必要が出てしまう…。

http://dobon.net/vb/dotnet/programing/resourcemanager.html を参考にしました。
> # すると、ResEditor を改行入力できるように改造する必要が出てしまう…。

たぶんその通りではないかと思います。

または、保存する直前に\nを改行に置換するように改造する方法もあるかもしれません。ちょっと調べてみましたが、ResHolderクラスのWriteResourcesメソッドで保存しているようなので、ここでp.ResourceValueの値をいじってみたらいかがでしょうか。
■No13773に返信(管理人さんの記事)
>># すると、ResEditor を改行入力できるように改造する必要が出てしまう…。
>
> たぶんその通りではないかと思います。
>
> または、保存する直前に\nを改行に置換するように改造する方法もあるかもしれません。ちょっと調べてみましたが、ResHolderクラスのWriteResourcesメソッドで保存しているようなので、ここでp.ResourceValueの値をいじってみたらいかがでしょうか。

ありがとうございます。参考になりました。

置換でもOKでしたが、GUIなんだから改行を入力できるようにするべきかと考え、
改造する事にしました。(サンプルだけあって、単純な作りだったので)


まず、MultilineをtrueにしたTextBoxと、Button を適当に配置しました。

TextBox へカレントの行の値を表示させるようにカスタマイズします。
private void propertyGridResources_SelectedGridItemChanged(object sender, System.Windows.Forms.SelectedGridItemChangedEventArgs e)
{
currentResHolder.IsDirty = true;

textBoxRename.Text = e.NewSelection.Label;
txtEdit.Text = e.NewSelection.Value as string;
}

Buttonのクリックで、PropertyGridへ文字列を設定します。
private void buttonEdit_Click(object sender, System.EventArgs e)
{
if (propertyGridResources.SelectedGridItem != null)
{
try
{
ResourceDescriptor rd = (ResourceDescriptor)propertyGridResources.SelectedGridItem.PropertyDescriptor;
if (rd.PropertyType == typeof(string))
rd.SetValue(this, txtEdit.Text);
}
...
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板