visual una tecla studio form boton asignar accept c# winforms validation acceptbutton

una - c#AcceptButton y validación



c# accept button (5)

Hola, tengo un formulario que contiene varios cuadros de texto y dos botones Cancelar y Aceptar. Estos botones están asignados para aceptar y cancelar las propiedades de los botones en forma. El problema es que tengo que validar los textos ingresados ​​en todos los cuadros de texto.

Quiero hacer eso si el usuario hace clic en el botón Aceptar (que es acceptButton). Así que escribí una función que es responsable de la validación y la disparo si el usuario hace clic en el botón Aceptar. El problema es que no puedo evitar que el formulario se cierre incluso si la función de validación devuelve falso. Ocurre debido al hecho de que asigné la propiedad acceptbutto a mi botón Aceptar. ¿Hay alguna forma de evitar que la forma se cierre si falla la validación sin eliminar las propiedades de aceptar botón?


En el botón Aceptar, haga clic en el controlador cambiar DialogResult a DialogResult.None cuando falla la validación


Esta es la solución de trabajo que utilizamos (y está compilada de otras respuestas).

Solo tiene que configurar DialogResult en None para evitar que se cierre el formulario.

//form init, auto-generated code (this is the case described) private void InitializeComponent() { //.... this.AcceptButton = btnOk; this.btnOk.DialogResult = DialogResult.OK; //.... } //event handlers private void btnOK_Click(object sender, EventArgs e) { if (!Validate()) this.DialogResult = DialogResult.None; } private void Form_FormClosing(object sender, FormClosingEventArgs e) { if (this.DialogResult == DialogResult.None) e.Cancel = true; }


No establezca la propiedad AcceptButton en su formulario y elimine la propiedad DialogResult de su botón ( DialogResult.None en DialogResult.None lugar).

Puede establecer la propiedad DialogResult de su formulario en su código de validación.

if (allFieldsValidated) { DialogResult = DialogResult.OK; }


Una forma podría ser aplicar la validación en el evento OnFormClosing y cancelar la acción en función del resultado de la validación.

--EDITAR--

private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (this.DialogResult == DialogResult.OK) { if (!IsValid()) { Info("Invalid data"); e.Cancel = true; } else { Info("Valid data found, closing dialog"); } } else if (this.DialogResult == DialogResult.Cancel) { Info("Just cancelling!"); } }

Y puedes llamar a esto. this.Close(); en Cancelar / Ok eventos.

Alternativamente, en la implementación del botón Aceptar, puede cambiar el resultado del botón y establecerlo en None ;

acceptButton.DialogResult = DialogResult.None;


No establezca Button.DialogResult en el Diseñador ni en ningún otro lugar (no confunda con Form.DialogResult). En el controlador de clic del botón, haga la validación y, si tiene éxito, configure Form.DialogResult en DialogResult.OK y cierre el formulario.

private void OkBtn_Click(object sender, EventArgs e) { if (isValid()) { this.DialogResult = DialogResult.OK; this.Close(); } }