- - PR -
ユーザーコントロールの作り方2 (追加したプロパティの値をデフォルトにする方法)
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-06-11 16:42
いつもお世話になっております。
過去スレのユーザーコントロールのプロパティ追加で触れていることなのですが、 デフォルトの値が「Nothing」の場合はデフォルト値になりません。 ShouldSerializeValueメソッドを使ってもなりません。 ControlクラスやStringクラスのデフォルト値を「Nothing」にしたいのですが、 どうしたらいいいのでしょうか? ちなみに、Stringクラスのデフォルト値を 「""」もしくは、「DBNull.Value.ToString」 とした場合はできました。 よろしくお願いします。 | ||||
|
投稿日時: 2004-06-11 17:02
String.EmptyでなくNothingにしたいのはなぜでしょうか?
そもそもクラスにNothingを設定してしまったら PropertyGridから値を設定できなくなってしまいます。 PropertyGridがそのインスタンスをNewしてくれるわけではないので。。。。 | ||||
|
投稿日時: 2004-06-11 17:40
返信ありがとうございます。
Stringクラスについてはどうでも良かったんですが、 Controlクラスのデフォルト値を(なし)にしたいのです。 当然、Control.Emptyなんて便利な値はないもので… よって、Nothingで記述してみたにすぎないので、 他に方法があったら教えてください。 よろしくお願いします。 | ||||
|
投稿日時: 2004-06-12 01:39
Controlクラスとは何でしょうか?
自作したクラスですか? そのクラスをデザイナから編集させたいのなら デフォルト値を自分で決めても問題ないのではないでしょうか。 デザイナで編集させたくないのならBrowsableをFalseにすればいいと思います。 | ||||
|
投稿日時: 2004-06-12 12:16
普通にやっただけで (なし) と Formに存在するコントロールが選択できましたが・・・
<追記> 初期値はコンストラクタでヌルってます。 _Control = null 今試したら以下のコードもつけられました。 [System.ComponentModel.DefaultValue(null)] [ メッセージ編集済み 編集者: えムナウ 編集日時 2004-06-12 15:29 ] | ||||
|
投稿日時: 2004-06-12 15:44
string もいけましたが、一度値を入れて消すと "" で設定されるようです。
| ||||
|
投稿日時: 2004-06-12 15:50
burton999さん、こんにちは。
・Controlもクラスの一つではないのですか? ・プロパティをデザイン時でも設定したいので、「BrowsableをFalse」は駄目なんです。 えムナウさん、こんにちは。 VB.NETでは「null」が使えません。変わりに「Nothing」を使うので… 解決策が無いなら、C#でユーザーコントロールを作った方がいいのでしょうか・・・ 当然、デフォルト設定を行いたいので、 System.ComponentModel.DefaultValueも Private Function ShouldSerializeValueメソッドも 両方試しています。 追記内容かもしれませんが、なぜ、デフォルト値にしたいのかと言いますと、 デザイン画面でこのプロパティが最初から太字になっているのです。 これだと、「InitializeComponent」メソッド内に余計なコードが増えてしまいます。 ユーザーコントロールを貼り付ける数は数個なら気にならない行数でしょうが、 100ぐらいになると、これだけで、100行増えてしまいます。 基本的に、プロパティ値はデザインで行うのではなく、プログラムによって制御しているので、 必要のないプロパティはデフォルトのままにしておきたいのです。 しかし、ユーザーコントロールなので、汎用性があるように作りたい・・・ ということなのです。 なんだか、偉そうな事を述べていますが、良き知恵をお貸しください。 よろしくお願いします。 | ||||
|
投稿日時: 2004-06-12 19:05
C#で簡単にプロパティの部分だけ作ってみましたが、
やはり、デフォルト設定値にnullが使えますね… こんなところで、VBとC#の違いが出てくるとは… |