unauthorizedaccessexception - system.stackoverflowexception error in c#
¿Por qué mi controlador de eventos FormClosing lanza una excepción de desbordamiento de pila? (1)
Ali por qué estás llamado
if (pResult == DialogResult.Yes)
{
this.Close();
return true;
}
else return false;
en caso de que el cuadro de diálogo = vbyes devuelva verdadero o falso según su necesidad en el ejemplo
private bool _Cancel(object sender, EventArgs e)
{
if (((this.textboxFirstName.Text != null) && (this.textboxFirstName.Text != string.Empty))
|| ((this.textboxLastName.Text != null) && (this.textboxLastName.Text != string.Empty)))
{
DialogResult pResult = MessageBox.Show("Do you want to cancel adding this driver?", "Warning", MessageBoxButtons.YesNo);
if (pResult == DialogResult.Yes)
{
//avoid => this.Close();
return true;
}
else return false;
}
else
{
// avoid => this.Close();
return true;
}
}
Quiero validar la entrada de dos cuadros de texto en mi formulario si el usuario hace clic en el botón Cerrar / "X roja". Asigné un controlador de eventos a la propiedad FormClosing del Formulario, pero cuando hago clic en él, el programa entra en un ciclo infinito y luego lanza la excepción de desbordamiento de pila. Aquí está mi código:
private bool _Cancel(object sender, EventArgs e)
{
if (((this.textboxFirstName.Text != null) && (this.textboxFirstName.Text != string.Empty))
|| ((this.textboxLastName.Text != null) && (this.textboxLastName.Text != string.Empty)))
{
DialogResult pResult = MessageBox.Show("Do you want to cancel adding this driver?", "Warning", MessageBoxButtons.YesNo);
if (pResult == DialogResult.Yes)
{
this.Close();
return true;
}
else return false;
}
else
{
this.Close();
return true;
}
}
private void AddDriver_Window_FormClosing(object sender, FormClosingEventArgs e)
{
if (!this._Cancel(sender, e))
e.Cancel = true;
}
¿Qué estoy haciendo mal? Por lo que yo sé, si configuro la propiedad Cancelar en verdadero, el formulario debería cancelar el cierre. La documentación de MS no es de ayuda ...
EDITAR: ¿Es una mala práctica anexarse a los EventArgs e
pasado en la llamada a esto. this._Cancel
y enviar un e.CloseReason
que especifico? La razón por la que originalmente tenía this.Close()
se debe a que este controlador se escribió originalmente para un botón de cancelación en el formulario (diferente del botón de cerrar). Quería reutilizar el código, así que estaba pensando en verificar este parámetro en el método _Cancel
para determinar si se debería llamar a this.Close()
.
EDIT 2: No importa, solo puedo verificar si e.CloseReason es "UserClosing"