Tengo 2 formularios MainUI y Log

Quiero cerrar Log from MainUI con una casilla de verificación, pero no puedo entender cómo hacerlo.

Este es mi código en MainUI:

public void checkBox4_CheckedChanged(object sender, EventArgs e)
{            
        if (checkBox4.Checked == true)
        {
            Log F2 = new Log();
            F2.Show();
        }
        else if (checkBox4.Checked == false)
        {
            //Here should the exit code be for the Log form.
        }
}

Registro:

public partial class Log : Form
{       
    public Log()
    {         
        InitializeComponent();
    }
    private void Log_Load(object sender, EventArgs e)
    {
    }
    public void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
    }

}
-1
Nerreg 8 sep. 2018 a las 20:38

3 respuestas

La mejor respuesta

Debe hacer que la variable sea visible a nivel de método para eso. muévelo fuera del bloque if para eso:

public class MainUIForm : Form
{
  private Log F2  = null;

  public void checkBox4_CheckedChanged(object sender, EventArgs e)
  {      

      if (checkBox4.Checked)
      {
        F2 = new Log();
        F2.Show();
      }
      else
      {
        F2?.Close(); // for closing which will dispose it
      }
   }
}

Esto supone que cuando marca la casilla de verificación, necesita abrir una nueva ventana para Log y descartar la ventana anterior y su estado.

Si la ventana de registro necesita ser creada / instanciada una vez y solo necesita mostrarla al usuario y esconderse dependiendo de la casilla de verificación marcada o no, entonces necesitará ajustar el código como:

public class MainUIForm : Form
{
  private Log F2 = new Log();

  public void checkBox4_CheckedChanged(object sender, EventArgs e)
  {      

      checkBox4.Checked ?
        F2.Show() :
        F2.Hide();

   }
}
3
Ehsan Sajjad 8 sep. 2018 a las 18:10

La publicación fue resuelta, hice Log.Close (); en lugar de Log.Hide () FIJO!

-1
Nerreg 9 sep. 2018 a las 09:44

Modifique su formulario principal debería gustarle así

///Make it as global
Log F2 = null;

public void checkBox4_CheckedChanged(object sender, EventArgs e)
    {      

        if (checkBox4.Checked == true)
        {   
            if(F2 == null)
                {
                  F2=new Log();
                }
            F2.Show();
        }
        else if (checkBox4.Checked == false && F2 != null)
        { 
            F2.Hide();
            F2.Close();
            //Here should the exit code be for the Log form.
        }
}
1
chandra rv 8 sep. 2018 a las 18:08