Reply to thread

I have a series of groupboxes on a form, lets say 2 for this example. Each groupbox has an associated "Add" button located on the form, that when clicked will add the following dynamic controls inside the group box; Label, textbox and a Delete button aligned in a row.


I have button click handlers for the Add buttons on the form. I also have handlers for click events for the labels (the labels represent status green for good and red for not so good). I also have a handler for the dynamically created Delete button located in the groupbox.



Here is my question: Can I reference the groupbox where the delete button was clicked? I am trying to eliminate repetitive code.


I have:


Dim button As Button = CType(sender, Button).


.


.


and I want to change "groupbox1.Controls.Remove(groupbox1.Controls.Find(("txt_" & index), True)(0))" to the following:


button.parent.name.controls.remove(button.parent.name.controls.find(("txt_" & index),true)(0))


if I click the delete button in groupbox1 then the corresponding row will be removed from groupbox1, and if I click delete button in groupbox2 that row will be removed using the same code block..


The way its setup now, I'll need to have a nested if for every groupbox container on my form - which eventually will be five.


Some of the code is not mine but sourced from various sites on the interweb.. Any help would be greatly appreciated.



CODE:


Public Class Form1


 


    Private Sub lbl_click(ByVal sender As ObjectByVal e As EventArgs)


        Dim label As Label = CType(sender, Label)


 


        'determine index of Label


        Dim lblindex As Integer = Integer.Parse(label.Name.Split("_")(1))


 


        label.Text = lblindex ' only for testing will be removed when final


        ' Flip the background color red <--> green


 


 


        If label.BackColor = Color.FromArgb(170, 0, 0) Then


            label.BackColor = Color.FromArgb(0, 255, 0)


        Else


            label.BackColor = Color.FromArgb(170, 0, 0)


        End If


 


 


    End Sub


 


Private Sub btnDelete_Click(ByVal sender As ObjectByVal e As EventArgs)


 


        ''Reference the Button which was clicked.


        Dim button As Button = CType(sender, Button)


 


        ''Determine the Index of the Button.


        Dim index As Integer = Integer.Parse(Button.Name.Split("_")(1))


        Dim count As Integer = groupbox1.Controls.OfType(Of TextBox).ToList.Count


        ''Find the TextBox and Label using Index and remove it.


 


        


 


        Groupbox1.Controls.Remove(Panel1.Controls.Find(("txt_" & index), True)(0))


        Groupbox1.Controls.Remove(Panel1.Controls.Find(("lbl_" & index), True)(0))


 


        Dim controlIndex As Integer = Integer.Parse(button.Name.Split("_")(1))


 


        


        'Remove the Button.


 


        Groupbox1.Controls.Remove(button)


 


        'Rearranging the Location controls.


        For Each btn As Button In groupbox1.Controls.OfType(Of Button)()


            Dim controlIndex As Integer = Integer.Parse(btn.Name.Split("_")(1))


            


            ‘ do some stuff


        Next


 


 


    End Sub


 


 


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load


        For Each Ctrl As Control In Controls


            If TypeOf Ctrl Is Button Then


                AddHandler DirectCast(Ctrl, Button).Click, AddressOf addbtnclick


            End If


        Next


    End Sub


 


Private Sub addbtnclick(sender As Object, e As EventArgs)


        Dim textbox As TextBox = New TextBox


        Dim label As Label = New Label


 


        If DirectCast(sender, Button).Name = "GB1addbtn" Then


            Dim pmcount As Integer = Groupbox1.Controls.OfType(Of TextBox).ToList.Count


            textbox.Location = New System.Drawing.Point(35, (35 * pmcount) + 30)


            textbox.Size = New System.Drawing.Size(80, 20)


            textbox.Name = "txt_" & (pmcount + 1)


 


            label.Location = New System.Drawing.Point(5, (35 * pmcount) + 30)


            label.Size = New System.Drawing.Size(25, 25)


            label.Name = "lbl_" & (pmcount + 1)


            label.BackColor = Color.FromArgb(170, 0, 0)


 


            Groupbox1.Controls.Add(textbox)


            Groupbox1.Controls.Add(label)


 


            '    'Create the dynamic Button to remove the TextBox.


            Dim button As Button = New Button


            button.Location = New System.Drawing.Point(120, (35 * pmcount) + 30)


            button.Size = New System.Drawing.Size(85, 30)


            button.Name = "btnDelete_" & (pmcount + 1)


            button.Text = "Delete"


            AddHandler button.Click, AddressOf Me.btnDelete_Click


            AddHandler label.Click, AddressOf Me.lbl_click


 


            Groupbox1.Controls.Add(button)


        ElseIf (DirectCast(sender, Button).Name) = "GB2addbtn" Then


            Dim dcount As Integer = Groupbox2.Controls.OfType(Of TextBox).ToList.Count


            textbox.Location = New System.Drawing.Point(35, (35 * dcount) + 30)


            textbox.Size = New System.Drawing.Size(80, 20)


            textbox.Name = "txt_" & (dcount + 1)


 


            label.Location = New System.Drawing.Point(5, (35 * dcount) + 30)


            label.Size = New System.Drawing.Size(25, 25)


            label.Name = "lbl_" & (dcount + 1)


            label.BackColor = Color.FromArgb(170, 0, 0)


 


            Groupbox2.Controls.Add(textbox)


            Groupbox2.Controls.Add(label)


 


            '    'Create the dynamic Button to remove the TextBox.


            Dim button As Button = New Button


            button.Location = New System.Drawing.Point(120, (35 * dcount) + 30)


            button.Size = New System.Drawing.Size(85, 30)


            button.Name = "btnDelete_" & (dcount + 1)


            button.Text = "Delete"


 


            AddHandler button.Click, AddressOf Me.btnDelete_Click


            AddHandler label.Click, AddressOf Me.lbl_click


 


            Groupbox2.Controls.Add(button)


 


        End If


    End Sub


End Class


Continue reading...


Back
Top