2011-05-23 19 views
5

En mi aplicación C#, tengo el siguiente método que se llama cuando se cierra el formulario principal.Cierre de formulario primario cuando el formulario hijo se cierra

private void FormMain_Closing(object sender, FormClosingEventArgs e) 
{ 
     // Show this dialog when the user tries to close the main form 
     Form testForm = new FormTest(); 
     testForm.StartPosition = FormStartPosition.CenterParent; 
     testForm.ShowDialog(); 
} 

Esto crea una ventana de diálogo que se mostrará cuando se cierre el formulario principal. Sin embargo, mi problema es que cuando el usuario cierra testForm, el formulario principal se cierra inmediatamente después. He intentado todo tipo de variantes de e.Cancel = true; y tal, y todavía no puedo cancelar el cierre del formulario principal.

¿Alguna idea?


Editar: se ve como si estuviera corriendo en un problema utilizando dos ShowModal() 's en la serie. Mirando hacia el tema ...


Modificar: Se usa this.DialogResult = DialogResult.None; y parece haber fijado mi problema. Aparentemente es un problema conocido en WinForms al abrir un diálogo modal desde un diálogo modal.

+1

Te sugiero que pongas tu solución en una 'respuesta' a tu 'pregunta' y la marques como la respuesta correcta. De esta manera, otras personas sabrán que esta pregunta ya ha sido respondida, y también verán qué hicieron para resolver el problema. – Mel

Respuesta

2

Este código funciona bien conmigo. Creo que hay un problema en otra parte de tu código.

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    Form testForm = new FormTest(); 
    testForm.StartPosition = FormStartPosition.CenterParent; 
    testForm.ShowDialog(); 

    e.Cancel = testForm.DialogResult == DialogResult.Cancel; 
} 
1

Esto podría ser manejado por los niños también desde el docs:

Si un formulario tiene cualquier niño o propiedad formas, un evento FormClosing es también planteado para cada uno. Si alguno de los formularios cancela el evento, ninguno de los formularios está cerrado. Por lo tanto, correspondientes a los eventos FormClosed no se envían a ninguna de las formas .

1

Sé que en su pregunta menciona que ha intentado utilizar 'e.Cancel = true;' Sin embargo, el código siguiente funciona en mi entorno (.NET 4.0, Visual Studio 2010, Windows 7):

private void Form1_FormClosing(object sender, FormClosingEventArgs e) { 
    // Show this dialog when the user tries to close the main form 
    Form testForm = new FormTest(); 
    testForm.StartPosition = FormStartPosition.CenterParent; 
    testForm.ShowDialog(); 
    e.Cancel = true; 
} 

Si esto no funciona en su caso, usted puede tener otros controladores de eventos en el trabajo. En ese caso, pruebe este código en una aplicación de Windows Forms recién generada.

+0

Además, .NET 4.6, VS 2015, Win 7 (después de casi 6 años obtiene un voto positivo :) Tenga en cuenta que necesita realizar un seguimiento del resultado [s] de los formularios secundarios que se abrieron. –

Cuestiones relacionadas