1

我所有的表单都继承自一个基本表单(“Base”)。

在那里,当它初始化时,我调用一个名为“Acceso”(访问)的方法,该方法根据当前用户的访问权限返回真或假。

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();

我写了这个问题,因为我认为它正在发生与另一种形式相同的事情。

在那种形式中,我有一个面板,我可以在其中加载我的用户控件。当我创建 UserControl 的实例并将其添加到面板时,我将表单分配给 UserControl 中的 Form 类型变量。那是因为如果用户在该 UserControl 中遇到异常,我会执行 form.Close() 来关闭整个表单。

这就是我加载用户控件的方式(它在一个按钮中):

 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的一行代码中。它只是说空引用。然后我说,主窗体关闭,用户控件被释放,但它只是继续执行代码!

4

1 回答 1

1

您可以为此使用Environment.Exit方法

于 2013-02-28T18:45:02.233 回答