4

カスタム UserControl i Vb.net (Windows アプリケーション) を作成しました。

これをフォームに動的に追加するにはどうすればよいですか?

4

5 に答える 5

14

UserControl は、本質的に単なる別のクラスです。これは Control から継承されるため、コントロールで行うあらゆる種類の操作を行うことができますが、それ以外は単なるクラスです。したがって、フォームにユーザーコントロールを動的に追加するには、次のようにします。

  1. コントロールの新しいインスタンスを作成します。お気に入りDim X As New MyControl()
  2. コントロールを子オブジェクトとしてフォームに追加し、必要なコンテナーに追加します。のようにMe.MyGreatTabPage.Controls.Add(X)。フォームはコンテナでもあるため、フォームに直接追加することもできます。
  3. コンテナー内のコントロールの位置を設定します。それは設定X.LocationX.Size.

作成する各インスタンスNew MyControl()は個別の MyControl になることに注意してください。新しいコントロールを繰り返し作成し、それらを重ねて配置するという間違いを犯さないでください。コントロールを一度作成して配置します。フォームのメンバー変数に割り当て、それを使用する必要がある場合は、この変数を使用します。

于 2008-12-17T09:47:46.943 に答える
3

あなたが探しているのは次のように書かれていると思います: this.Controls.Add(myControl) in C#. VBでも非常に似ていると思いますか?

于 2008-12-17T09:40:12.747 に答える
2
Form.Controls.Add(Page.LoadControl("SomeUserControl.ascx"))

次に、リクエストごとにリロードする必要があるため、イベントをトラップするという難しい部分があります。通常、ViewState フラグを使用して既に読み込まれていることを示し、そのフラグの存在をチェックして、OnInit で再度読み込む必要があるかどうかを確認します。

Dim newControl As UserControl = LoadControl("~/Controls/DRQ/Create/UCNewControl.ascx")
Me.panelHolder1.Controls.Add(newControl)
于 2008-12-17T09:52:12.037 に答える
1

これは、2 つ以上を追加する方法です。

Private _userControlList As New List(Of YourControl)

Private Sub AddingControlOnPanel()
    Dim index As Integer = _userControlList.Count + 1
    Dim userControl As New YourControl
    userControl.Location = New System.Drawing.Point(SomeLocation)
    userControl.Size = New System.Drawing.Size(SomeSize)
    userControl.Name = "userControl" + index.ToString
    userControl.Visible = False
    _userControlList.Add(userControl)
    UserControlsPanel.Controls.Add(userControl)
    userControl.Visible = True
End Sub
于 2012-09-18T14:20:17.557 に答える
0
    For i As Integer = 1 To 10
        Dim tb As New TextBox
        tb.Top = 26 * i
        tb.Left = 12
        tb.Text = "text box " & i.ToString()
        tb.Parent = Me
    Next
于 2008-12-17T10:32:59.037 に答える