partes pantalla las herramientas funcion ejemplos barra c# winforms

pantalla - messagebox c# ejemplos



¿Cómo muestro un indicador de MessageBox cuando el usuario ha hecho clic en la cruz en la barra de título? (7)

Debería buscar Cancelar propiedad en FormClosingEventArgs : Esto debería funcionar:

private void mainForm_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes) { MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK); } else { e.Cancel = true; } }

http://msdn.microsoft.com/en-us/library/system.windows.forms.formclosingeventargs.aspx

Actualmente estoy desarrollando una aplicación de formulario de Windows C #.

Después de que el usuario haya iniciado sesión a través de loginForm, se llevará al mainForm.

Me gustaría codificarlo de manera que después de que el usuario haga clic en la cruz de la barra de título en mainForm, aparezca un mensaje preguntando al usuario "Esto cerrará la aplicación. ¿Confirmar?" seguido de un sí y ningún botón.

Si es así, se mostrará otra casilla, "¡Aplicación cerrada!"

Si no, el mensaje se cerrará y la aplicación continuará ejecutándose.

Mi código actual es:

private void mainForm_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes) { MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK); System.Windows.Forms.Application.Exit(); } else { this.Activate(); } }

Sin embargo, no funciona.

En primer lugar, no tengo idea de por qué el cuadro de mensaje aparece dos veces para que todo se cierre.

En segundo lugar, si hago clic en no, el formulario también se cierra y no puedo devolverlo.


Esto debería ayudarte

private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("Are you sure you want to close?", "Close", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No) e.Cancel = true; }


Esto hará lo que necesites:

private void mainForm_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes) { MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK); } else { e.Cancel = true; } }

Editar: para responder a su primera pregunta, vea this . Cuando llama a Exit() en su aplicación, se FormClosing un evento FormClosing para todos los formularios abiertos, incluido mainForm (que todavía está abierto), por lo que el evento se genera dos veces. Normalmente, esperaría que algo como esto resulte en una recursión infinita y un desbordamiento de pila literal, pero asumo que .NET es lo suficientemente inteligente como para evitarlo.

En una nota relacionada, realmente nunca deberías tener tu programa cerca llamando a Exit() , es una especie de olor de código.


Para cancelar el cierre del formulario, en su otra declaración necesita e.Cancel = true; . No necesitas la salida explícita en tu verdadero caso.

Prueba esto

private void mainForm_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes) { MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK); } else { e.Cancel = true; this.Activate(); } }

Asumo que su segundo MessageBox dice que se ha cerrado solo para fines de prueba.

Probablemente solo quieras.

private void mainForm_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) != DialogResult.Yes) { e.Cancel = true; } }

Observe que el estado de cuenta comprueba si no hicieron clic en sí, en lugar de en si presionaron cancelar. Esto significa que si presionan la x en el cuadro de diálogo no se contará como una confirmación.

EDITAR: si mainForm no es el formulario principal

Está bien, creo que tengo lo que estás pidiendo ahora.

Lo que haría sería colocar el código que tengo en mi segundo bloque de código en el FormClosing, y luego en el controlador de eventos FormClosed tener esto

private void mainForm_FormClosed(Object sender, FormClosedEventArgs e) { MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK); System.Windows.Forms.Application.Exit(); }


Para obtener la funcionalidad deseada, intente este código en su lugar:

private void mainForm_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes) { MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK); //no need to do anything here. } else { e.Cancel = true; } }


Tu código funciona perfectamente para mí sin errores.

private void exiteProToolStripMenuItem_Click(object sender, EventArgs e) { if (MessageBox.Show("message", "title", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { Application.Exit(); } else { this.Activate(); } }


var GetInput = MessageBox.Show("Do you want to Delete?", "Confirm Deletion",MessageBoxButton.OKCancel); if (GetInput == MessageBoxResult.OK) { //do what you like }