none
Ejecutar método desde otro formulario. RRS feed

  • Pregunta

  • Hola, estoy queriendo ejecutar un método de un formulario desde otro; he realizado varias veces lo de crear un contraro para poder comunicarlos pero esta vez no me parece necesario ya que entre los formularios no voy a pasar ningún parametro, solo quiero ejecutar un método.

    El método a ejecutar es este.

    public void UpdateTotalFactura()
            {
                dgvRepartos.Rows[0].Cells["colVenta"].Value = "5";
            }
    Donde en la primer columna de mi DataGridView en la columna "colVenta" establecería un valor de 0, nada raro.
    Y el método funciona ya que si ejecuto desde el mismo formulario mediante un botón trabaja perfecto.

    Ahora bien, para ejecutar ese método desde el otro formulario lo he intentando mediante el evento formClosing, formClosed y mediante un botón.

    private void formCargaPedido_FormClosed(object sender, FormClosedEventArgs e)
            {
                formRepartos frm = new formRepartos();
                frm.UpdateTotalFactura();
            }
    
            private void formCargaPedido_FormClosing(object sender, FormClosingEventArgs e)
            {
                formRepartos frm = new formRepartos();
                frm.UpdateTotalFactura();
            }

    El error que me da es que el índice está fuera del intervalo. Podría entenderlo en el caso de ejecutar un método que actualize el valor de esa columna desde el segundo formulario.
    Pero estoy ejecutando un método que está en el primer formulario, donde actualiza datos del dataGridView del mismo formulario.
    Obviamente estoy seguro que la row[0] si existe ya que la estoy viendo.

    Espero ayuda, muchas gracias.

    martes, 5 de abril de 2016 12:21

Respuestas

  • hola

    no puedes hacer el "new" del form porque estarias creando una nueva instancia, debes ejecutar el metodo sobre la instancia existente

    aqui

    Comunicar Formularios

    explico una buena tecnica para poder realizar lo que planteas, como veras usas interfaces para pasar la instancia de un form al otro, mediente el constructor

    analiza el articulo, pero seguro con esa tecnica resuelves el problema

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 5 de abril de 2016 12:47

Todas las respuestas

  • Tu error no está en el evento que usas, sino en esta sentencia:

     formRepartos frm = new formRepartos();

    Si usas "new" para crear una nueva instancia de formRepartos, evidentemente esa nueva instancia tiene vacío el grid, por lo que no es cierto que exista la row[0] como afirmas en tu mensaje. La que estás viendo la estás viendo sobre otra instancia del formRepartos que creaste antes, no sobre la que acabas de crear en este evento que está vacía y no se ve en pantalla.

    martes, 5 de abril de 2016 12:41
    Moderador
  • hola

    no puedes hacer el "new" del form porque estarias creando una nueva instancia, debes ejecutar el metodo sobre la instancia existente

    aqui

    Comunicar Formularios

    explico una buena tecnica para poder realizar lo que planteas, como veras usas interfaces para pasar la instancia de un form al otro, mediente el constructor

    analiza el articulo, pero seguro con esa tecnica resuelves el problema

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 5 de abril de 2016 12:47
  • Claro tenés razón, la verdad que no me había dado cuenta de eso pero es lógico.
    Esta tarde chequeo el artículo y veo si puedo resolver el problema, cualquier cosa te consulto. saludos y muchas gracias!.
    martes, 5 de abril de 2016 13:39