2012/12/25(Tue) 17:48:54 編集(投稿者)
■No64735 (ドミンゲス さん) に返信
> Public Property ButtonAVisible() As Boolean
> Get
> Return buttonA.Visible
> End Get
> Set(ByVal value As Boolean)
> If buttonA.Visible <> value Then
> buttonA.Visible = value
> End If
> End Set
> End Property
ここでbuttonA.Visibleを使っているのが駄目です。特に条件判定。
Public Class Form1
Public Sub New()
' この呼び出しはデザイナーで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
Button1.Visible = True
Console.WriteLine("New での Button1.Visible = {0}", Button1.Visible)
End Sub
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Console.WriteLine("Form1_Load での Button1.Visible = {0}(設定前)", Button1.Visible)
Button1.Visible = True
Console.WriteLine("Form1_Load での Button1.Visible = {0}(設定後)", Button1.Visible)
End Sub
End Class
このようなプログラムを実行してみて下さい。
そうするとNewでの Button1.Visible はFalseとなるのが分かると思います。
Load前にVisibleを評価すると実際の設定状況に関わらずFalseとなってしまいます。
なので
If buttonA.Visible <> value Then
では
If False <> value Then
と同じことになるのでvalueがtrueでないと状態が変わらないことになってしまいます。
条件判定をいれたいのならPrivate変数などで別途状態を保持するようにした方がよいと思います。
本題と関係ないですが、こういうコントロールを作るときはUserControlにした方がデザインも
出来るので楽です。