VB.NET – Creating multiple controls at runtime inside flow layout panel



VB.NET – Creating multiple controls at runtime inside flow layout panel

VB.NET - Creating multiple controls at runtime inside flow layout panel

Steps to add multiple panels at runtime that contain other controls such as labels and buttons in VB.NET using a flow layout panel

Visual Studio Community 2017
.NET Framework 4.6.1
Windows 10

Partial Code:
———————
‘Indicates current contact panel to add controls to
Private _CurrentContactPanelName As String = Nothing

‘Used to give unique control names such as label1, label2 etc
Private _ContactPanelsAddedCount As Integer = 0

‘Add contact panel to flow layout panel
Public Sub CreateContactPanel()

Dim contactPanel As Panel
contactPanel = New Panel()

‘Set panel properties
With contactPanel
.BackColor = Color.White
.Size = New Size(420, 50)
.Name = “pnlContact” + (_ContactPanelsAddedCount + 1).ToString
End With

‘Add panel to flow layout panel
flpMain.Controls.Add(contactPanel)

‘Update panel variables
_CurrentContactPanelName = contactPanel.Name
_ContactPanelsAddedCount += 1

End Sub

‘Add new delete button to contact panel
Private Sub CreateContactDeleteBtn(ByVal panelName As String)

Dim contactDeleteButton As Button
contactDeleteButton = New Button

‘Set button properties
With contactDeleteButton
.AutoSize = False
.Size = New Size(90, 30)
.BackColor = Color.Silver
.ForeColor = Color.Black
.Location = New Point(300, 10)
.Name = “btnContactDelete” + (_ContactPanelsAddedCount).ToString
.Text = “Delete”
End With

‘Add button to panel
For Each controlObject As Control In flpMain.Controls
If controlObject.Name = panelName Then
controlObject.Controls.Add(contactDeleteButton)
End If
Next

‘Add handler for click events
AddHandler contactDeleteButton.Click, AddressOf DynamicButton_Click

End Sub

‘Remove handlers and contact panel
Public Sub DynamicButton_Click(ByVal sender As Object, ByVal e As EventArgs)

Dim parentPanelName As String

parentPanelName = Nothing

‘Remove handler from sender
For Each controlObj As Control In flpMain.Controls
For Each childControlObj As Control In controlObj.Controls
If childControlObj.Name = sender.name Then
RemoveHandler childControlObj.Click, AddressOf DynamicButton_Click
parentPanelName = childControlObj.Parent.Name
End If
Next
Next

‘Remove contact panel
For Each controlObj As Control In flpMain.Controls
If controlObj.Name = parentPanelName Then
flpMain.Controls.Remove(controlObj)
controlObj.Dispose()
End If
Next

End Sub

Comments are closed.