none
Evitar ejecutar un evento FormClosing si no se cumple una condicion RRS feed

  • Pregunta

  • Hola a todos 
    tengo un problema 

    tengo un formulario (Formulario1) donde mando a llamar a otro(Formulario2) el cual se conecta al puerto serial para recibir datos al instante, la cosa es que cuando tengo un serial usandolo no tengo problemas, el problema radica cuando no lo detecta, cuando no detecta puertos disponibles cierra el formulario de inmediato, pero tengo un evento FormClosing donde unicamente tengo esto 

    if (serialPort1.IsOpen)
                {
    serialPort1.Close();
    }

    el detalle aquí es que me marca el siguiente error en el formulario1 justo en el ShowDialog:

    No se puede obtener acceso al objeto desechado.
    Nombre del objeto: 'Formulario2'.'

    quiero pensar que ese error es por que trata de ejecutar el evento fromClosing 




    Este es mi codigo del formulario padre

               

     private void button1_Click(object sender, EventArgs e)
            {
                MainForm mf = new MainForm();
                mf.ShowDialog();
                if(peso >= 0)
                {
                    txtPeso.Text = Convert.ToString(peso);
                }
                else
                {
                    peso = 0;
                    txtPeso.Text = "0";
                }

            }



    y este otro es el que se ejecuta al instante en el formulario hijo

    public Formulario2()
    {
    serialPort1.PortName = "COM4";

    if (!serialPort1.IsOpen)
    {
    try
    {
    serialPort1.Open();

    }
    catch (Exception ex)
    {

    MessageBox.Show("El puerto no esta disponible\n O la bascula esta desconectada" + ex);

    this.Close();
    }
    }
    }

    miércoles, 22 de julio de 2020 21:15

Respuestas

  • Hola:

    Tu código.

    // ¿El puerto serie está abierto?

    if (serialPort1.IsOpen) {
    // Sí. Cierro el puerto serie. serialPort1.Close(); }

    // No. Continuo por aquí abajo ejecutando instrucciones...

    Si detecta el puerto serie abierto, ejecuta lo que tienes entre llaves, es decir, vuelve a cerrar el puert serie. Lo abres, como lo detecta, lo vuelves a cerrar.

    Otra cosa, tienes que tener puerto serie sea físico o virtual para que no tengas problemas.

    Aquí dejo enlace de sietes programas de crear puertos virtuales.

    Vamos a suponer que tienes un Pc o ordenador, en el cual tienes dos formularios Windows Form.

    ¿Tu idea es enviar mensaje de texto de un formulario a otro?

    Pues debes tener dos puertos serie COM1 o COM2.

    No olvidar que si en la placa base ya no incluye puerto serie físico, puedes tenerlo instalando placas PCI apartes.

    Saludos.

    PD: Los temas del puerto serie deben estar en esta sección del foro.


    http://electronica-pic.blogspot.com









    • Editado Metaconta miércoles, 22 de julio de 2020 23:28
    • Marcado como respuesta Kevin Alcantara miércoles, 12 de agosto de 2020 18:06
    miércoles, 22 de julio de 2020 23:15

Todas las respuestas

  • Hola Kevin Alcantara, 

      

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma me gustaría saber si ya ha debugueado el código para ver en que linea específicamente es que cierra el form2 y de esa forma ya podríamos saber en donde se esta presentando el problema

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.   

    Eric Ruiz

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    miércoles, 22 de julio de 2020 23:01
    Moderador
  • Hola:

    Tu código.

    // ¿El puerto serie está abierto?

    if (serialPort1.IsOpen) {
    // Sí. Cierro el puerto serie. serialPort1.Close(); }

    // No. Continuo por aquí abajo ejecutando instrucciones...

    Si detecta el puerto serie abierto, ejecuta lo que tienes entre llaves, es decir, vuelve a cerrar el puert serie. Lo abres, como lo detecta, lo vuelves a cerrar.

    Otra cosa, tienes que tener puerto serie sea físico o virtual para que no tengas problemas.

    Aquí dejo enlace de sietes programas de crear puertos virtuales.

    Vamos a suponer que tienes un Pc o ordenador, en el cual tienes dos formularios Windows Form.

    ¿Tu idea es enviar mensaje de texto de un formulario a otro?

    Pues debes tener dos puertos serie COM1 o COM2.

    No olvidar que si en la placa base ya no incluye puerto serie físico, puedes tenerlo instalando placas PCI apartes.

    Saludos.

    PD: Los temas del puerto serie deben estar en esta sección del foro.


    http://electronica-pic.blogspot.com









    • Editado Metaconta miércoles, 22 de julio de 2020 23:28
    • Marcado como respuesta Kevin Alcantara miércoles, 12 de agosto de 2020 18:06
    miércoles, 22 de julio de 2020 23:15