- PR -

継承コントロール作成時にプロパティ設定について

投稿者投稿内容
gorisaku
ベテラン
会議室デビュー日: 2004/04/17
投稿数: 95
投稿日時: 2006-04-10 10:10
VS2003(C#)で開発を行っています。
コントロールを継承してカスタムコントロールを作成していますが、
その際にプロパティの初期値設定を行うために
overrideでCreateControlsInstanceにてプロパティの設定を行っています。
現在はその方法で希望の動作ができていますが、
本当にその方法が正しいのかいまいち私の中で信用できません。
皆様は上記の要件の際にはどのような方法を採用されますでしょうか?
ご意見よろしくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-10 10:20
引用:

gorisakuさんの書き込み (2006-04-10 10:10) より:

現在はその方法で希望の動作ができていますが、
本当にその方法が正しいのかいまいち私の中で信用できません。
皆様は上記の要件の際にはどのような方法を採用されますでしょうか?


初期値ならば、コンストラクタですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2006-04-10 11:23
私もこれ知りたい。コンストラクタでポトペタ対応できますか?
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-04-10 17:02
DefaultValueAttribute かな?
http://msdn2.microsoft.com/ja-JP/library/system.componentmodel.defaultvalueattribute(VS.80).aspx
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-10 17:31
「既定値」と「初期値」は別物ですね。
「既定値」であれば、DefaultValue 属性を使用します。

この「既定値」と「初期値」が合致すると、InitializeComponent メソッドで、
その部分のコードが生成されない (プロパティ ウィンドウで太字書体にならない) です。

「初期値」はコンストラクタで、「規定値」はそのプロパティに属性を付与することで決定します。

# 返答先がどちらか明確でなかった為、書き直しました。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-04-10 17:35
引用:

じゃんぬねっとさんの書き込み (2006-04-10 17:31) より:
「既定値」と「初期値」は別物ですね。
「既定値」であれば、DefaultValue 属性を使用します。



すいません、初期値と既定値の区別が付いていませんでした。
既定値は初期値が指定されていなかった場合に使われる値
ってことかな・・・
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-10 17:45
引用:

かるあさんの書き込み (2006-04-10 17:35) より:

すいません、初期値と既定値の区別が付いていませんでした。


すみません、行き違いで書き直した後になってしまいました。

引用:

既定値は初期値が指定されていなかった場合に使われる値ってことかな・・・


「既定値」は InitializeComponent メソッドで書かれるかどうかを決定するという意味での「既定の値」ですね。
日本語って難しいですね... うまく説明できません...

実際に、TextBox を継承してあるプロパティを override して、
DefaultValue 属性を設定してみるとわかりやすいと思います。

コンストラクタで、設定した DefaultValue と同じ値を設定した場合と、
そうでない場合で、Form 側の InitializeComponent メソッドの変化を見てください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-04-10 23:30
引用:

「既定値」は InitializeComponent メソッドで書かれるかどうかを決定するという意味での「既定の値」ですね。


考え方としては逆だと思うんですがどうでしょう。
既定値とは仕様としての値ですよね。
Boolean値のプロパティのヘルプを見るとわかりますが、「既定ではTrueです」などと書かれています。
使うほうが何もしなければその値で振る舞いをおこなうと。
なので、InitializeComponentうんぬんというのはあくまで結果としてのツールの挙動という方向性で考えたほうがよろしいかと。

スキルアップ/キャリアアップ(JOB@IT)