Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: José Antonio en 09 de Enero 2016, 23:27
-
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.
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
-
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
-
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
-
Buenas he visto esta idea pero no la he probado
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:
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
-
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.
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
-
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
-
Buenas, gracias por indicar cómo lo habías solucionado, le puede servir de ayuda a otras personas
Salu2
-
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
-
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
-
Gracias por el aporte!