Autor Tema: Programar Matrices de controles (Button) arrays o arreglos en Visual Basic  (Leído 12828 veces)

José Antonio

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
He seguido los pasos del tutorial y he creado una matriz de controles (Button). En VB 6.0 era sencillo programar, por ejemplo, el evento Click, pero en VB2005 con lo que estoy ahora no veo la forma. En modo Diseño no deja crear la matriz de controles. ¿Cómo se puede hacer, para programar eventos?.

Añado el código.

Código: [Seleccionar]
Public Class Prueba
    Dim buttonarray(10) As Button
    Dim i, j As Integer
Private Sub Prueba_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Width = 290
        Me.Height = 500
        For i = 1 To 10
            buttonarray(i) = New Button
            buttonarray(i).Font = New Font("Arial", 10, FontStyle.Bold)
            buttonarray(i).Width = 40
            buttonarray(i).Height = 25
            buttonarray(i).Location = New Point(40, 19 + i * 36)
            buttonarray(i).ForeColor = Color.Aquamarine
            buttonarray(i).BackColor = Color.Blue
            buttonarray(i).TextAlign = ContentAlignment.MiddleCenter
            buttonarray(i).Text = i
            Me.Controls.Add(buttonarray(i))
        Next i
End Sub
[b]Private Sub buttonarray_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        j = buttonarray(TabIndex).Text
        Label1.Text = "Has pulsado el Button......" & j
Resto del código
End Sub[/b]

Private Sub Finalizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Finalizar.Click
        End
End Sub
End Class
« Última modificación: 12 de Enero 2016, 14:00 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas José Antonio, para pegar código hazlo por favor con el botón # del editor como se explica en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

En las versiones más recientes de Visual Basic no se pueden crear matrices de controles en tiempo de diseño, aunque sí se puede hacer en tiempo de ejecución usando código.

En el curso https://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=37&Itemid=61 tienes explicado cómo crear matrices de controles, en concreto en la entrega "Matrices o arrays de controles (arreglos) en Visual Basic y VB.NET. Concepto y ejemplo de código (CU00320A)" puedes ver cómo se hace.

Salu2

José Antonio

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Hola Ogramar:
En primer lugar gracias por contestar.
Sobre colocar código, tienes razón. Había leido la forma de hacerlo, pero cuando lo fuí a hacer habían pasado unos días y no lo recordaba, en ese momento. Por no dar marcha atrás lo puse así. Lo siento, para la próxima espero que no suceda.
Con respecto al problema sigo diciendo lo mismo, en ese tutorial que me indicas explica cómo crear la matriz. Mi pregunta es ¿Cómo programo el evento Click? eso no lo veo en el tutorial. En VB6.0 era muy fácil en 2005 llevo días intentando casi todo y no doy con la solución.

Un saludo

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas he visto esta idea pero no la he probado

Código: [Seleccionar]
Dim numberOfButtons As Integer
Dim buttons() as Button

Private Sub MyForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Redim buttons(numberOfbuttons)
    for counter as integer = 0 to numberOfbuttons
        With buttons(counter)
           .Size = (10, 10)
           .Visible = False
           .Location = (55, 33 + counter*13)
           .Text = "Button "+(counter+1).ToString ' or some name from an array you pass from main
           'any other property
   AddHandler buttons(counter).Clicked AddressOf All_Buttons_Clicked
        End With
        '
    next
End Sub

Con lo anterior se crean los botones

Para introducir el código de respuesta se usaría:

Código: [Seleccionar]
Private Sub All_Buttons_Clicked(ByVal sender As System.Object, ByVal e As System.EventArgs)
     'aquí un código con el que identifiques el botón que ha sido pulsado y escribas la respuesta al click
End Sub

Salu2

José Antonio

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Hola Ogramar:
Gracias por tu respuesta, me ha servido bastante, ya casi funciona.
Me falta el detalle de capturar el Button pulsado.
Te adjunto el código.
Código: [Seleccionar]
Public Class TablaMultiplicar
    Dim labelarray(10) As Label
    Dim labelarray1(10) As Label
    Dim buttonarray(10) As Button
    Dim i, j As Integer
    Private Sub TablaMultiplicar_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Width = 290
        Me.Height = 500
        For i = 1 To 10
            labelarray(i) = New Label
            labelarray(i).BorderStyle = BorderStyle.Fixed3D
            labelarray(i).Font = New Font("Arial", 10, FontStyle.Bold)
            labelarray(i).Width = 40
            labelarray(i).Height = 20
            labelarray(i).Location = New Point(200, i * 36 + 19)
            labelarray(i).ForeColor = Color.Red
            labelarray(i).BackColor = Color.Cyan
            labelarray(i).TextAlign = ContentAlignment.MiddleCenter
            Me.Controls.Add(labelarray(i))

            labelarray1(i) = New Label
            labelarray1(i).Font = New Font("Arial", 10, FontStyle.Bold)
            labelarray1(i).Width = 35
            labelarray1(i).Height = 20
            labelarray1(i).Location = New Point(120, i * 36 + 19)
            labelarray1(i).ForeColor = Color.Black
            labelarray1(i).BackColor = Color.DarkGray
            labelarray1(i).TextAlign = ContentAlignment.MiddleCenter
            labelarray1(i).Text = "x" & i
            Me.Controls.Add(labelarray1(i))

            buttonarray(i) = New Button
            buttonarray(i).Font = New Font("Arial", 10, FontStyle.Bold)
            buttonarray(i).Width = 40
            buttonarray(i).Height = 25
            buttonarray(i).Location = New Point(40, 19 + i * 36)
            buttonarray(i).ForeColor = Color.Aquamarine
            buttonarray(i).BackColor = Color.Blue
            buttonarray(i).TextAlign = ContentAlignment.MiddleCenter
            buttonarray(i).Text = i
            Me.Controls.Add(buttonarray(i))
            AddHandler buttonarray(i).Click, AddressOf All_Buttons_Clicked
        Next i
    End Sub
    Private Sub All_Buttons_Clicked(ByVal sender As System.Object, ByVal e As System.EventArgs)

        'Capturar el valor del Button pulsado
        j = buttonarray(TabIndex + 5).Text
        ' Siempre me da valor del número que va detrás de (TabIndex + X), no del Button pulsado

        Label1.Text = "Tabla del......" & j
        For i = 1 To 10
            labelarray(i).Text = i * j
        Next i
        ' El resto funciona
    End Sub
    Private Sub Finalizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Finalizar.Click
        End
    End Sub
End Class

José Antonio

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Hola Ogramar:

Conseguido. :) :) :)
Coloco los cambios aquí, son sólo dos líneas a cambiar.

        Dim buttonarray = CType(sender, Button)
        j = buttonarray.text

Donde aparecía el comentario (Eliminar y sustituir por las dos líneas anteriores)

        'Capturar el valor del Button pulsado
        j = buttonarray(TabIndex + 5).Text
        ' Siempre me da valor del número que va detrás de (TabIndex + X), no del Button pulsado

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Buenas, gracias por indicar cómo lo habías solucionado, le puede servir de ayuda a otras personas

Salu2

José Antonio

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Hola Ogramar:
Gracias a tí. La solución empezó por tu primera aportación, luego yo la finalicé.
Lo normal en un foro es recibir y aportar. Esa es mi manera de ver un foro, por eso aporto mi granito, espero que sirva. Para mí las matrices de controles me parecen muy útiles y las quería resolver. Creo que ahora ya está resuelto.
Un saludo

Jabar

  • Sin experiencia
  • *
  • Mensajes: 1
    • Ver Perfil
Re:Programar Matrices de controles (Button) arrays o arreglos en Visual Basic
« Respuesta #8 en: 25 de Septiembre 2019, 15:51 »
Hola Ogramar. Un gusto conocerte
Despues de mucho buscar me sirvió tu contestación para identificar un label en array en el evento click
Sin embargo, me encontré con el problema que el texto del label debe ser igual al indice de la matriz y no se puede cambiar. Aparte debe ser un número y no un texto.
Creo que esta forma que encontré es mas tecnica y soluciona todos esos problemas
Se trata de utilizar la herencia para definir una clase LabelUsuario derivada de la clase System.Windows.Forms.Label que contenga una propiedad de lectura/escritura tipo Short que llamé Indice y que definí igual al indice del LabelUsuario.
Por lo tanto, en el evento Click utilizo la propiedad Indice en lugar de Text.
Muchas Gracias. Espero que les sirva el método

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Programar Matrices de controles (Button) arrays o arreglos en Visual Basic
« Respuesta #9 en: 25 de Septiembre 2019, 21:20 »
Gracias por el aporte!

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".