none
Cargar datos en form-VC++ RRS feed

  • Pregunta

  • Hola,

    Tengo un problema al abrir un form hijo.

    Ciertos controles no se cargan bien al llamarlo, viéndose transparentes o no realizando su función, a no ser que se mueva el form con el ratón y se actualizen dichos controles.

    Tras muchas depuraciones e ir deshaciendo pasos he descubierto cuál es el problema. Este form carga datos desde un .XML, al hacer uso de estos datos aparece este problema. El fichero XML lo creé como solución al intercambio de datos pensando que le quitaría carga al form. Antes los datos se los pasaba el form padre a través de variables públicas, pero daba el mismo fallo.

    ¿Cómo podría solucionar esto?

    Gracias.

     


    Liiid
    jueves, 7 de julio de 2011 11:01

Respuestas

  • Hola Liiid:

    La idea de pasar el Xml no me parece buena puesto que te cuesta primero crear el xml y después leerlo, con lo cual lo que te aconsejo es que sigas

    pasando las variables como lo hacías al principio, si puedes:).

     

    Se me ocurre que hagas los siguiente:

    en vez de crear multiples variables crea una clase que las agrupe a todas.

    public class Parametros

        {

            public int Var1 { get; set; }

            public int Var2 { get; set; }

     

        }

    En el formulario destino crea un constructor de la siguiente forma()

     

    public Form1(Parametros Parametros):this()

    {

          this.textBox1.Text = Parametros.Var1.ToString();

          this.textBox2.Text = Parametros.Var2.ToString();

    }

     

    Desde el origen lanzalo de la siguiente forma:

     

    Parametros p = new Parametros() { Var1 = 10, Var2 = 20 };

    Form6 frm = new Form6(p);

    frm.Show();

     

    Prueba con esto. Lo que intento hacer es asignar valores a los controles antes de que se produzca el refresco de los controles. Si te sigue dando problemas prueba a dejar el constructor donde asignas valores de la siguiente forma:

     

    public Form1(Parametros Parametros):this()

    {

          this.SuspendLayout();

          this.textBox1.Text = Parametros.Var1.ToString();

          this.textBox2.Text = Parametros.Var2.ToString();

          this.ResumeLayout(false);

    }

     

    Saludos.


    phurtado
    • Marcado como respuesta Liiid lunes, 11 de julio de 2011 10:16
    jueves, 7 de julio de 2011 11:20

Todas las respuestas

  • Hola Liiid:

    La idea de pasar el Xml no me parece buena puesto que te cuesta primero crear el xml y después leerlo, con lo cual lo que te aconsejo es que sigas

    pasando las variables como lo hacías al principio, si puedes:).

     

    Se me ocurre que hagas los siguiente:

    en vez de crear multiples variables crea una clase que las agrupe a todas.

    public class Parametros

        {

            public int Var1 { get; set; }

            public int Var2 { get; set; }

     

        }

    En el formulario destino crea un constructor de la siguiente forma()

     

    public Form1(Parametros Parametros):this()

    {

          this.textBox1.Text = Parametros.Var1.ToString();

          this.textBox2.Text = Parametros.Var2.ToString();

    }

     

    Desde el origen lanzalo de la siguiente forma:

     

    Parametros p = new Parametros() { Var1 = 10, Var2 = 20 };

    Form6 frm = new Form6(p);

    frm.Show();

     

    Prueba con esto. Lo que intento hacer es asignar valores a los controles antes de que se produzca el refresco de los controles. Si te sigue dando problemas prueba a dejar el constructor donde asignas valores de la siguiente forma:

     

    public Form1(Parametros Parametros):this()

    {

          this.SuspendLayout();

          this.textBox1.Text = Parametros.Var1.ToString();

          this.textBox2.Text = Parametros.Var2.ToString();

          this.ResumeLayout(false);

    }

     

    Saludos.


    phurtado
    • Marcado como respuesta Liiid lunes, 11 de julio de 2011 10:16
    jueves, 7 de julio de 2011 11:20
  • Ok!Las variables las tenía ya agrupadas por clases he probado a dar algunos valores en el constructor y parece que funciona.

    Mi duda es que al ser parámetros de configuración que en función de su valor se realizan unas acciones u otras con los controles quizás sobrecargue al constructor....¿hay algún poroblema con esto?

    (El XML lo necesitaba para guardar los datos de configuración)

    Gracias por la respuesta y por la rapidez!


    Liiid
    jueves, 7 de julio de 2011 14:12
  • Hola Liiid:

     

    Si son parametros de configuración lo normal es que los carges en el inicio de la app y los mantengas durante toda la vida de la app. Para esto puedes utilizar clases que tengan propiedades definidas como estáticas, o por lo menos así lo hago yo. 

     

    De todas formas si esto es así ya no necesitas pasar parametros en los constructores sino en el constructor del Formulario asignar lo que necesitas a los controles después de InicializeComponent(), ya que esos valores los tienes leidos desde el principio.

     

    Saludos.

     


    phurtado
    jueves, 7 de julio de 2011 14:29
  • En realidad, son datos de configuración que puede cambiar el usuario por eso no son datos fijos.

    Pero cargándolos en el constructor solucioné el problema.

     

    Gracias!.


    Liiid
    lunes, 11 de julio de 2011 10:19