4

以下のサブルーチンは、マウス クリックを使用して呼び出されると、コントロールを正常に作成してから削除します。しかし、それは二度と作成しません。ラベルが公開されなくなったためだと思います。つまりDim lblDebug1 As New Label、フォームの変数セクションの一番上にあります。ただしDim lblDebug1 As New Label、サブルーチンを挿入すると、破棄リクエストが機能しません。コントロールの作成と破棄を続けることができる方法はありますか?

以下のサブでbooleanDebugは、作成と破棄を切り替えるために使用されます。よろしくお願いします。

Dim lblDebug1 As New Label

booleanDebug = Not booleanDebug
  If booleanDebug Then
      Me.Controls.Add(lblDebug1)
      lblDebug1.BackColor = Color.BlueViolet
  Else
      lblDebug1.Dispose()
  End If
4

2 に答える 2

3

ラベルにグローバル コンテキストがあることを確認します。それを所有するフォーム内で、適切なサイズと座標の情報と可視性がすべて設定されていること。

これが私のために働いたサンプルコードです。最初に新しい Windows フォームを作成し、フォームの中央にボタン コントロールを追加してから、次のコードを使用します。

Public Class Main
Private labelDemo As Windows.Forms.Label

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Me.SuspendLayout()

    If labelDemo Is Nothing Then

        labelDemo = New Windows.Forms.Label
        labelDemo.Name = "label"
        labelDemo.Text = "You Click the Button"
        labelDemo.AutoSize = True
        labelDemo.Left = 0
        labelDemo.Top = 0
        labelDemo.BackColor = Drawing.Color.Violet
        Me.Controls.Add(labelDemo)

    Else
        Me.Controls.Remove(labelDemo)
        labelDemo = Nothing
    End If

    Me.ResumeLayout()

End Sub
End Class
于 2013-09-18T00:04:40.903 に答える
1

コントロールを破棄すると、それ以上使用できなくなります。ここには 2 つの選択肢があります。

選択肢 1:コントロールを破棄するのではなく、フォームから削除するだけです。

'Top of the file
Dim lblDebug1 As New Label

'Button click
booleanDebug = Not booleanDebug
If booleanDebug Then 
    lblDebug1.BackColor = Color.BlueViolet
    Me.Controls.Add(lblDebug1)       
Else
    Me.Controls.Remove(lblDebug1)
End If

選択肢 2:毎回新しいコントロール オブジェクトを作成する

'Top of the file
Dim lblDebug1 As Label
'               ^   No "New". 
'We just want an object reference we can share at this point, no need for an instance yet

'Button click
booleanDebug = Not booleanDebug
If booleanDebug Then
    lblDebug1 = New Label()
    lblDebug1.BackColor = Color.BlueViolet
    Me.Controls.Add(lblDebug1)
Else
    lblDebug1.Dispose()
End If
于 2013-09-20T21:17:13.463 に答える