VB2010のユーザコントロールでプロパティの初期値を設定できない問題について

このQ&Aのポイント
  • Windows7、VB2010 Expressで開発している際に、ユーザコントロールでテキストボックスの初期値を設定しようとしても反映されない問題が発生しています。
  • プロパティの設定方法に関わらず、Boolean型の場合は「False」、Integer型の場合は「0」になってしまいます。
  • 改行しても変化がなく、適切な初期値を設定する方法はあるのでしょうか。ご教示いただければ幸いです。
回答を見る
  • ベストアンサー

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」になってしまいます また、初期化~プロパティ宣言間に、改行しても改行しなくても結果は同じです どうにか設定できる方法はありますでしょうか よろしくお願いします

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

  • ベストアンサー
回答No.2

>デフォルト値というのは「作ったコントロールをフォームのデザイナで貼り付けて、何もプロパティを変更してない場合に入っている値」 >という解釈であっていますでしょうか 一般的にはそいういうことだと思いますが、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 ( 規定値と一致 ) にすると通常のフォントになります。

kapibaraPG
質問者

お礼

解答ありがとうございます 理解しました! プロパティの、最初の値から変えるとフォントが太くなりますが<DefaultValue>はその規定値の設定だったのですね <DefaultValue(1)> で、private XX = 1 とすると値は「1」で普通のフォント、 <DefaultValue(1)> で、Private XX = 2 とすると値は「2」で太字 になるんですね ありがとうございました

その他の回答 (1)

回答No.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 と書いて,初期化をしてください。

kapibaraPG
質問者

お礼

すいません 理解できました 変数宣言の初期値設定もしくはコンストラクタによる初期値設定で、最初に入る値が入るのですね 勘違いをしていました; ありがとうございました!

kapibaraPG
質問者

補足

解答ありがとうございます コンストラクタで設定したところ、思い通りに値が入りました! すいません 私の説明不足+日本語不足なのですが・・・ デフォルト値というのは「作ったコントロールをフォームのデザイナで貼り付けて、何もプロパティを変更してない場合に入っている値」 という解釈であっていますでしょうか ここを見た感じだとそのように感じます http://www.sophia-it.com/content/%E6%97%A2%E5%AE%9A%E5%80%A4 私のやりたいことがまさにそれです 共通処理でテキストボックスを作り、それを各画面で貼り付け、変更もせずに最初に入っている値を設定したいのですができないです なので初期値ではなく、「デフォルト値に値が入らない」ですね・・・ 重ね重ね申し訳ありません

関連するQ&A

  • ユーザーコントロールについて

    プロパティを作成し初期値の設定を行いたいのですが、 なかなか思うようにいきません。 Private mDblMaxValue As Double <System.ComponentModel.DefaultValue(99999999)> Public Property MaxValue() As Double Get Return mDblMaxValue End Get Set(ByVal Value As Double) mDblMaxValue = Value End Set End Property デザイン時に99999999を初期値として設定したいのですが…なぜか0になってしまいます。 助けてください。お願いいたします。

  • ユーザーコントロールに選択プロパティを出す?

    VB.NET2005のWEBユーザーコントロールでプロパティを作り、それをコントロールを配置したときのプロパティウィンドウから選択させたいのですが、書籍やネット等を調べてもわかりませんでした。。。現状のソースは Public Property TEST() As String Get Return "" End Get Set(ByVal value As String) if value = 1 then me.close end if End Set End Property です。 これでプロパティウィンドウにTESTという項目はでますが、値を入力しないといけません。よくあるBackColorのプロパティのようにリストから選択できるようにしたいのですがどうしたらいいでしょうか? それともカスタムコントロールでないとできないのでしょうか?

  • プロパティについて

    長年他の言語をやってきまして、VB.NETでピンと来ていない点があります。どなたかご教授ください。 あるクラスのプロパティとセッターゲッターについて2通りの 書き方ができると思っています。 以下の1、2の違いはありますでしょうか?入門書やネット上を検索 すると1の例で記述されますが、経験上2のような書き方をしてしまうため気になっております。 1. Private _hoge As Integer = 0 Public Property Hoge() As Integer  Get   Return _hoge  End Get  Set(ByVal Value)   _hoge = Value  End Set End Property 2. Private _hoge As Integer = 0 Public Function getHoge() As Integer  Return _hoge End Function Public Sub setHoge(ByVal val As Integr)  _hoge = val End Sub

  • このプログラムの問題点を教えてください。

    Public Cass test1 Private mBool As Boolean <Browsable(False)> _ Public Property Bool() As Boolean Get Return mBool End Get Set(ByVal value As Boolean) mBool = value End Set End Property Private GetNo(ByVal No As Integer, ByVal count As Integer) As Integer Dim intNewNo As Integer = 0 If (No + count) > 99999 Then mBool = True Else mBool = False inNewNo = No + count End If Return intNewNo End Function ※このプロパティを別のクラスで使用しました。 Public Class test2 Public sub Handan() Dim Han As test1 = New test1 If Han.Bool = True Then MsgBox("Yes") Else MsgBox("No") End If End Sub 多少端折りましたが、以上のようなプログラムを書きました。 Getnoメソッドは、test2クラスの別のメソッドで使われていたのですが、 Getnoの値によって処理を変えたかっただめ、test1にプロパティを作って 判断できるようにしました。 このコードをレビューしてもらったところ、なにか問題があったようなのですが (プロパティの意味がないとか、そういう趣旨の) レビューした本人と連絡がとれないため、どこがおかしいのかわからず困っています。 このBoolプロパティの使い方、問題がありましたら、教えてください。

  • プロパティのアクセス修飾子

    オート・インプリメント・プロパティで、 Property Prop2 As String = "Empty" と書いた場合の、Propertyのアクセス修飾子はPublicになるのでしょうか? あるVBの記述で、 Private CurrentValue As Integer Private Property Current As Integer Get Return CurrentValue End Get Set(ByVal value As Integer) CurrentValue = value    その他諸々の記述   End Set End Property というのがあるのですが、外部から、 Current += 1 などのようにアクセスしています。 この場合、Property Current As Integer のアクセス修飾子がPrivateになっているのですが、 Public とした場合と何が違うのでしょうか? ちなみに両方でやってみましたが、動作は変わりませんでした。 御経験のある方、御教示願えたらと思います。

  • VB.NET 自作プロパティが変更されたらイベント

    お世話になります。 ご回答宜しくお願いします。 現在VBでDLLプログラムを開発しております。 以下簡単な仕様です。 DLLで自作のプロパティ( SelectedFlg )と、 SelectedFlgが変更された時に発生するイベントを追加しました。 親システムからVBのDLLを呼び出し、親システムがSelectedFlgの値を変更すると DLL内でイベントを感知し、処理をするというような感じです。 例えば、親システムへDLLをパネルとして2つ( A , B )貼り付け Aをクリックすると、AのSelectedFlgをTrueに、BのSelectedFlgをFalseにして Trueの方はBackColorを赤、Falseの方はBackColorを白 のような形にしたいと考えてます。 しかし、実行してみると BackColorが反映されるのは、初期値を設定した時の1度のみでした。 その後クリックしても、BackColorが変化することはありません。 どこか間違いや思い違いがあるんでしょうか。 以下コードになります。  ・・・OriginalControlクラス・・・ Public Class OriginalControl   Public Event SelectedValueChanged(ByVal sender As Object, ByVal e As EventArgs)   Protected Sub OnSelectedValueChanged(ByVal e As EventArgs)     RaiseEvent SelectedValueChanged(Me, e)   End Sub   Public Property SelectedFlg() As Boolean     Get       Return m_SelectedFlg     End Get     Set(ByVal value As Boolean)       m_SelectedFlg = value       Me.OnSelectedValueChanged(New EventArgs)     End Set   End Property   Private m_SelectedFlg As Boolean End Class ・・・Panel・・・ OriginalControlクラスを継承したControl ( 省略 )     Private Sub Panel_SelectedValueChanged(ByVal sender As System.Object,                               ByVal e As System.EventArgs)                               Handles MyBase.SelectedValueChanged       If Me.SelectedFlg = True Then         setBackColor( Color.Red )       Else         setBackColor( Color.White )       End If     End Sub

  • プロパティープロシージャーについて

    簡単な年齢計算プログラムです。 書籍のサンプルなのでうまく動いています。 クラスの変数がPrivate strnameだったりするので そこへアクセスするためにプロパティプロシージャーを使っているというところまでは 判ったような気がしますが、 getとsetの関係がわかりません。 まず、 1.何をGetしているのか 2.なぜGetが先に来るのか、 3.Setの前にGetのReturnで返してますが実態は何を返しているのでしょうか?普通に考えると逆のような気がします。 根本がわかっていないのだと思いますが、どなたかお教え願います。 呼ぶ方 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim person As New Class1() person.Name = TextBox1.Text person.Birthday = DateTimePicker1.Value.Date MessageBox.Show(person.Name & "さんの年齢は" & person.GetAge()) End Sub クラスの方。 Public Class Class1 Private strname As String Private datBirthday As Date Public Property Name() As String Get Return strname End Get Set(ByVal pro_name As String) strname = pro_name End Set End Property Public Property Birthday() As Date Get Return datBirthday End Get Set(ByVal pro_birthday As Date) datBirthday = pro_birthday End Set End Property Public Function GetAge() As Integer Return Int(DateTime.Today.Subtract(Birthday).Days / 365.25) End Function End Class

  • コントロールにイベントを発生させるには?

    VB.NET2005のWEBユーザーコントロールで下記のようにプロパティやメソッドをつくることはできたのですが、コンボボックスの選択がへんこうされたとか、テキストボックスの内容が変更されたとかのイベントをとることができません。いったいどうすればできるのでしょうか? Public Property TEST() As String Get Return "" End Get Set(ByVal value As String) _Test=value End Set End Property

  • VB.NETで出来てC#で出来ない???

    VB.NETでは出来るのにC#で同じようにするやり方がわからなくて困っています。 VSのバージョンは2008です。 やりたいことは 『param.Item("AAA") = "111"』 このように書けるクラスを作りたいのですが、 VBで出来てC#では出来ないのでしょうか? イメージとしてはプロパティにメソッドをくっつけたようなクラス? C#ではこのように書くとエラーになります。 どのようにしたらいいでしょうか? public string Item(string Key) {  set { _param[Key] = value; } } VB Dim param As New Param() param.Item("AAA") = "111" ----Paramクラス---- Imports System.Text Public Class Param Private _Hash As New Hashtable Default Public Property Item(ByVal Key As String) As String Get Return _Hash(Key) End Get Set(ByVal value As String) _Hash(Key) = value End Set End Property End Class ---------

  • クラスに配列を渡す方法

    こんにちは、VB.NET初心者です。 メインプログラムからクラスに配列を渡したいのですが、どうやって渡せばいいのかわかりません。 一応、いろいろなサイトやMSDNを覗いたのですが、よく分かりませんでした。 よろしければ、教えてください。環境はVB2005です。 下記のは現在書いているソースなのですが、この場合エラーがでます。 メインプログラム Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click  Dim abc() as integer  ’配列に何かを入れる処理を記述  ’何個の要素が入るかはわかりません。通るときによって変わります。  Dim 123 As New clsAAA  123.ABC = abc  123.処理1() End Sub clsAAA Private pABC() As Integer Public Property ABC() As Integer  Get   Return pABC  End Get   Set(ByVal value As Integer)   pABC = value  End Set End Property