2013-02-28 46 views
1

我的所有表单都从基本表单(“Base”)继承。 关闭winform表单并停止它的执行

在那里,当它初始化时,我调用一个名为“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。

这是我的加载用户控件(其在一个按钮):

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(),I从面板移除用户控件和处置它:

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()事件,我处置用户控件在面板和形式。

private void frm_Configuracion_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     Dispose_User_Control(); 
     this.Dispose(); 
    } 

当我在我的用户的excepction这是我做的:

try 
      { 
       db.SaveChanges(); 
       WMessageBox.Show("Grupo guardado con éxito.", "Confirmación", 3, false); 
      } 
      catch(Exception excep) 
      { 
       Control.Mensajes_error.Error_transaccion(excep); 
       form.Close(); 
      } 

我CATH它,我关闭窗体(与面板的形式)。

但是在关闭之后(窗体不再显示),我在UserControl中的代码行中得到一个异常。这就是为什么我想要一种方法来终止整个表单。

我得到的异常是在一行代码中,我使用的是datagridview。它只是说空引用。然后我说,主窗体关闭,UserControls被处置,但它只是继续执行代码!

+2

“我得到一个异常之后” - 什么异常? – 2013-02-28 18:44:40

+0

我刚刚编辑了发生的事情。我以为我得到了另一种形式的例外。 – Andres 2013-02-28 18:46:45

+0

@Andres,究竟发生了什么?那么你如何将确切的例外文本提交给我们。 – 2013-02-28 18:50:33

回答