none
Enviar variables mediante Modifiers public RRS feed

  • Pregunta

  • buenos días,

    estoy intentando enviar informacion de un formulario hijo al formulario padre, para ello cambie la propiedad Modifiers de un textbox a Public.

    en el formulario hijo hago lo siguiente:

    PPIFORM frm = new PPIFORM();
    frm.sOLICITUD_BYTETextBox.Text = solicitud;
    no da ningun error, pero en el formulario padre no muestra nada, Hay algo mas por hacer!?
     

    carlos márquez

    • Cambiado webJoseModerator viernes, 28 de diciembre de 2012 15:22 (De:Lenguaje C#)
    viernes, 28 de diciembre de 2012 14:46

Respuestas

  • Sus sugerencias fueron consideradas, sin embargo lo resolví de la siguiente manera y sin poner publico ninguna propiedad de algun control

    En el formulario hijo:

    public string nsolicitud = string.Empty;
    string solicitud = Convert.ToString(dataGridView1[0, valor].Value);
    
    nsolicitud = solicitud;
    

    y en el formulario padre:

    PPIBUSCA frm = new PPIBUSCA(identificacion);
             frm.ShowDialog();
    sOLICITUD_BYTETextBox.Text = frm.nsolicitud;

    De esta forma lo he resulto y como ven no coloque ninguna propiedad de algun control como publico.

    carlos márquez

    • Marcado como respuesta Carlos Márquez viernes, 28 de diciembre de 2012 19:21
    viernes, 28 de diciembre de 2012 19:20

Todas las respuestas

  • Ese código suyo crea un formulario nuevo, asigna la propiedad Text  y no lo muestra.  Si usted pretendía modificar un formulario existente, ese no es el camino.

    //Agregue un constructor a su formulario hijo que acepte una referencia al formulario padre:
    private PPIFORM _fPadre;
    public FHijo(PPIFORM padre)
    {
        _fPadre = padre;
    }

    Ahora puede usar _fPadre para comunicarse con el formulario padre en vez de crear uno nuevo.

    Le hago notar, sin embargo, que no suele ser buena idea hacer los controles de un formulario públicos.  Pero en fin, eso es "harina de otro costal". 


    Jose R. MCP
    Code Samples

    viernes, 28 de diciembre de 2012 15:00
    Moderador
  • Ya tengo 2 constructores en el formulario hijo, el que viene por defecto y otro para enviar del padre al hijo, puedo crear un tercer constructor!?

    carlos márquez

    viernes, 28 de diciembre de 2012 15:06
  • hice lo que me sugeriste con lo del constructor, ahora bien intente envíar la variable de esta forma:

    _fpadre.sOLICITUD_BYTETextBox.Text = solicitud;

    me lanza aparte del error una sugerencia: que use la sentencia new y este error

    No se controló System.NullReferenceException
      Message="Referencia a objeto no establecida como instancia de un objeto."
     


    carlos márquez

    viernes, 28 de diciembre de 2012 15:15
  • Eso es porque algún objeto involucrado en la sentencia es nulo.  Depure en Visual Studio y determine qué parte es nula:  Si _fpadre o si sOLICITUD_BYTETextBox.  Si fuere _fpadre entonces quiere decir que usted no está asignando el valor correctamente dentro del constructor.  Muéstrenos su constructor.

    Jose R. MCP
    Code Samples

    viernes, 28 de diciembre de 2012 15:21
    Moderador
  • private PPIFORM _fpadre;
     
    public PPIBUSCA(PPIFORM padre)
            {
                _fpadre = padre;
            }

    El constructor quedó así y luego lo que comente antes:

    _fpadre.sOLICITUD_BYTETextBox.Text = solicitud;


    carlos márquez

    viernes, 28 de diciembre de 2012 15:23
  • Ok, depure y díganos cuál parte es nula.

    Jose R. MCP
    Code Samples

    viernes, 28 de diciembre de 2012 15:26
    Moderador
  • Puse un break y la parte de _fPadre me aparece null

    carlos márquez

    viernes, 28 de diciembre de 2012 15:28
  • Ok, muéstrenos cómo construye usted el formulario hijo.  Debe de ser usando el nuevo constructor para que _fpadre sea no-nulo.  En el formulario padre debe usted crear al formulario hijo así:

    //Asumiendo que este código está dentro del formulario padre:
    FHijo hijo = new FHijo(this);  //Nótese el uso de "this".  Así le digo al hijo quién es su padre.
    hijo.Show();
    

    Si no puede o tiene usted algo así, entonces trate de hacerlo así.  Si por alguna razón no puede usar esto entonces me lo hace saber.


    Jose R. MCP
    Code Samples

    viernes, 28 de diciembre de 2012 15:33
    Moderador
  • lo que esta explicando Jose es lo mismo que mencione en la otra pregunta que realizaste sobre el tema cuando propuse el link

    [WinForms] – Pasaje de información formulario hijo

    solo que el no pasa un valor simple sino la instancia del form completa

    yo la verdad no lo recomendaria pero bueno, veo que la tecnica que mencione no te intereso

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 28 de diciembre de 2012 19:11
  • Yo también le hice notar que no es muy bueno hacer eso de cambiar los controles a públicos (ver primera respuesta), pero en fin, hay cosas más graves así que no quise darle otro problema además del que tiene.  Con el tiempo y la experiencia se dará cuenta. :-)

    Jose R. MCP
    Code Samples

    viernes, 28 de diciembre de 2012 19:14
    Moderador
  • Sus sugerencias fueron consideradas, sin embargo lo resolví de la siguiente manera y sin poner publico ninguna propiedad de algun control

    En el formulario hijo:

    public string nsolicitud = string.Empty;
    string solicitud = Convert.ToString(dataGridView1[0, valor].Value);
    
    nsolicitud = solicitud;
    

    y en el formulario padre:

    PPIBUSCA frm = new PPIBUSCA(identificacion);
             frm.ShowDialog();
    sOLICITUD_BYTETextBox.Text = frm.nsolicitud;

    De esta forma lo he resulto y como ven no coloque ninguna propiedad de algun control como publico.

    carlos márquez

    • Marcado como respuesta Carlos Márquez viernes, 28 de diciembre de 2012 19:21
    viernes, 28 de diciembre de 2012 19:20
  • no colocaste propiedades pero defines una variable publica a nivel del formulario cuando haces esto

    public string nsolicitud

    que es mucho peor, si quieres programar orientado a objetos eso no se hace, se usan propiedades


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 28 de diciembre de 2012 21:21