Boton que agregue TabPages a un TabControl

Iniciado por _CrisiS_, 13 Diciembre 2017, 13:46 PM

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

_CrisiS_

Hola, tengo una consulta tengo un TabControl con 3 Pestañas "TabPages" mi duda es por medio de un boton agregar mas pestañas o TabPages, con el contenido (textbox, labels ,botones, etc) claro que cambiando el nombre a los controladores ejemplo "el textbox1 del TabPage 1 al  generarse el nuevo tabPage "que cambie su nombre a "textbox1" o "textbox1_2" y t un boton para eliminar TabPages.

Eleкtro

#1
Cita de: _CrisiS_ en 13 Diciembre 2017, 13:46 PM
claro que cambiando el nombre a los controladores ejemplo "el textbox1 del TabPage 1 al  generarse el nuevo tabPage "que cambie su nombre a "textbox1" o "textbox1_2" y t un boton para eliminar TabPages.

Has dicho "controladores", pero en realidad creo que te debes estar refiriendo al nombre de los controles más que al nombre de los controladores de eventos que tengas declarados en el código.




En principio a menos que des más detalles no parece existir necesidad real de crear los controles en tiempo de ejecución y querer modificarle el nombre para evitar conflicto de nombres etc, y como parece que tu intención es la de replicar el contenido de una pestaña a otra, los mismos controles (las nuevas copias) pueden estar suscritos (todos) a un único controlador de eventos, no necesitas repetir código más de lo realmente necesario...

Simplemente añade un nuevo Form (sin borde) en tu proyecto (click derecho -> "Add" -> "Windows Form..."), añádele los controles que quieras, distribuye la posición de los controles y ponle los nombres que quieras, y declara los controladores de eventos en la clase de ese Form, luego para añadir una nueva pestaña en tiempo de ejecución y añadir dentro de esa pestaña una "copia" de ese Form, simplemente debes crear una nueva instancia del Form (en este caso supongamos que el Form se llama "MyCustomForm"), por ejemplo:

Código (vbnet) [Seleccionar]
Dim page1 As New TabPage("new tab page 1")
Dim childForm1 As New MyCustomForm With {
   .Dock = DockStyle.Fill,
   .FormBorderStyle = FormBorderStyle.None,
   .TopLevel = False,
   .Visible = True,
   .Parent = page1
}

Dim page2 As New TabPage("new tab page 2")
Dim childForm2 As New MyCustomForm With {
   .Dock = DockStyle.Fill,
   .FormBorderStyle = FormBorderStyle.None,
   .TopLevel = False,
   .Visible = True,
   .Parent = page2
}

TabControl1.TabPages.AddRange({page1, page2})


( De ese ejemplo que acabo de poner puedes crear un sencillo método reutilizable para evitar la repetición de código. )

...La otra opción alternativa a esta metodología, sería directamente añadir los controles y posicionarlos en tiempo de ejecución dentro de la pestaña (el contenedor de controles) mediante el método TabControl.TabPages(index).Controls.Add(), pero no hay necesidad real de hacerlo así cuando puedes crear un Form en tiempo de diseño para administrar su aspecto y todo lo demás de mejor manera, y así evitar la generación de código engorroso que implica crear y liberar controles y administrar sus nombres y las posiciones y todo lo demás en tiempo de ejecución mediante código... pero bueno, la decisión es tuya, hazlo como prefieras solo era un consejo.

Saludos








_CrisiS_

Vaya gracias pro la ayuda, solo la duda, al hacer siempre ese llamado a ese Sub Form,  como haria para no tener problemas al momento de guardar los registro a la BD.
Por otro lado como pondria el contador para que cada pestaña nueva sume " Pestaña2,Pestaña,3Pestaña4....Pestaña n"
gracias :D

**Aincrad**

#3
Si entendí bien seria así (pestaña 1 - pestaña 2 - pestaña 3 ...):

1) crea un TabControl sin pestañas
2) crea un boton


código del FORMULARIO :

Código (vbnet) [Seleccionar]
Public Class Form1
    Dim cont As Integer = 0
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim tabpage As New TabPage
        cont = cont + 1
        tabpage.Text = "Pestaña" & cont
        TabControl1.TabPages.Add(tabpage)

    End Sub
End Class


________________________________________________________________________________________________________________________________________

si quieres agregarles controles como ( botones - textbox - etc ) :

1) crea un TabControl sin pestañas
2) crea un botón.

código del FORMULARIO :

Código (vbnet) [Seleccionar]
Public Class Form1
    Dim cont As Integer = 0
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim tabpage As New TabPage
        cont = cont + 1
        tabpage.Text = "Pestaña" & cont
        Dim textbox1 As New TextBox
        Dim textbox2 As New TextBox

        textbox1.Parent = tabpage
        textbox2.Parent = tabpage

        textbox1.Location = New Point(10, 10)
        textbox2.Location = New Point(10, 30)

        TabControl1.TabPages.Add(tabpage)

    End Sub
End Class



                                COMENTA SI TE SIRVIO  ;-)