none
caracteristicas de objetos al abrir formulario RRS feed

  • Pregunta

  • Hola, tengo la siguiente consulta: tengo un programa en el que abro y cierro un formulario. Cuando está abierto, puedo hacer click en los labels y cambiar el color. Cada vez que hago click en un label, consulta una matriz, y si tiene escrito "SI" quiere decir que es blanco, y si tiene escrito "NO" quiere decir que es gris. Cuando hago click, cambia de color el label, y guarda "SI" o "NO" en la la matriz (sobreescribe)

    El problema es que al cerrar el formulario y volverlo a abrir, todos los labels vuelven a ser blancos. Sin embargo, la matriz mantiene los resultados correctamente. Pero no puedo acceder a ella en el evento load del formulario, para volver a asignar los colores a los labels.

    Este es el programa:

    Public Class form1
        Dim lst As New List(Of Label) From {
     Me.Label1, Me.Label2, Me.Label3, Me.Label4, Me.Label5}
        Dim xlabel As Control

        Private Sub form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim indice As Integer

            For i As Integer = 1 To total
                For Each xlabel As Control In lst
                    If matriz(i) = "SI" Then
                        xlabel.BackColor = Color.White <<<<<ERROR; Referencia a objeto no establecida como instancia de un objeto.
                    Else
                        xlabel.BackColor = Color.DimGray <<< aca el mismo error
                    End If
                Next
            Next

        End Sub

    En este caso total esta cargado con 5.

    Espero que puedan ayudarme. Gracias

    PD: el programa es en visual studio 2010


    • Editado Martin_lp jueves, 10 de octubre de 2013 3:32
    jueves, 10 de octubre de 2013 3:28

Todas las respuestas

  • Puede ser que en vez de descargar el formulario lo estés ocultando y por eso no entra en el evento load(). Como cierras ese form??

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    jueves, 10 de octubre de 2013 6:50
  • Yo de ti haría dos subs más, uno que controlara el color que tenga el label y otro que asigne el color nuevo al label que has tocado.

    Entonces, desde el form_load, llamaría al sub de los colores de los labels para ver que color tienen. Si lo haces como lo haces, siempre serán grises.

    Voy a ver si lo saco y te pego el código.

    Saludos!

    jueves, 10 de octubre de 2013 8:34
  • Me auto-respondo... Claro, al cargar el evento Load lo que haces es cargar los labels tal y como estaban al principio (grises).

    El tema de sobreescribir código no sé como va, pero lo que podrías hacer es cargar los colores de los labels desde un fichero, así evitarías que al cargar el formulario vuelvan a estar como estaban en un principio.

    Es decir, en vez de cargar los colores desde el evento load, el evento cargaría un fichero con los colores actualizados (ya que están escritos). Y si cambias, tendrías que entrar dentro del fichero y sobreescribir esa linea en concreto.

    No se me ocurre otro modo...

    Saludos!

    jueves, 10 de octubre de 2013 8:49
  • Hola. Gracias por la respuesta. Mi problema consiste en que al cargar el formulario tiene que volver a cargar los objetos que contiene (los label) con un determinado color (blanco o gris) dependiendo el valor que tenga asignado una matriz.

    En el programa, tengo una matriz que se carga por ejemplo asi: "SI","SI","NO","NO","SI"

    entonces cuando abro de nuevo el formulario tiene que recorrer ese arreglo y ver si dice SI que lo cargue con fondo gris, o si dice NO que lo cargue con fondo blanco.

    Estoy trabado hace dias con esto, y no puedo solucionarlo 

    jueves, 10 de octubre de 2013 15:28