none
Eliminar controles añadidos en tiempo de ejecución RRS feed

  • Pregunta

  • Hola, tengo una instrucción while que crea x botones y su nombre varía: "botón"+num.ToString(); por lo que me da x botones de nombre botón1, botón2, etc. Pero quiero que al dar a otro botón distinto se eliminen todos, pero no me deja poner ("botón"+num.ToString()).Dispose();  ni nada parecido, porque como los botones de arriba son creados en tiempo de ejecución al compilar no hay ningún objeto llamado "botón"+num.ToString() ni botón1, por lo que me da error. ¿Hay alguna forma de eliminar controles creados en tiempo de ejecución?
    • Editado LeyendNk martes, 10 de abril de 2012 1:34
    martes, 10 de abril de 2012 1:30

Respuestas

  • Si lo agrega en el momento de compilacion los mas recomendado es eliminarlo en el evento clic de algun control, algo como:

    C#

    private void button1_Click(object sender, EventArgs e)
            {
                foreach (TextBox thecontrol in this.Controls.OfType<TextBox>().Where((controlname) => controlname.Name.Contains("botón_")))
                {
                    this.Controls.Remove(thecontrol);
                }
            }

    VB

    Private Sub button1_Click(sender As Object, e As EventArgs)
    	For Each thecontrol As TextBox In Me.Controls.OfType(Of TextBox)().Where(Function(controlname) controlname.Name.Contains("botón_"))
    		Me.Controls.Remove(thecontrol)
    	Next
    End Sub

    Ahora bien no has especificado que version de visual estudio esta utilizando, suerte.


    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    Blog

    • Propuesto como respuesta Leandro TuttiniMVP martes, 10 de abril de 2012 3:12
    • Marcado como respuesta LeyendNk martes, 10 de abril de 2012 9:33
    martes, 10 de abril de 2012 1:42

Todas las respuestas

  • Si lo agrega en el momento de compilacion los mas recomendado es eliminarlo en el evento clic de algun control, algo como:

    C#

    private void button1_Click(object sender, EventArgs e)
            {
                foreach (TextBox thecontrol in this.Controls.OfType<TextBox>().Where((controlname) => controlname.Name.Contains("botón_")))
                {
                    this.Controls.Remove(thecontrol);
                }
            }

    VB

    Private Sub button1_Click(sender As Object, e As EventArgs)
    	For Each thecontrol As TextBox In Me.Controls.OfType(Of TextBox)().Where(Function(controlname) controlname.Name.Contains("botón_"))
    		Me.Controls.Remove(thecontrol)
    	Next
    End Sub

    Ahora bien no has especificado que version de visual estudio esta utilizando, suerte.


    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    Blog

    • Propuesto como respuesta Leandro TuttiniMVP martes, 10 de abril de 2012 3:12
    • Marcado como respuesta LeyendNk martes, 10 de abril de 2012 9:33
    martes, 10 de abril de 2012 1:42
  • Perdón por no especificar, estoy usando el Microsoft C# 2008 Express. No, los controles no se agregan en el momento de compilación, sino al clickar un botón "crear_button", el código se varía algo así:

    C#

    private void crear_button_Click(object sender, EventArgs e)
       {
         ushort a = 0, num = 1;
    
         while (b > a) // a "b" se le agrega un valor en otra parte del programa
         {
           Button boton = new Button();
           this.Controls.Add(boton);
           boton.Name = "botoncreado" + num.ToString();
           a++;
           num++;
         }
       }
    
    // Con este código se crean b botones, de nombre botoncreado1, botoncreado2, hasta botoncreadob.
    
    private void borrar_button_Click(object sender, EventArgs e)
       {
         // ¿Qué codigo ha de ir aquí para borrar todos los botones creados con crear_button_Click?
       }


    • Editado LeyendNk martes, 10 de abril de 2012 2:08
    martes, 10 de abril de 2012 2:07
  • Angel alli te dio la respuesta

    solo cambia donde pongo en negrita

     foreach (TextBox thecontrol in this.Controls.OfType<Button>().Where((controlname) => controlname.Name.Contains("botoncreado")))
     {
        this.Controls.Remove(thecontrol);
     }

    o sea

    OfType<Button>()

    y

    Name.Contains("botoncreado")

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 10 de abril de 2012 3:12
  • Buenas,Pregunta para no crear un tema nuevo con lo mismo aunque esto este viejito,en controlname que iria exactamente?esto sirve si yo tengo los botones creados en una clase y quiero borrarlos en otra clase que a su vez están incluidos en un Control de Usuario?porque estoy intentando hacerlo y la verdad que no lo entiendo,o sea entiendo lo que hace el código pero no logro hacerlo funcionar
    martes, 22 de marzo de 2016 12:50