<击> 我的所有表单都继承自基本表单(“Base”)。
在那里,当它是inicialize时,我调用一个名为“Acceso”(访问)的方法,该方法根据当前用户权限来返回true或false,以便访问。
public Base()
{
InitializeComponent();
Acceso();
}
public void Acceso()
{
Type tipo = this.GetType();
if (Metodos.Login.Acceso(tipo) == false)
{
WMessageBox.Show("Su usuario no posee los privilegios necesarios para acceder a esta ventana.", "Error", 2, false);
this.Close();
this.Dispose();
}
}
问题是如果它返回false,那么表单会完美地关闭,但是在它之后会出现异常。显然,表单继续运行。我试图通过处理它来解决这个问题,但我遇到了同样的问题。
如何终止表格?有没有办法阻止和销毁实例?
击>
form.Show();
我写了这个问题是因为我认为它与其他形式的事情发生了同样的事情。
在那种形式中,我有一个面板,我加载了我的UserControls。 当我创建UserControl的实例并将其添加到面板时,我将表单分配给UserControl中的Form类型变量。这是因为如果用户在该UserControl中获得异常,我会使用form.Close()来关闭整个Form。
这是我加载UserControl(它在一个按钮中)的方式:
private void btn_Administracion_grupos_Click(object sender, EventArgs e)
{
Dispose_User_Control();
ABM.frm_Administracion_Grupos administracion_grupos = new ABM.frm_Administracion_Grupos();
administracion_grupos.form = this;
pnl_UserControl.Controls.Add(administracion_grupos);
}
administracion_grupos就是表格。
在Dispose_User_Control()中,我从面板中删除UserControl并将其丢弃:
public void Dispose_User_Control()
{
if (pnl_UserControl.Controls.Count > 0)
{
try
{
UserControl frm = (UserControl)pnl_UserControl.Controls[0];
frm.Dispose();
}
catch
{
}
pnl_UserControl.Controls.Clear();
}
}
然后,在FormClosing()事件中,我将UserControl配置在面板和表单中。
private void frm_Configuracion_FormClosing(object sender, FormClosingEventArgs e)
{
Dispose_User_Control();
this.Dispose();
}
当我在UserControl中获得异常时,这就是我所做的:
try
{
db.SaveChanges();
WMessageBox.Show("Grupo guardado con éxito.", "Confirmación", 3, false);
}
catch(Exception excep)
{
Control.Mensajes_error.Error_transaccion(excep);
form.Close();
}
我使用它,然后关闭表格(带有面板的表格)。
但是在关闭之后(表单不再显示),我在UserControl中的代码行中得到一个异常。这就是为什么我想要一种终止整个表格的方法。
我得到的异常是在我使用datagridview的一行代码中。它只是说空引用。然后我说,主窗体关闭,UserControls被释放,但它只是继续执行代码!