Autor Tema: Semana 8 - Ejercicio 8 curso bases de la programación I tutorizado online  (Leído 4973 veces)

karlos

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
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
« Última modificación: 05 de Septiembre 2014, 10:30 por Alex Rodríguez »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:Semana 8 - Ejercicio 8
« Respuesta #1 en: 07 de Febrero 2013, 16:40 »
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.


karlos

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Semana 8 - Ejercicio 8
« Respuesta #2 en: 07 de Febrero 2013, 22:37 »
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

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:Semana 8 - Ejercicio 8
« Respuesta #3 en: 08 de Febrero 2013, 08:54 »
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

karlos

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Semana 8 - Ejercicio 8
« Respuesta #4 en: 09 de Febrero 2013, 11:41 »
Gracias.

Karlos

 

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".