- - PR -
[VB2005] DefaultValue に定数以外を使用したい
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-11-07 20:24
標準の TextBox から継承した UserTextBox コントロールにおいて、BackColor の既定値を My.MySettings.Default.〜 に定義した色(IDEからはアプリケーションの設定で行え、.config ファイルに内容が書かれる)にする、というのは不可能なんでしょうか?
Public Class UserTextBox : Inherits System.Windows.Forms.TextBox <System.ComponentModel.DefaultValue(My.MySettings.Default.TextBoxBackColor)> _ Public Overrides Property BackColor() As System.Drawing.Color Get Return MyBase.BackColor End Get Set(ByVal value As System.Drawing.Color) MyBase.BackColor = value End Set End Property Public Sub New() Me.BackColor = My.MySettings.Default.TextBoxBackColor End Sub End Class とやりたいところなんですが、当然ながら My.MySettings.Default.TextBoxBackColor が定数でないためダメになってしまいます。 My.MySettings.Default.TextBoxBackColor に相当する色をプログラム内に定数で書くことには抵抗あります。 System.ComponentModel.DefaultValue 〜 を書かないと、案の定コントロールを張った先で Me.UserTextBox.BackColor = 〜 とコードが出来てしまいます。 貼った先で BackColor を My.MySettings.Default.TextBoxBackColor に Binding すれば結果的に所望の動作はするのですが、何となく美しくありません。 何か良い手はないでしょうか。 | ||||
|
投稿日時: 2007-11-07 21:04
configファイルに設定する方法は、自力でがんばるしかないと思います。
初期値のほうは、C#の場合であれば以下のような書き方が可能です。 [DefaultValue(typeof(Color),"Red")] インタフェースは同じだと思いますので、VB.NETででも同じような書き方が出来るのではないでしょうか? | ||||
|
投稿日時: 2007-11-07 21:09
これだと、config ファイルの値が Red の時は所望の動作をしてくれるんですが、Red 以外に変更したら DefaultValue の中身も一緒に変えてあげないいけなくなります。 忘れるとコントロールを貼った先で美しくないコードが生成されてしまうんです。 | ||||
|
投稿日時: 2007-11-07 21:24
configで「型の属性」を変えることが出来たとして
その場合、「型のバージョン」はどうなるのでしょうか? そういう意味ではこばさんの言われていることは矛盾しています。 DefaultValueはコード生成というレベルの話でありコンパイル以降は意味がありません。 また、外部ファイルに値を出したということはインスタンスに対して代入行為が必要だという事実が生まれます。 それからすると書かれたようにコンストラクタで代入だけで十分なのではないでしょうか。 この相反する二つの事柄を踏まえて、結局何が実現されればいいのかをまずはっきりさせたほうがよいかと思います。 | ||||
|
投稿日時: 2007-11-07 21:38
そうですね。型の問題もありました。 最終的にやりたいことは、TextBox から継承して作った UserTextBox において、BackColor を config ファイルで設定した値にしたい、ということです。 最初の頃は config ファイルにて TextBoxBackColor = Color.Red と定義してあったとして、途中から Color.Green に変更する、更に納品直前になって Color.Yellow に変更するかもしれない、そういうことを想定したいのです。 Case.1 / DefaultValue を設定しない場合 Config ファイル値が Color.Red のときにデザインしたフォームには UserTextBox.BackColor = Color.Red のコードが生成されてしまいます。 Case.2 / DefaultValue を設定した場合 Config ファイル値の変更にあわせて DefaultValue の中もメンテしないと Case.1 と同じようなことがおきます。 元の UserTextBox の BackColor を config ファイルの値に Binding した場合でも、UserTextBox を貼った先では DefaultValue と異なる場合にはコードが生成されてしまいます。 「そこまで求めるな」的な質問なのかもしれませんが・・・ | ||||
|
投稿日時: 2007-11-07 21:46
型として決定できないのであれば、 コンストラクタのInitializeComponent以降で代入するしかないと思います。 ただし、利用する側のデザインでのプロパティ設定は意味がなくなります。 その場合利用する側のコードで設定することになります。 このことから利用者が個別に設定する場合はどうするの?ということも考慮点の一つですね。 | ||||
|
投稿日時: 2007-11-07 21:49
default を、「省略時解釈」と訳すから、混乱するのではないでしょうか。
「やるべきことをやっていないときに、どうやってごまかそうか」と訳せば、そもそも「指定していないことがおかしい」とならないでしょうか。 # 金融関係の人に「デフォルトで」なんて言ったらダメですよ。 > 「そこまで求めるな」的な質問なのかもしれませんが・・・ そう思います。 | ||||
|
投稿日時: 2007-11-08 00:41
まあムリですし、私も大反対ですね。 DefaultValueAttribute に "そこまで求めるな" というより、求めているものがお門違いだと思います。 初期値ではなくて既定値ですから。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1|2|3
次のページへ»