C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: propertyGridで、プロパティ値を日本語表示したい


(過去ログ 18 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■7087 / inTopicNo.1)  propertyGridで、プロパティ値を日本語表示したい
  
□投稿者/ nbmyou (11回)-(2007/08/30(Thu) 10:13:26)

分類:[C#] 

お世話になっております。
初心者のnbmyouと申します。

現在、propertyGridを使用して、設定画面のUIを作成しております。
このpropertyGridは、
簡単にVisualStudioのプロパティのような設定画面が作成できて便利なのですが、
オブジェクトのプロパティをUIで設定できるようにするものなので
基本的に、プロパティ名・プロパティ値(enumのリストなど)とも
わかりやすく日本語表示ができません。
僕は、プロパティ名・値とも(数値以外は)日本語表示したく思っております。

ネットで調べたところ、

「PropertyGridコントロールに表示されるプロパティ名を変更するには?」
http://www.atmarkit.co.jp/fdotnet/dotnettips/291pgridjapan/pgridjapan.html

で、プロパティ名を日本語にする方法は書いてあったので、これを拝借して実現できましたが、
プロパティ値のほうは調べ切れておりません。

具体的には、プロパティ表示の元となる自作クラス内で
+++++++++++++++++++++++++++++++++++
        public enum Animal
        {
            Dog,
            Cat,
            Cow
        }

        private Animal m_animal = Animal.Dog;

        public Animal AnimalKind
        {
            get { return m_animal; }
            set { m_animal= value; }
        }
+++++++++++++++++++++++++++++++++++
と記述してあるとすれば、この
「Dog」「Cat」「Cow」を、
「犬」「猫」「牛」と表示したいということです。

何かお分かりになる方がいらっしゃいましたら、教えていただけるとありがたいです。
また、propertyGridに関する他の情報も何かありましたら、
色々覚えたいと思っているので、よろしくお願いします。



引用返信 編集キー/
■7101 / inTopicNo.2)  Re[1]: propertyGridで、プロパティ値を日本語表示したい
□投稿者/ まきなす (8回)-(2007/08/30(Thu) 11:59:13)
No7087 (nbmyou さん) に返信
こんにちは nbmyou さん

解決にならないかもしれませんが
enum のアイテムを素直に日本語で書くのがよいと思います。
        public enum Animal
        {
            犬,
            猫,
            牛
        }
ですね。
プログラムコード中に日本語が出てくるのに違和感があればつらいですけどね。

引用返信 編集キー/
■7107 / inTopicNo.3)  Re[2]: propertyGridで、プロパティ値を日本語表示したい
□投稿者/ nbmyou (13回)-(2007/08/30(Thu) 12:23:54)
2007/08/30(Thu) 12:24:10 編集(投稿者)
> enum のアイテムを素直に日本語で書くのがよいと思います。
>         public enum Animal
>         {
>             犬,
>             猫,
>             牛
>         }

確かにそうなんですが、あまりよろしくないのかなと思っていました。(根拠はないのですが)
ここでアイテムを日本語を使うことによって、なにかしら問題が発生する可能性は
特にないのでしょうか?ないのであれば、これで行こうかな、とも思います。

他の手段となると、結構面倒くさいことになるのでしょうか。

引用返信 編集キー/
■7113 / inTopicNo.4)  Re[3]: propertyGridで、プロパティ値を日本語表示したい
□投稿者/ Hongliang (178回)-(2007/08/30(Thu) 12:52:37)
Hongliang さんの Web サイト
Animal 列挙体のほうにも TypeConverter 属性を設定します。
使用する TypeConverter は、EnumConverter から派生させた独自のものを指定します。
この独自のコンバータで、ConvertFrom メソッドと ConvertTo メソッドをオーバーライドし(どちらも引数が異なる複数のものがありますが virtual なのはそれぞれ一つだけ)、String との相互変換処理を実装します。
引用返信 編集キー/
■7122 / inTopicNo.5)  Re[4]: propertyGridで、プロパティ値を日本語表示したい
□投稿者/ nbmyou (15回)-(2007/08/30(Thu) 13:46:17)
Hongliang さん

ありがとうございます。

プロパティ名を変更する際には、
「PropertyGridコントロールに表示されるプロパティ名を変更するには?」
のコードまる写しで使ってしまったので、内容をよく理解していませんでした。

が、これと同じような方法で、enumのアイテムもstring変換できるということですね。
イメージとしてだけですが、大体意味は理解できました。

ちょっと勉強しながら、EnumConverter からの派生クラスを作成して、試してみますね。
どうもありがとうございます。
また、報告いたします。
引用返信 編集キー/
■7152 / inTopicNo.6)  Re[4]: propertyGridで、プロパティ値を日本語表示したい
□投稿者/ まきなす (9回)-(2007/08/30(Thu) 20:47:20)
> Animal 列挙体のほうにも TypeConverter 属性を設定します。
> 使用する TypeConverter は、EnumConverter から派生させた独自のものを指定します。
> この独自のコンバータで、ConvertFrom メソッドと ConvertTo メソッドをオーバーライドし(どちらも引数が異なる複数のものがありますが virtual なのはそれぞれ一つだけ)、String との相互変換処理を実装します。

日本語が嫌な場合はこの方法になりますね。

>他の手段となると、結構面倒くさいことになるのでしょうか

上記の方法でできるのですが、これが使用するEnum全てに書かないといけないため
結構面倒くさいことになるのです。

(個人差はありますが)面倒くさくないうまい方法を見つければ教えてください。
引用返信 編集キー/
■7153 / inTopicNo.7)  Re[5]: propertyGridで、プロパティ値を日本語表示したい
□投稿者/ Hongliang (179回)-(2007/08/30(Thu) 22:59:29)
Hongliang さんの Web サイト
> 上記の方法でできるのですが、これが使用するEnum全てに書かないといけないため
> 結構面倒くさいことになるのです。
>
> (個人差はありますが)面倒くさくないうまい方法を見つければ教えてください。

たとえば、「PropertyGridコントロールに表示されるプロパティ名を変更するには?」の記事に倣うとか。
EnumDisplayName 属性を用意して、列挙型の各メンバに設定。
列挙型には EnumConverter を継承した EnumDisplayConverter を TypeConverter 属性に設定。
EnumDisplayConverter の、
ConvertTo: 引数のカスタム属性を取得して EnumDisplayName が設定されていればそれを返す。そうでない場合は基底の処理に任せる。
ConvertFrom: 列挙型の各フィールドのカスタム属性を調べ、変換元文字列が見つかったらそのフィールドのインスタンスを返す。見つからなかったら基底の処理へ。

なんて感じ。

// EnumConverter コンストラクタが Type を引数に要求するから各列挙型ごとに再派生しなきゃならないかと思ったら、引数の Type には暗黙に自身の型を渡してくれるみたい。
引用返信 編集キー/
■7363 / inTopicNo.8)  Re[6]: propertyGridで、プロパティ値を日本語表示したい
□投稿者/ nbmyou (24回)-(2007/09/04(Tue) 16:14:20)
No7153 (Hongliang さん) に返信
> 列挙型には EnumConverter を継承した EnumDisplayConverter を TypeConverter 属性に設定。
属性設定の記述方法がわかりません。

       [TypeConverter(typeof(EnumDisplayConverter))]
       public enum Animal
        {
            [EnumDisplayName("犬")]
            Dog,
            [EnumDisplayName("猫")]
            Cat,
            [EnumDisplayName("牛")]
            Cow
        }

と書いてみたのですが、コンパイル時に
「属性 'EnumDisplayName' は、この種の宣言では無効です。'property, indexer' の宣言でのみ有効です。」
というエラーになってしまいました。

お手数ですがご教授よろしくお願いいたします。

引用返信 編集キー/
■7366 / inTopicNo.9)  Re[7]: propertyGridで、プロパティ値を日本語表示したい
□投稿者/ nbmyou (25回)-(2007/09/04(Tue) 16:24:01)
No7363 (nbmyou さん) に返信
> 「属性 'EnumDisplayName' は、この種の宣言では無効です。'property, indexer' の宣言でのみ有効です。」
> というエラーになってしまいました。

自己レスです。
EnumDisplayNameAttributeを用意した際、
AttributeUsageの記述をコピペしたまま直していなかったため、
AttributeTargetsがPropertyになっていました。

AttributeTargets.Enumにしたところエラーが消えたので、このまま続けて実装を行ってみます。
またわからなくなりましたら質問させていただくかもしれませんが、よろしくお願いいたします。

経過をまた報告させていただきます。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -