pasar datos entre varios formularios a un mismo form en c sharp

Answered pasar datos entre varios formularios a un mismo form en c sharp

  • viernes, 27 de abril de 2012 20:27
     
     
    Hola tengo la siguiente consulta no se si es posible, tengo un formulario donde se carga muchos datos de Clientes, en un campo traigo de otro formulario datos que estan en un datagridview y hasta ahi todo bien (uso uno de los modelos de ejemplo con constructores de Leandro tuttini), pero necesito como minimo hacer esto para otros 2 cajas de texto mas y de otros formularios que ninguno de los tres son de los mismos form donde tendria que traer el dato, esto es posible? como hago esto sin perder los datos de las variables traidos anteriormente? y sino hay una manera de hacerlos tipo popup como en .net, que haciendo esto no pierdo las variables??? gracias de antemano.....en realidad ahora que lo miro necesito traer datos de unos 5 formularios diferentes en total

Todas las respuestas

  • viernes, 27 de abril de 2012 22:55
    Moderador
     
     
    Lo siento Laura, no entiendo bien su situación.  Entiendo la esencia del predicamento, creo yo:  Compartir información entre formularios; lo que no estoy entendiendo bien es qué tipo de información (datos en un DataSet, datos en una colección de objetos, etc.) y cómo utilizará esa información en los otros formularios.  Tal vez si explica un poco más detalladamente cómo es que usted actualmente recupera y almacena los datos, entonces podremos ayudarle mejor.

    Jose R. MCP

  • viernes, 27 de abril de 2012 23:06
    Moderador
     
     

    hola

    si has logrado comunicar un form con otro, el hacerlo desde otros botones solo implcia replicar la misma tecnica

    solo que lo harias con un form distinto, seria

    private void button1_click(..){

        Form1 frm1 = new Form1(TextBox1.Text);

        frm1.Show()

    }

    private void button2_click(..){

        Form2 frm2 = new Form2(TextBox2.Text);

        frm2.Show()

    }

    como veras se repite la tecncia pero con otro form y otro textbox

    como hago esto sin perder los datos de las variables traidos anteriormente?

    pero cuale sserian estas variables ?

    porque se supone que la info la termina conservando el form que inicia o sea el principal

    una consulta, el problema lo tienes al enviar datos al form hijo, o a la vuelta cuando desde el hijo envias info al forma que lo invoco

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

  • martes, 01 de mayo de 2012 14:22
     
     

    Hola.

    Si lo que quieres es lo que supongo, o sea, pasar informacion entre formularios pero sin perder la referencia, deberias usar la sobrecarga de los Formularios que recibien informacion como te dice Leonardo.

    En lo personal me gusta usar objetos, asi los instancio una sola vez y luego los paso entre formularios sin perder la referencia.

    Saludos.

  • miércoles, 02 de mayo de 2012 13:02
     
     

    bien siguiendo con este tema de pasar datos de varios formularios a un mismo formulario , sigo sin lograr mantener los datos que traje de los anteriores, despues de traer el ultimo que visité. o sea que pierdo los valores de las ultimas visitas, mas o menos este es el codigo que tengo de traer datos de dos formularios distintos, que me faltaría para mantener esos datos sin perderlos???

    formulario detalle el que llamara a los formularios a consultar para traer los datos

      

     public partial class Clientes : Form
        {
            private int? idbusqueda= null;
            private string descripcion = string.Empty;
            private string _idbusqueda = "";

            public string IdBusqueda
            {
            get 
                {
                    return _idbusqueda; 
                }

                set
                {
                    _idbusqueda = value;
                }
            }


            public Clientes()
            {
                InitializeComponent();
            }


        public Clientes(int idbusqueda, string descripcion) : this()//para traer los datos de la afip
        {
            this.idbusqueda = idbusqueda;
            this.descripcion  = descripcion;

        }


        private void Clientes_Load(object sender, EventArgs e)
         {
             // TODO: esta línea de código carga datos en la tabla 'localidadesDataSet.Localidad' Puede moverla o quitarla según sea necesario.
             this.localidadTableAdapter.Fill(this.localidadesDataSet.Localidad);

             // TODO: esta línea de código carga datos en la tabla 'provinciaDataSet.Provincia' Puede moverla o quitarla según sea necesario.
             this.provinciaTableAdapter.Fill(this.provinciaDataSet.Provincia);  

            //valores iniciales
              //dtpFecha.Value =DateTime.Now;
              txtCodCliente.Text = Convert.ToString(AutonumericoId ());
              dtp_FechaVtoSedronar.Value = DateTime.Now.AddYears(1);
              dtp_FechaVtoIVA.Value = DateTime.Now.AddYears(1);
              dtpFechaVtoPercepDGR.Value = DateTime.Now.AddYears(1);

            //DATOS TRAIDOS DE OTROS FORMULARIOS
              if (idbusqueda.HasValue)//del form de afip
              txtAFIP.Text = Convert.ToString(idbusqueda);
              lblActividad.Text = descripcion;

              txtContactoVendedor .Text  = Convert.ToString(_idbusqueda);//del form de vendedor
        }

    ***********************************************

    formularios padres

    **********************************************

               

    private void dgrv_AFIP_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                DataGridViewRow row = dgrv_AFIP.CurrentRow;

                int idbusqueda = Convert.ToInt32(row.Cells[0].Value);
                string descripcion =Convert .ToString (row.Cells[1].Value).Trim ();
                lblCodAct.Text = Convert.ToString(idbusqueda);

                Clientes  form = new Clientes (idbusqueda,descripcion);
                this.Hide();
                form.Show();

            }

    ****************************************************************

      private void dgrv_Vendedores_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                DataGridViewRow row = dgrv_Vendedores.CurrentRow;
                string idbusqueda = Convert .ToString  (row.Cells[1].Value);

                Clientes  form = new Clientes ();
                form.IdBusqueda =idbusqueda;
                this.Hide();
                form.Show();

            }

  • miércoles, 02 de mayo de 2012 18:48
     
     Respondida

    Hola.

    Como dije en mi comentario anterior, lo ideal seria que uses Clases, por ejemplo:

    public class Buscar

    {

    public int? BuscarID{get; set; }

    public string Descripcion{ get; set; }

    }

    entonces en el contructor de tu formulario cuando lo instancias le pones como argumento una intancia de la clase Buscar, ejemplo:

    Buscar id = new Buscar();

    id.BuscarID =1;

    id.Descripcion ="Hola";

    var c = new Cliente(id);

    Por otro lado, el contructor de tu formulario deberia ser algo como:

    Buscar buscar=null;

    public Clientes(Buscar b)
        {
           this.buscar = b;
        }

    private void Clientes_Load(object sender, EventArgs e)
     {

    txtClienteID.Text = buscar.BuscarID.Value.ToString();

    txtDescripcion.Text = buscar.Descripcion;

    }

    Con esto tendrias referencia al mismo objeto en todos los formularios que lo pases.

    OJO: si cierrar el formulario en el que se creo la instancia esta es borrada de memoria.

    PD: Te recomiendo que le cambies el nombre al formulario, ya que parece el nombre de una Clase cliente y no un formulario.

    Saludos.



    • Editado By AlaN miércoles, 02 de mayo de 2012 18:48
    • Editado By AlaN miércoles, 02 de mayo de 2012 18:51 Add Code
    • Marcado como respuesta Laura Arevalo martes, 15 de enero de 2013 21:27
    •