Foros del Web » Programación para mayores de 30 ;) » .NET »

Eliminar controles que han sido creados en tiempo de ejecución

Estas en el tema de Eliminar controles que han sido creados en tiempo de ejecución en el foro de .NET en Foros del Web. Buenas tardes amigos, tengo un formulario en el que cuando pulso un botón creo varios controles: Código: For i = 0 To usuarGrup.Count - 1 ...
  #1 (permalink)  
Antiguo 06/06/2009, 12:32
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
Exclamación Eliminar controles que han sido creados en tiempo de ejecución

Buenas tardes amigos,

tengo un formulario en el que cuando pulso un botón creo varios controles:
Código:
For i = 0 To usuarGrup.Count - 1                                ' Por cada Grupo del Usuario

                Dim label As New Label                                          ' Declaro un nuevo Label
                label.Name = "Label_Grupos" + i.ToString                        ' Le asigno un nombre
                label.Size = New Size(36, 13)                                   ' Le doy un tamaño
                label.Text = "Grupo"                                            ' Le asigno un texto
                label.Location = New Point(arrPosicX(i) - 42, arrPosicY(i) + 3) ' Lo posiciono
                Dim combo As New ComboBox                                       ' Declaro un nuevo Combo
                combo.DropDownStyle = ComboBoxStyle.DropDownList                ' No permito escritura en Combobox
                combo.Name = "ComboBox_Grupos" + i.ToString                     ' Le asigno un nombre
                combo.Size = New Size(250, 21)                                  ' Le doy un tamaño
                combo.Location = New Point(arrPosicX(i), arrPosicY(i))          ' Lo posiciono
                combo.TabIndex = i + 2                                          ' Le asigno el TabIndex
                combo.Enabled = tipoEnabled                                     ' Asigna TRUE o FALSE a Enabled (recibe por parámetro)
                combo.Items.Add("")                                             ' Añado elemento vacío
                For j = 0 To grupos.Count - 1                                   ' Por cada Grupo existente en la BD
                    If (UCase(Trim(grupos(j).NOMBRE_GR.ToString)) <> UCase("Temporal") Or _
                        (UCase(Trim(grupos(j).NOMBRE_GR.ToString)) = UCase("Temporal") And _
                            usuarGrup(i).COD_GR = codigo_gr_temporal)) Then
                        elemento = grupos(j).COD_GR                                 ' Obtengo el cod_gr
                        elemento = elemento + ". " + grupos(j).NOMBRE_GR            ' Anexo el nombre_gr
                        combo.Items.Add(elemento)                                   ' Añado el elemento al Combobox
                        If (usuarGrup(i).COD_GR = grupos(j).COD_GR) Then            ' SI usuario pertenece a dicho grupo
                            combo.SelectedItem = elemento                               ' Selecciono como default el grupo en el Combobox
                        End If
                        If (usuarGrup(i).COD_GR = codigo_gr_temporal) Then
                            Dim color As New Color
                            color = color.OrangeRed
                            combo.BackColor = color
                        End If
                    End If
                Next j

                Panel1.Controls.Add(label)                                          ' Añado el Label al formulario
                Panel1.Controls.Add(combo)                                          ' Añado el Combobox al formulario

            Next i


Y quiero pulsar otro botón distinto y que me elimine esos mismos controles, pero no sé cómo hacerlo.

He pensado en hacer lo siguiente:
Código:
For i = 0 To numComboboxGrupos - 1
            Dim label As New Label                                          ' Declaro un nuevo Label
            label.Name = "Label_Grupos" + i.ToString                        ' Le asigno un nombre
            Dim combo As New ComboBox                                       ' Declaro un nuevo Combo
            combo.Name = "ComboBox_Grupos" + i.ToString                     ' Le asigno un nombre
            Panel1.Controls.Remove(label)
            Panel1.Controls.Remove(combo)
        Next


Pero no funciona lógicamente... Sabéis hacerlo? Muchas gracias, un saludo amigos!
  #2 (permalink)  
Antiguo 08/06/2009, 21:33
Avatar de jaullo  
Fecha de Ingreso: abril-2009
Mensajes: 994
Antigüedad: 15 años
Puntos: 30
Respuesta: Eliminar controles que han sido creados en tiempo de ejecución

Prueba con algo como esto compañero.

Public Sub ClearAllControls(frmForm As Form)
Dim ctlControl As Object
On Error Resume Next
For Each ctlControl In frmForm.Controls
ctlControl.Text = ""
ctlControl.ListIndex = -1
DoEvents
Next ctlControl
End Sub

No es precisamente para eliminarlos pero te podria orientar


saludos,

Última edición por jaullo; 08/06/2009 a las 21:47
  #3 (permalink)  
Antiguo 09/06/2009, 04:01
 
Fecha de Ingreso: enero-2009
Mensajes: 35
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Eliminar controles que han sido creados en tiempo de ejecución

Se me ocurre que podria hacer esto:


For i = 0 To numComboboxGrupos - 1
for j = 0 to panel1.controls.count-1
if panel1.controls(j).name = "Label_Grupos" & i.ToString then
panel1.controls.RemoveAt(j)
end if
if panel1.controls(j).name = "ComboBox_Grupos" & i.ToString then
panel1.controls.RemoveAt(j)
end if
next
Next

Esto deberia de funcionarte (quizas me haya comido algo), pruebalo y dime como te va.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:50.