klados
klados

Reputation: 787

How to manage dynamically created controls in VB.NET?

enter image description here

I just understand how to make controls dynamically in VB.NET (I mean, only part of adding a new one)

But, unlike VB6, it seems hard to handle those dynamic things.

When I click the DONE button, I want to make an array filled with the text of textboxes.

At the same time, I want to make a Delete button that removes the button itself and the textbox in the same line.

Is there any simple method or an sample code for this?

Thank you!

Upvotes: 1

Views: 3641

Answers (2)

Victor Zakharov
Victor Zakharov

Reputation: 26424

Drop a TableLayoutPanel on your form, called pnlLayout, and also the Add button called btnAdd. Configure TableLayoutPanel to have two columns, adjust column width as needed.

Paste below code into your form:

Public Class Form1
  Dim deleteButtons As List(Of Button)
  Dim textBoxes As List(Of TextBox)

  Sub New()
    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    deleteButtons = New List(Of Button)
    textBoxes = New List(Of TextBox)
  End Sub

  Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
    Dim elementCount As Integer = deleteButtons.Count

    Dim txt As New TextBox
    txt.Width = 100
    txt.Height = 20
    textBoxes.Add(txt)

    Dim btn As New Button
    btn.Width = 100
    btn.Height = 20
    btn.Text = "Delete " & elementCount.ToString
    AddHandler btn.Click, AddressOf btnDelete
    deleteButtons.Add(btn)

    pnlLayout.SetCellPosition(txt, New TableLayoutPanelCellPosition(0, elementCount))
    pnlLayout.SetCellPosition(btn, New TableLayoutPanelCellPosition(1, elementCount))

    pnlLayout.Controls.Add(btn)
    pnlLayout.Controls.Add(txt)
  End Sub

  Private Sub btnDelete(sender As Object, e As EventArgs)
    Dim senderButton As Button = DirectCast(sender, Button)
    Dim txt As TextBox = textBoxes(deleteButtons.IndexOf(senderButton))
    pnlLayout.Controls.Remove(senderButton)
    pnlLayout.Controls.Remove(txt)
  End Sub

End Class

By default, it will have no textboxes and no Delete buttons, you can add as many rows of "Textbox + Delete button" as you want. When you press Delete, the row will be removed (and everything shifted to accommodate the empty space).

Upvotes: 4

SomeNickName
SomeNickName

Reputation: 521

For the textbox'ex part:

Dim strcol() As String = {TextBox2.Text, TextBox3.Text}
    For Each strtxt In strcol
        MessageBox.Show(strtxt)
    Next

It really depends on your code, but, if you have their name use this to delete the buttons &/ textbox'es:

 For i As Integer = Me.Controls.Count - 1 To 0 Step -1
        If TypeOf Me.Controls(i) Is TextBox Then
            If Me.Controls(i).Name = "TextBox2" Then
                Me.Controls.RemoveAt(i)
            End If
        End If
        If TypeOf Me.Controls(i) Is Button Then
            If Me.Controls(i).Name = "Button3" Then
                Me.Controls.RemoveAt(i)
            End If
        End If
    Next

But it depends on your code...

Upvotes: 0

Related Questions