Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: karlos en 07 de Febrero 2013, 13:00
-
Hola,
Tengo 2 preguntas (estoy utilizando vb2010):
1. Puedo introducir el número de un array con una variable?
En lugar de definir el array: Peso(27) as integer
Me gustaría definirlo así:
valor as integer
Peso(valor) as integer
valor=27
For i=1 to valor
Peso(i)= i +1
Next
Pero cuando hago esto con vb 2010 no me registra ningun valor en el Array.
Pregunta 2. Como puedo crear labels con codigo y ubicar su posición en Form?
Quiero crear un array de labels puesto que tengo que preguntar lo mismo muchas veces:
No consigo reproducir el ejemplo 82 del libro (label1(i).Caption="Introducir..."
Estoy probando con :
For i = 1 To 5
lbl.Text = lbl.Text & vbCrLf & "Label" & i & vbCrLf
Me.Controls.Add(lbl)
Next
Pero tampoco me funciona.
Karlos
Me gustaría saber como puedo crear labels mediante código con vb 2010
-
Hola, yendo por partes:
Cuestión 1. Sí, puedes introducir el número de un array con una variable. Tienes que tener en cuenta un par de cosas:
- Tendrás que haber declarado la variable antes, en cabecera del código para que sea conocida. Tendrás que darle un valor inicial para crear el array de un tamaño que establezcas. Luego creas el array. Algo así como:
Public Class Form1
Dim sizeDelArray%, variableAusar2%
sizeDelArray = 27
Dim Peso(sizeDelArray) as Integer
La declaración Dim Peso(sizeDelArray) as Integer tiene sentido si has inicializado antes sizeDelArray a un valor, si no no lo tiene.
El problema que indicas parece debido a que valor vale cero y no se entra en el bucle. El tamaño del array no parece bien establecido.
Nota: posiblemente sea más conveniente declarar sizeDelArray como una constante en vez de como una variable, si el tamaño del array no va a variar durante la ejecución del programa. Es decir, si algo no va a variar mejor que sea una constante.
Cuestión 2. Para no complicar las cosas (y de hecho así es como se hace en el libro) te sugiero lo siguiente: crea un label en forma gráfica y sitúalo en el formulario. Luego selecciona ese label y pulsa CTRL+C (copiar). Luego pincha sobre el formulario y pulsa CTRL + V (pegar). En teoría, debe preguntarte si deseas crear un array de Labels. Respóndele que sí. Si el label creado era Label1, al decirle que sí te habrá cambiado el nombre a Label1(0) y el nuevo label será Label1(1). Si vuelves a pegar el contenido del portapapeles te irá creando los sucesivos elementos. Label1(2), Label1(3), etc. Una vez los tengas creados, manipúlalos a través del código como en el ejemplo del libro.
Sugerencia: establece primero el nombre de label antes de copiar y pegar sucesivamente, así ya tendrás todos los labels con el nombre que desees.
Nota: si respondes que no quieres crear el array de labels, cada label se mantendrá de forma independiente.
-
Hola Mario,
Cuestion 1.
Cuando hago lo que me apuntas, me sale el error en value: se esperaba una declaración:
Public Class Form1
Dim value As Integer
value=5
Dim Peso(value) As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Cuestion 2.
Cuando copio y pego el Label1 no me pregunta si quiero generar array. He revisado el listado de propiedades del Label para ver si puedes elegir Array pero no hay nada.
End Class
-
Alternativas:
Cuestión 1) Inicializa el tamaño del array como una constante en vez de como una variable.
Const sizeOfArray As Integer = 27
Dim Peso(sizeOfArray) As Integer
Cuestión 2) Efectivamente parece que en Visual 2010 no da opción a la creación de arrays de controles con la facilidad con que se permitía en versiones anteriores. En este caso, habría que hacerlo a través de código, lo cual puede ser bastante más complicado al exigir más conocimientos que se salen de lo que son cuestiones de fundamentos para entrar en detalles específicos del lenguaje.
La alternativa sería la siguiente:
Crear un TextBox en modo gráfico, en la propiedad Name poner por ejemplo "elemento" y en la propiedad Index ponerle un 0.
En el código crear manualmente los controles:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As Integer
For 1 = 1 to 9 'Suponemos que vamos a crear 10 controles, índices de 0 a 9
Load elemento(i)
'Luego cuadras la posición de cada control en el formulario:
elemento(i).Top = elemento(i-1).top + 120
elemento(i).Left = elemento(i-1).Left 'Cambia los valores de top y left según te convenga
celda(i).Visible = True
Next
...
Aquí hay un ejemplo de código (se supone que habiendo creado el textBox1 con index a 0), aunque como te digo se sale un poco de nuestros objetivos porque introduce cuestiones que no corresponden a fundamentos:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As Integer
Dim lft As Single
Dim tp As Single
On Local Error Resume Next
' idem con los textboxes
lft = Me.TextBox1(0).Left
tp = Me.TextBox1(0).Top
For i = 1 To 50
If i Mod 10 = 0 Then
lft = lft + Me.TextBox1(0).Width + 100
tp = Me.TextBox1(0).Top
End If
Load Me.TextBox1(i)
Me.TextBox1(i).Top = tp
Me.TextBox1(i).Left = lft
Me.TextBox1(i).Visible = True
tp = tp + Me.TextBox1(0).Height + 20
Next i
End Sub
Private Sub TextBox1_Click(Index As Integer)
On Local Error Resume Next
MsgBox "Has clickado sobre el text nº " + CStr(Index)
End Sub
-
Gracias.
Karlos