¿Crear controles en tiempo de ejecución con las mismas propiedades y funciónes?

Iniciado por Crazy.sx, 23 Octubre 2012, 23:52 PM

0 Miembros y 1 Visitante están viendo este tema.

Crazy.sx

Tengo en VB.NET 2010 un TabControl con una pestaña que contiene un DataGridView y dos botones en los que cada uno posee un procedimiento definido.

Mi dilema  :-\ es cómo crear otra o varias pestañas u otros TabPage con exactamente el mismo contenido que la anterior y funcionamiento; y después eliminar las pestañas que yo desee sin causar ningún error en las otras.

Es un problema que no se bien como lo supero, je. Leí en otros sitios sobre crear controles en tiempo de ejecución pero quiero hacer la pregunta directa. Según entendí se trata de crear varias instancias ¿Es así?

Por favor, espero que me puedan guiar ya que vengo luchando con esto desde hace un tiempo.  :(

Gracias.
Destruir K. LOL

TomaSs

Así es, creando controles dinámicamente podrías hacerlo sin ningún problema.
Ejemplo:

       
Código (csharp) [Seleccionar]
private void button1_Click(object sender, EventArgs e)
{
       TabPage miPagina = new TabPage();
       Button miBoton = new Button();

       miPagina.Text = "PruebaPestaña";
       miPagina.Name = "paginaPrueba";

       miBoton.Text = "PruebaBoton";
       miBoton.Name = "button2";
       miBoton.Location = new Point(20, 20);

       miPagina.Controls.Add(miBoton);
       tabControl1.TabPages.Add(miPagina);
}


Simplemente he creado un formulario al cual he añadido un tabcontrol (tabControl1) y un boton (button1), y cuando pulsas en dicho boton se ejecuta el código que te he puesto, donde he declarado 2 objetos, uno de TabPage, que será la página que vas a añadir, y otro de tipo Button, que será el botón que vas a añadir a la página. Después de declarar dichos objetos, les asigno las propiedades que quiera (en este caso Text, Name y Location) y los añado a sus correspondientes lugares con miPagina.Controls.Add(miBoton) para añadir el botón a la página creada, y con tabControl1.TabPages.Add(miPagina) para añadir la página creada al tabControl.

Espero que te sea de ayuda.
Un saludo! ;)

seba123neo

bueno crear el TabPage es facil y meterle controles adentro tambien, aca un ejemplo simple que tambein maneja los eventos de cada control en cada tab.

Código (vbnet) [Seleccionar]
Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Call CrearTab()
   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       TabControl1.TabPages.Remove(TabControl1.SelectedTab)
   End Sub

   Private Sub CrearTab()
       Dim NewTab As New TabPage
       NewTab.Name = "Tab" & TabControl1.TabCount
       NewTab.Text = "Tab " & TabControl1.TabCount

       Me.TabControl1.Controls.Add(NewTab)

       Dim NewButton As New Button
       NewButton.Name = "Button1"
       NewButton.Top = 10
       NewButton.Text = "Boton 1"
       NewTab.Controls.Add(NewButton)

       AddHandler NewButton.Click, AddressOf ClickBotones

       Dim NewButton2 As New Button
       NewButton2.Name = "Button2"
       NewButton2.Top = 100
       NewButton2.Text = "Boton 2"
       NewTab.Controls.Add(NewButton2)

       AddHandler NewButton2.Click, AddressOf ClickBotones
   End Sub

   Private Sub ClickBotones(ByVal sender As Object, ByVal e As EventArgs)
       Dim whichButton As Button
       Dim whichTabPage As Control

       If TypeOf sender Is Button Then

           whichButton = CType(sender, Button)
           whichTabPage = whichButton.Parent

           MessageBox.Show("Apretaste el " & whichButton.Name & " de la pestaña " & whichTabPage.Name)
       End If
   End Sub
End Class


el primer boton añade un tab con 2 botones adentro y el otro elimina la tab seleccionada.

tambien se manejan los eventos click de cada boton y se sabe de que tab vino el click.

es un simple ejemplo, lo tenes que optimizar.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

spiritdead

Cita de: seba123neo en 24 Octubre 2012, 00:35 AM
bueno crear el TabPage es facil y meterle controles adentro tambien, aca un ejemplo simple que tambein maneja los eventos de cada control en cada tab.

Código (vbnet) [Seleccionar]
Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Call CrearTab()
   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       TabControl1.TabPages.Remove(TabControl1.SelectedTab)
   End Sub

   Private Sub CrearTab()
       Dim NewTab As New TabPage
       NewTab.Name = "Tab" & TabControl1.TabCount
       NewTab.Text = "Tab " & TabControl1.TabCount

       Me.TabControl1.Controls.Add(NewTab)

       Dim NewButton As New Button
       NewButton.Name = "Button1"
       NewButton.Top = 10
       NewButton.Text = "Boton 1"
       NewTab.Controls.Add(NewButton)

       AddHandler NewButton.Click, AddressOf ClickBotones

       Dim NewButton2 As New Button
       NewButton2.Name = "Button2"
       NewButton2.Top = 100
       NewButton2.Text = "Boton 2"
       NewTab.Controls.Add(NewButton2)

       AddHandler NewButton2.Click, AddressOf ClickBotones
   End Sub

   Private Sub ClickBotones(ByVal sender As Object, ByVal e As EventArgs)
       Dim whichButton As Button
       Dim whichTabPage As Control

       If TypeOf sender Is Button Then

           whichButton = CType(sender, Button)
           whichTabPage = whichButton.Parent

           MessageBox.Show("Apretaste el " & whichButton.Name & " de la pestaña " & whichTabPage.Name)
       End If
   End Sub
End Class


el primer boton añade un tab con 2 botones adentro y el otro elimina la tab seleccionada.

tambien se manejan los eventos click de cada boton y se sabe de que tab vino el click.

es un simple ejemplo, lo tenes que optimizar.

saludos.

xD pero ahi ya estas aumentando el nivel con la incorporacion de eventos controlados, :P xD no lo enreden =(
AddHandler NewButton2.Click, AddressOf ClickBotones

xD primero que aprenda a crear los controles dinamicamente, y despues como asignarle los eventos correctamente sino se perdera
Facilitador De Tareas - Task Simplifier (FDT)

Crazy.sx

Cita de: seba123neo en 24 Octubre 2012, 00:35 AM
bueno crear el TabPage es facil y meterle controles adentro tambien, aca un ejemplo simple que tambein maneja los eventos de cada control en cada tab.

Código (vbnet) [Seleccionar]
Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Call CrearTab()
   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       TabControl1.TabPages.Remove(TabControl1.SelectedTab)
   End Sub

   Private Sub CrearTab()
       Dim NewTab As New TabPage
       NewTab.Name = "Tab" & TabControl1.TabCount
       NewTab.Text = "Tab " & TabControl1.TabCount

       Me.TabControl1.Controls.Add(NewTab)

       Dim NewButton As New Button
       NewButton.Name = "Button1"
       NewButton.Top = 10
       NewButton.Text = "Boton 1"
       NewTab.Controls.Add(NewButton)

       AddHandler NewButton.Click, AddressOf ClickBotones

       Dim NewButton2 As New Button
       NewButton2.Name = "Button2"
       NewButton2.Top = 100
       NewButton2.Text = "Boton 2"
       NewTab.Controls.Add(NewButton2)

       AddHandler NewButton2.Click, AddressOf ClickBotones
   End Sub

   Private Sub ClickBotones(ByVal sender As Object, ByVal e As EventArgs)
       Dim whichButton As Button
       Dim whichTabPage As Control

       If TypeOf sender Is Button Then

           whichButton = CType(sender, Button)
           whichTabPage = whichButton.Parent

           MessageBox.Show("Apretaste el " & whichButton.Name & " de la pestaña " & whichTabPage.Name)
       End If
   End Sub
End Class


el primer boton añade un tab con 2 botones adentro y el otro elimina la tab seleccionada.

tambien se manejan los eventos click de cada boton y se sabe de que tab vino el click.

es un simple ejemplo, lo tenes que optimizar.

saludos.


Cita de: spiritdead en 24 Octubre 2012, 00:54 AM
xD pero ahi ya estas aumentando el nivel con la incorporacion de eventos controlados, :P xD no lo enreden =(
AddHandler NewButton2.Click, AddressOf ClickBotones

xD primero que aprenda a crear los controles dinamicamente, y despues como asignarle los eventos correctamente sino se perdera

Jeje. Bueno, sí. La verdad que me pegué un susto al ver el código porque soy algo nuevo en esto, pero me puse a leerlo e intentar comprenderlo y no parece tanto kilombo después de todo. Aunque es la primera vez que leo algo en .NET como AddHandler y AddressOf.

Acabo de leer acerca de estos y veo que van de la mano: http://msdn.microsoft.com/es-es/library/7taxzxka(v=vs.80).aspx

Y me quedó mas que claro esta cuestión.

Así que muchas gracias por abrirme la cabeza,  ;) ;-)

Solo una cosita más, aunque suene obvia... si quisiera hacer que el nuevo TabPage quede exactamente igual que la "pestaña modelo" (por decirlo de alguna manera) debo especificar exactamente las mismas y todas propiedades de aquellos controles ¿verdad? Como me pusiste vos Seba en el ejemplo que me pasaste:

 
Código (vbnet) [Seleccionar]
    NewButton2.Name = "Button2"
       NewButton2.Top = 100
       NewButton2.Text = "Boton 2"
                     ·
                     ·
                     ·
       NewButton2.[···]= [···]


:huh:

¿Uno por uno a todos? ¿Se podría copiar directamente todas las propiedades de una vez?

Muchas gracias.

Saludos.
Destruir K. LOL

seba123neo

podes hacer un bucle For, algo asi:

Código (vbnet) [Seleccionar]
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Call CrearTabModelo()
    End Sub

    Private Sub CrearTabModelo()
        Dim NewTab As New TabPage
        NewTab.Name = "Tab" & TabControl1.TabCount
        NewTab.Text = "Tab " & TabControl1.TabCount

        Me.TabControl1.Controls.Add(NewTab)

        For i As Integer = 1 To 10
            Dim NewButton As New Button
            NewButton.Name = "Button" & i
            NewButton.Text = "Boton " & i
            NewButton.Location = New Point(10, 25 * i)
            NewTab.Controls.Add(NewButton)

            AddHandler NewButton.Click, AddressOf ClickBotones
        Next
    End Sub

    Private Sub ClickBotones(ByVal sender As Object, ByVal e As EventArgs)
        Dim whichButton As Button
        Dim whichTabPage As Control

        If TypeOf sender Is Button Then

            whichButton = CType(sender, Button)
            whichTabPage = whichButton.Parent

            MessageBox.Show("Apretaste el " & whichButton.Name & " de la pestaña " & whichTabPage.Name)
        End If
    End Sub
End Class
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson