Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关闭winform窗体并停止它´;行刑_C#_Winforms - Fatal编程技术网

C# 关闭winform窗体并停止它´;行刑

C# 关闭winform窗体并停止它´;行刑,c#,winforms,C#,Winforms,我的所有表单都继承自一个基本表单(“基本”) 在那里,当它初始化时,我调用一个名为“Acceso”(access)的方法,该方法根据当前用户的访问权限返回true或false public Base() { InitializeComponent(); Acceso(); } public void Acceso() { Type tipo = this.GetType(); if (Metodos.Log

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

在那里,当它初始化时,我调用一个名为“Acceso”(access)的方法,该方法根据当前用户的访问权限返回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中的表单类型变量。这是因为如果用户在该UserControl中获得异常,我将执行form.Close()来关闭整个表单

这是我加载UserControl(在按钮中)的方式:

Administration_grupos是表单

private void frm_Configuracion_FormClosing(object sender, FormClosingEventArgs e)
    {
        Dispose_User_Control();
        this.Dispose();
    }
在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();
            }
我将其放置在cath中,然后关闭窗体(带有面板的窗体)

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


我得到的例外是在一行代码中使用datagridview。它只是表示空引用。然后我说,主窗体是关闭的,UserControls是释放的,但它只是继续执行代码

你可以用methode来处理这个问题

你可以用methode来处理这个问题

“我在它之后得到一个异常”——什么异常?我刚刚编辑了发生的事情。“我以为我得到了与另一种形式相同的例外情况。”安德烈斯,那么到底发生了什么?那么,你可以在问题中为我们输入确切的异常文本。@Andres:还有,为什么不在加载表单之前进行检查呢?谢谢你,Bryan,这个问题已经解决了,正如我所说,应用程序想要显示一个已删除的实例。这就是错误所在。我只是没有注意到它,因为我在一个包含usercontrols的父窗体中遇到了类似的问题。检查我现在写的内容..“我在它之后得到一个异常”--什么异常?我刚刚编辑了发生的事情。“我以为我得到了与另一种形式相同的例外情况。”安德烈斯,那么到底发生了什么?那么,你可以在问题中为我们输入确切的异常文本。@Andres:还有,为什么不在加载表单之前进行检查呢?谢谢你,Bryan,这个问题已经解决了,正如我所说,应用程序想要显示一个已删除的实例。这就是错误所在。我只是没有注意到它,因为我在一个包含usercontrols的父窗体中遇到了类似的问题。检查我现在写的东西。。