Tengo un cuadro de diálogo que quiero evitar que cierre cuando se hace clic en el botón Aceptar, pero vuelve, y eso incluso si la propiedad AcceptButton está configurada en none en lugar de my Botón Aceptar. ¿Cuál es la mejor manera de evitar que se cierre?Evitar que ShowDialog() vuelva cuando se hace clic en el botón Aceptar
Respuesta
De hecho, está cambiando la propiedad incorrecta. Ciertamente quiere que AcceptButton
sea el botón Aceptar. Esta propiedad determina cuál es el botón predeterminado en términos de Windows. Ese es el botón que se presiona cuando toca ENTER en su teclado. Al cambiar AcceptButton
, simplemente está rompiendo la interfaz del teclado para su diálogo. No está influyendo de ninguna manera en lo que sucede cuando se presiona el botón.
Lo que debe hacer es establecer la propiedad DialogResult
de su botón en DialogResult.None
ya que eso es lo que determina si un botón presiona cierra el formulario o no. Luego, dentro del controlador de clic del botón, debe decidir cómo responder al botón presionar. Supongo que, si la validación del diálogo es exitosa, debe cerrar el diálogo configurando la propiedad DialogResult
del formulario. Por ejemplo
private void OKbuttonClick(object sender, EventArgs e)
{
if (this.CanClose())
this.DialogResult = DialogResult.OK;
}
También debe eliminar el DialogResult
del botón, en la ventana de propiedades del botón establecerlo en None
.
http://msdn.microsoft.com/en-us/library/system.windows.forms.button.dialogresult.aspx
Si el DialogResult de esta propiedad se establece en otra cosa que no sea Ninguno, y si el formulario principal se visualiza a través del método ShowDialog , haga clic en el botón se cierra el formulario padre sin tener para conectar cualquier evento.
Obviamente, ahora su botón no hará nada por lo que necesitará para registrar un controlador para el evento Click
.
La mejor forma de detener este comportamiento es cambiar la propiedad DialogResult de su botón Aceptar al DialogResult.None
en la ventana de propiedades en tiempo de diseño.
Además, si ya tiene algún código en el evento click del botón Aceptar, puede cambiar el formulario DialogResult.
private void comOK_Click(object sender, EventArgs e)
{
// your code .....
// Usually this kind of processing is the consequence of some validation check that failed
// so probably you want something like this
if(MyValidationCheck() == false)
{
// show a message to the user and then stop the form closing with
this.DialogResult = DialogResult.None;
}
}
La mejor práctica es establecer realmente el botón Aceptar para estar deshabilitado en lugar de no responder a la entrada del usuario.
La propiedad DialogResult DEBE establecerse en Ok o Sí, dependiendo del formulario y AcceptButton también se debe vincular a Ok.
Normalmente creo una función en todos los cuadros de diálogo y la llamo cuando el usuario interactúa con los datos.
void RefreshControls() { button.Enabled = this.ValidateInput(); }
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form2 fLogin = new Form2();
if (fLogin.ShowDialog() == DialogResult.OK)
{
Application.Run(new Form1());
}
else
{
Application.Exit();
}
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void btnKlik_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
- 1. Pidiendo confirmación cuando se hace clic en el botón "X"
- 2. Cómo forzar LostFocus cuando se hace clic en el botón
- 3. ShowDialog() no hace que la ventana modal
- 4. Evitar que Safari se cargue desde la memoria caché cuando se hace clic en el botón Atrás
- 5. ¿Hay alguna manera de evitar que el texto se vuelva gris cuando desactivo un botón?
- 6. Haciendo que los navegadores ignoren el hash URL cuando se hace clic en el botón Atrás
- 7. Evitar que el evento de clic del contenedor principal se active cuando se hace clic en el hipervínculo
- 8. ¿Cómo se reproduce el sonido cuando se hace clic en el botón en Android?
- 9. Hacer que el puntero del mouse se vuelva mano para hacer clic en el botón
- 10. ¿La aplicación se minimiza en la bandeja del sistema cuando se hace clic en el botón?
- 11. El formulario se envía en FireFox cuando se hace clic en cualquier botón de la página
- 12. ¿Cómo se puede evitar que OnItemClickListener funcione cuando se hace clic largo?
- 13. sin onclick cuando se hace clic niño
- 14. No se puede deshabilitar la animación de transición cuando se hace clic en el botón Atrás
- 15. ¿Cómo puedo evitar que ListBox seleccione un elemento cuando hago clic con el botón derecho?
- 16. JOptionPane.showMessageDialog ¿esperar hasta que se haga clic en Aceptar?
- 17. cambiar el contenido del div cuando se hace clic en el enlace/botón
- 18. El formulario se envía cuando hago clic en el botón del formulario. ¿Cómo evitar esto?
- 19. ¿Puedo evitar que el indicador de divulgación de una celda se vuelva blanco cuando se selecciona?
- 20. Evitar que comparevalidator muestre un error hasta que se haga clic en el botón
- 21. cómo actualizar el resumen existente de EditTextPreference cuando hago clic en el botón Aceptar
- 22. Haga algo cuando se hace clic en el botón Cerrar en un JFrame
- 23. Botón de envío de rieles: ¿Cómo hago para que el botón ejecute un cierto método cuando se hace clic?
- 24. MVC: ¿a qué código se llama cuando hace clic en el botón "enviar"?
- 25. Activación de jquery cuando se hace clic en el botón de entrada 'Gravity Forms'
- 26. jQuery - Incremente el valor de un contador cuando se hace clic en un botón
- 27. ¿Cómo cambiar el color del botón en Android cuando se hace clic?
- 28. UISearchDisplayController - Método para cuando se hace clic en el botón cancelar
- 29. Actualizar tablas de datos (JQuery) cuando se hace clic en el botón
- 30. WPF - Establecer el enfoque cuando se hace clic en un botón - Sin código detrás