none
Obtener valor de un textbox desde otro formulario RRS feed

  • Pregunta

  • Estimados

           Junto con saludarlos, deseo realizar la consulta de como obtener el valor desde un textbox que se encuentra en otro formulario. He realizado varios codigos para obtener dicho valor pero obtengo un valor nulo, es posible que alguien pueda ayudarme en este problema, ya que deseo obtener el valor cada vez que cambie el texto de dicho textbox

    private void button1_Click(object sender, EventArgs e)
            {
                UserAccess access = new UserAccess();
                MessageBox.Show(access.TextBox1.Text);
            }

    Este codigo es para saber que tengo en mi textbox del formulario padre


    miércoles, 16 de agosto de 2017 12:43

Respuestas

  • hola

    >>lo que deseo realizar ya que es entregar informacion del formulario padre al formulario hijo sin que se abra una nueva ventana.

    Como te comentaba deberas exponer un evento en el form padre y que el form hijo se adjunte al mismo para recibir notificaciones

    lo que planteas no es solo pasar un dato del padre la hijo, sino mantenerlos comunicados ante cualquier cambio, por eso los eventos

    Igualmente para que esto suceda deberas pasar la instancia del form padre al hijo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 18 de agosto de 2017 15:04

Todas las respuestas

  • Buenas,

    no es la mejor manera esa que haces, ya que para eso estan los interfaces, pero para hacerlo rapido puedes hacerlo asi:

    rivate void button1_Click(object sender, EventArgs e)
    {
        UserAccess access = new UserAccess();
        access.ShowDialog();
        MessageBox.Show(access.TextBox1.Text);
    }
    atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!

    miércoles, 16 de agosto de 2017 12:52
  • Estoy utilizandi interfaces en mi formulario padre para obtener del hijo los datos pero requiero que el padre entregue informacion al hijo y no se como realizarlo
    miércoles, 16 de agosto de 2017 13:19
  • Sobre el codigo especificado me abre nuevamente el formulario padre pero sin la informacion del MessageBox
    miércoles, 16 de agosto de 2017 13:22
  • hola

    no puedes usar el new creando una nueva instancia del form ya que no estarias accediendo a la instancia existente con el dato que quieres recuperar

    deberias aplicar esta tecnica

    Comunicar Formularios

    como veras pasas la instancia del form al otro mediente el constructor para acceder a los datos de este

    lo ideal es exponer una interfaz para desacoplar la comunicacion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Jorge TurradoMVP miércoles, 16 de agosto de 2017 14:21
    miércoles, 16 de agosto de 2017 13:37
  • Concuerdo con tu respuesta, pero el problema que tengo es que deseo que el padre entregue informacion al hijo y al formulario padre ya posee dos diferentes interfaces y lo que deseo realizar es que por cada vez que cambie el textbox del formulario padre, este sea recibido por el textbox del formulario hijo
    miércoles, 16 de agosto de 2017 13:47
  • hola

    >>al formulario padre ya posee dos diferentes interfaces

    pero para que usas estas interfaces ?

    >>lo que deseo realizar es que por cada vez que cambie el textbox del formulario padre, este sea recibido por el textbox del formulario hijo

    entiendo que entonces no son forms modales, por lo que el padre podria estar por delante del form hijo

    en ese caso deberias validad el uso de eventos, el form padre exponer un evento custom al cual se adjunte el form hijo, sabes como exponer eventos?

    Handling and Raising Events

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 16 de agosto de 2017 14:06
  • Dichas interfaces que van desde el formulario hijo al formulario padre son dos diferentes TextBox los cuales le entregan informacion a mi TextBox de usuario y contraseña correspondientemente para realizar el llenado de estos, y para realizar la validacion de cada texto. Para esta validacion se debe obtener el valor de el textbox que se encuentra en el formulario padre y este se entregue al formulario hijo.

    public partial class UserAccess : Form, IForm, IFormPass
        {
            // Variables para la seleccion Tab
            static int increment_elemtos = 1;
            static int max_elemtos = 5;
            private UserAccess instance;
    
    
            public UserAccess()
            {
                InitializeComponent();
                instance = this;
    
                backgroundWorkerFTP.RunWorkerAsync();
                backgroundWorkerDBlocal.RunWorkerAsync();
            }
    
            #region IForm Members
            public void ChangeTextBoxText(string text)
            {
                if (TextBox1.Text == "1")
                {
                    txtUser.Text = text;
                }
                else
                {
                    if (TextBox1.Text == "2")
                    {
                        txtPass.Text = text;
                    }
                }
            }
            #endregion
    }


    El llamado de dichas interfaces

    private void button2_Click(object sender, EventArgs e)
            {
                NumericTouch alfa = new NumericTouch(instance);
                alfa.Show(this);
            }

    La utilizacion de las interfaces en mi formulario hijo para ser entregadas a mi formulario padre

    private void btnQ_Click(object sender, EventArgs e)
            {
                if (TextBox3.Text == "1")
                {
                    if (CbxCaps.Checked)
                    {
                        TextBox1.Text = TextBox1.Text + "Q";
                    }
                    else
                    {
                        TextBox1.Text = TextBox1.Text + "q";
                    }
                    IForm formInterface = this.Owner as IForm;
    
                    if (formInterface != null)
                        formInterface.ChangeTextBoxText(TextBox1.Text);
                }
                else
                {
                    if (TextBox3.Text == "2")
                    {
                        if (CbxCaps.Checked)
                        {
                            TextBox2.Text = TextBox2.Text + "Q";
                        }
                        else
                        {
                            TextBox2.Text = TextBox2.Text + "q";
                        }
                        IFormPass formPass = this.Owner as IFormPass;
                        if (formPass != null)
                            formPass.ChangeTextBoxText(TextBox2.Text);
                    }
                }
            }

    Para dichas interfaces se requiere validar por medio del TextBox3 cuyo valor se encuentra en el formulario padre con el nombre de Textbox1
    miércoles, 16 de agosto de 2017 14:30
  • Mi idea es crear una nueva interfaz que obtenga los datos del Textbox del formulario padre sin que se abra una nueva ventana o formulario para que se realice a instancia. Pero que obtenga cada valor que reciba dicho textbox para realizar la validacion de las interfaces ya creadas.
    miércoles, 16 de agosto de 2017 14:35
  • hola

    NumericTouch alfa = new NumericTouch(instance);
    alfa.Show(this);

    no se que sera la "instance" que asignas, pero si pasas la instancia del form en el constructor no necesitas pasarla en el Show()

    analiza el articulo que sugeri anteriormente alli lo explico con mas detalle

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 16 de agosto de 2017 18:20
  • El instance es una variable que define el UserAccess... El metodo que tengo al realizar el Show es para abrir el formulario hijo para que pueda recibir el formulario padre dichos datos. Eso seria una comunicacion de padre a hijo pero me gustaria saber como seria de hijo a padre que es lo que deseo realizar ya que ambas interfaces estan listas y me falta que sea posible que se valide segun el textbox del formulario
    miércoles, 16 de agosto de 2017 21:11
  • Hola

    pero me gustaria saber como seria de hijo a padre que es lo que deseo realizar

    Para comunicar formularios de Hijo a Padre y pasar información de un control Textbox puedes hacerlo implementando interfaces, como te lo a recomendado @Leandro, puedes hacer lo siguiente.

    Interface

    public interface IComunicationAction
        {
            void Valor(string _dato);
        }
     

    Formulario Hijo

    public partial class Form2 : Form
        {
            public IComunicationAction Opener { get; set; }
            public Form2()
            {
                InitializeComponent();
            }
    
            private void btnClose_Click(object sender, EventArgs e)
            {
                //Ejecutamos el método
                Opener.Valor(textBox1.Text);
                //Cerramos el formulario
                Close();
            }
        }

    Formulario Padre

    public partial class Form1 : Form, IComunicationAction
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            public void Valor(string _dato)
            {
                lblMensaje.Text = _dato;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                var frm = new Form2();
                //Se pasa la instancia del formulario
                frm.Opener = this;
                frm.ShowDialog();
            }
        }

    Resultado

    Otra opción puede ser de la siguiente manera, revisa este link Comunicar Formularios usando Easy.MessageHub

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    jueves, 17 de agosto de 2017 6:43
  • Hola:

     Podrías revisar lo que sugiero en este articulo, el envió de información es inmediato:

    Pasar datos de un DataGridView a otro DataGridView ubicados en Forms diferentes 

     Solo tienes que usar el evento TextChanged de un control TextBox y listo, la idea es comunicar ambos formularios por medio de una interfaz.

    Aquí el código de descarga en C#:

     DataGridViewSendDataChildToParent 

    Espero te sea de utilidad


    Saludos desde Monterrey, Nuevo León, México!!!

    viernes, 18 de agosto de 2017 5:16
  • Estimados

           Gracias por sus respuestas, y el codigo entregado por Pedro Avila fue de utilidad aunque no es lo que deseo realizar ya que es entregar informacion del formulario padre al formulario hijo sin que se abra una nueva ventana. Ademas de tener problemas en parte con la comunicacion desacoplada ya que el formulario padre ya posee interfaces anexadas a él y al entregar una nueva interfaz de padre a hijo este pierde el foco del formulario...

    viernes, 18 de agosto de 2017 13:34
  • hola

    >>lo que deseo realizar ya que es entregar informacion del formulario padre al formulario hijo sin que se abra una nueva ventana.

    Como te comentaba deberas exponer un evento en el form padre y que el form hijo se adjunte al mismo para recibir notificaciones

    lo que planteas no es solo pasar un dato del padre la hijo, sino mantenerlos comunicados ante cualquier cambio, por eso los eventos

    Igualmente para que esto suceda deberas pasar la instancia del form padre al hijo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 18 de agosto de 2017 15:04