こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VB2010 のユーザコントロールのプロパティ

お世話になっております
Windows7、VB2010 Expless で開発しております
後にVS2010のVBに移行する予定です

ユーザコントロールでテキストボックスを作っております
そこで、初期値を設定しようと思い設定をしたのですが反映されません

Imports System.ComponentModel

<DefaultValue(True)>
Public Property Chk_Num() As Boolean
Set(ByVal value As Boolean)
If (value = True) Then
blnChk_Num = value
Else
blnChk_Num = value
End If
End Set
Get
Return blnChk_Num
End Get
End Property

<System.ComponentModel.DefaultValueAttribute(1)> Public Property Chk_ZenHankaku() As Integer
Set(ByVal value As Integer)
If (value >= 0 And value <= 2) Then
'0以上2以下
blnChk_ZenHankaku = value
Else
'マイナス、または3以上の場合は0にする
blnChk_ZenHankaku = 0
End If
End Set
Get
Return blnChk_ZenHankaku
End Get

End Property


どちらの方法でも、Booleanの場合は「False」、Integerの場合は「0」になってしまいます
また、初期化~プロパティ宣言間に、改行しても改行しなくても結果は同じです

どうにか設定できる方法はありますでしょうか
よろしくお願いします

投稿日時 - 2011-05-09 18:00:31

QNo.6725653

困ってます

質問者が選んだベストアンサー

>デフォルト値というのは「作ったコントロールをフォームのデザイナで貼り付けて、何もプロパティを変更してない場合に入っている値」
>という解釈であっていますでしょうか

一般的にはそいういうことだと思いますが、DefaultValueAttribute クラスで指定されるのは別の意味のようです。

Private mChk_Num As Boolean = True

<DefaultValue(False)> _
Public Property Chk_Num() As Boolean
Get
Return mChk_Num
End Get
Set(ByVal value As Boolean)
mChk_Num = value
End Set
End Property

とした場合、フォームにコントロールを貼り付けたときの値( 初期値 ) は True です。
デザイン画面でプロパティを見たとき、プロパティの値≠規定値(False) の場合、プロパティの値がボールドになります。

プロパティの値を False ( 規定値と一致 ) にすると通常のフォントになります。

投稿日時 - 2011-05-10 00:26:50

お礼

解答ありがとうございます

理解しました!
プロパティの、最初の値から変えるとフォントが太くなりますが<DefaultValue>はその規定値の設定だったのですね

<DefaultValue(1)> で、private XX = 1
とすると値は「1」で普通のフォント、
<DefaultValue(1)> で、Private XX = 2
とすると値は「2」で太字

になるんですね
ありがとうございました

投稿日時 - 2011-05-10 09:25:31

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

DefaultValue属性は,デザイナにデフォルト値を教えるものであって,
初期値を与える代替になる物ではありません。

MSDN: defaultValueAttribute クラス (System.ComponentModel)
http://msdn.microsoft.com/ja-jp/library/system.componentmodel.defaultvalueattribute(v=VS.100).aspx
にも,その旨が書かれています。


コンストラクタで,
blnChk_Num = True
blnChk_ZenHankaku = 1
と書いて,初期化をしてください。

投稿日時 - 2011-05-09 18:22:43

補足

解答ありがとうございます
コンストラクタで設定したところ、思い通りに値が入りました!

すいません
私の説明不足+日本語不足なのですが・・・

デフォルト値というのは「作ったコントロールをフォームのデザイナで貼り付けて、何もプロパティを変更してない場合に入っている値」
という解釈であっていますでしょうか
ここを見た感じだとそのように感じます
http://www.sophia-it.com/content/%E6%97%A2%E5%AE%9A%E5%80%A4

私のやりたいことがまさにそれです
共通処理でテキストボックスを作り、それを各画面で貼り付け、変更もせずに最初に入っている値を設定したいのですができないです

なので初期値ではなく、「デフォルト値に値が入らない」ですね・・・

重ね重ね申し訳ありません

投稿日時 - 2011-05-09 18:41:32

お礼

すいません
理解できました

変数宣言の初期値設定もしくはコンストラクタによる初期値設定で、最初に入る値が入るのですね
勘違いをしていました;

ありがとうございました!

投稿日時 - 2011-05-10 09:27:19

あなたにオススメの質問