- - PR -
System.ComponentModel.DefaultValueについて
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-27 10:51
いつも、お世話になっております。 現在、Vb.net2003にてWindowsアプリの開発を行っております。 現在Windows.Forms.Labelを継承した派生コントロールを作成し、下記のような追加プロパティを定義しております。 ------------------------------------------------------------------------------ Private _test As Integer <System.ComponentModel.DefaultValue(UseModeKind.Normal)> _ Public Property test() As UseModeKind Get Return _test End Get Set(ByVal Value As UseModeKind) _test = Value End Set End Property #Region " 列挙体" Public Enum UseModeKind As Integer Normal = 0 FieldNameLabel = 1 End Enum #End Region ------------------------------------------------------------------------------ そこで、質問なのですが、上記プロパティでは確かに「<System.ComponentModel.DefaultValue(UseModeKind.Normal)> 」を宣言しているのですが、どうしてもInitializeComponent メソッド内で初期化されるコードが記述されてしまいます。 ちなみに、プロパティの型を列挙体(Enum)で無くした所、初期化コードは記述されませんでした。 上記のようにプロパティの型を列挙体(Enum)にすると、初期化コードは必ず記述されてしまうものなのでしょうか? それとも、その他原因が考えられるのでしょうか? どうか、よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2006-12-27 11:20
そもそも、この書き方ですと、プロパティ ウィンドウの該当のプロパティで、 [リセット] する時に IDE から変換できないと叱られてしまいませんか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-12-27 11:28
早速のご返答ありがとうございます。 [リセット] といった行為がよくわかっていないのですが、 デザイナ画面のプロパティウィンドウで、値をBackSpace等にて消すといった行為という認識でよろしかったでしょうか? | ||||||||||||||||
|
投稿日時: 2006-12-27 11:42
System.Component.DefaultValue 属性の存在意義について理解されていますか? DefaultValue 属性は、ビジュアル デザイナを助けるために存在しています。 そして、[リセット] はビジュアル デザイナの機能です。
該当のプロパティに対して 「コンテキスト メニュー」 を表示させてみてください。 ここで [リセット] したプロパティは、コード ジェネレータによって、 初期化用のメソッド (InitializeComponent メソッド) から記述が削除されます。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-12-27 11:58
返答ありがとうございます。
知識が乏しくご迷惑をお掛けしております。
確かに、追加したプロパティに関してはリセットがグレイアウトになっていて出来ませんでした。 当方の思いとしてはTextAlignプロパティのように、選択式でリセットできるような プロパティにしたかったのですが、そのようなプロパティの作成にはロジック不足だと言う事でしょうか? | ||||||||||||||||
|
投稿日時: 2006-12-27 12:11
グレーアウトになっているというのは、私の予想に反していますね。 値を一旦、Normal 以外に変えて実行してみてください。
これに関しては、本題とは別のお話です。 列挙体を使用していれば DropDownList による選択で値を選ぶことができますが、 TextAlign プロパティのような独自のビジュアルつきとなると、本題からそれます。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-12-27 13:00
たびたびの、ご返信ありがとうございます。
Normal以外でも、リセットがグレイアウトとなっていました。
すみません、TextAlignまでは言いすぎました。 ビジュアルは不要です。選択式となってなっていればOKです。 本題として、列挙体の場合、初期化コードには必ず記述されてしまうのでしょうか? もう少し、調査してみます。 | ||||||||||||||||
|
投稿日時: 2006-12-27 13:11
おそらくですが、
ここが原因かと思われます。 ダメですよ... これでは... プロパティの Getter と Setter でも、暗黙の型変換が発生していますし... _test の '型' をプロパティの戻り値の型に合わせてあげてください。
これに関しては、DefaultValue 属性の書き方が悪いと思います。 とりあえず、
あたりで試してみてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |