Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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#初始化后的第二个表单关闭_C#_Winforms - Fatal编程技术网

c#初始化后的第二个表单关闭

c#初始化后的第二个表单关闭,c#,winforms,C#,Winforms,我正在尝试创建一个简单的c#应用程序(我第一次尝试c#,所以请友好一点)。我创建了一个带有文本框的表单来捕获“身份验证代码”,然后对其进行验证,然后webclient获取一个xml文件,将此身份验证代码传递给请求。发送回的数据被解析为e.c.t 我想做的是,一旦xml返回,我做了有效的检查,一切正常。我想关闭第一个表单并加载第二个表单,在这里我将以编程方式添加以漂亮的格式显示xml数据所需的表单组件 我的问题是,我无法让第二个表单保持打开状态(毫无疑问,我以错误的方式调用了第二个表单)。以下是我

我正在尝试创建一个简单的c#应用程序(我第一次尝试c#,所以请友好一点)。我创建了一个带有文本框的表单来捕获“身份验证代码”,然后对其进行验证,然后webclient获取一个xml文件,将此身份验证代码传递给请求。发送回的数据被解析为e.c.t

我想做的是,一旦xml返回,我做了有效的检查,一切正常。我想关闭第一个表单并加载第二个表单,在这里我将以编程方式添加以漂亮的格式显示xml数据所需的表单组件

我的问题是,我无法让第二个表单保持打开状态(毫无疑问,我以错误的方式调用了第二个表单)。以下是我所拥有的:

// close current form
this.Close();

//open new form
xmlViewForm xmlView = new xmlViewForm();
xmlView.Show();
我相信你现在已经发现了我犯的错误。但是为了完整起见,为了说明显而易见的情况,它关闭第一个表单,打开第二个表单,然后程序立即退出(第二个表单显然会闪烁一秒钟)

我尝试过一些方法,但都不管用(包括使用
Application.Run(new xmlViewForm());
而不是实例化类和使用
show()
方法。显然,你知道这不管用,现在我也这样做了,尽管我对c的理解还不够深入,无法找出原因


谢谢您的帮助:)

您可以在关闭主窗体后打开第二个窗体

这样做:

//open new form
xmlViewForm xmlView = new xmlViewForm();
xmlView.Show();

// hide current form
this.Hide();
无法关闭主窗体,因为它是父窗体。如果关闭主窗体,子窗体将永远不会显示

或者通过编辑
Program.cs
文件将xmlViewForm更改为主窗体

Application.Run(new XmlViewForm());
然后,您可以轻松地在加载时首先调用另一个表单,并根据需要关闭它:

private void XmlViewForm_Load(o, s)
{
    // hide current form, and this will remain hidden until the other form is done with it's work
    this.Hide();

    //open the other form
    TheOtherForm _theOtherForm = new TheOtherForm();
    _theOtherForm.Show();

}

private void TheOtherForm_Closed(o, s)
{
    // show current form
    this.Show;

}

关闭主窗体后,您可以打开第二个窗体

这样做:

//open new form
xmlViewForm xmlView = new xmlViewForm();
xmlView.Show();

// hide current form
this.Hide();
无法关闭主窗体,因为它是父窗体。如果关闭主窗体,子窗体将永远不会显示

或者通过编辑
Program.cs
文件将xmlViewForm更改为主窗体

Application.Run(new XmlViewForm());
然后,您可以轻松地在加载时首先调用另一个表单,并根据需要关闭它:

private void XmlViewForm_Load(o, s)
{
    // hide current form, and this will remain hidden until the other form is done with it's work
    this.Hide();

    //open the other form
    TheOtherForm _theOtherForm = new TheOtherForm();
    _theOtherForm.Show();

}

private void TheOtherForm_Closed(o, s)
{
    // show current form
    this.Show;

}

首先想到的是,您正在关闭通过调用
Application.Run(new MyForm())
或类似命令打开的表单。这种形式具有特殊的意义;它是应用程序的“主要形式”,当关闭时,它向应用程序发出信号,表示用户希望关闭整个程序,而不管有多少其他窗口处于打开状态

有两种可能的修复方法。首先,也是最简单的,就是隐藏()不希望可见的表单,而不是对其调用Close()。虽然不可见,但它仍在运行,因此应用程序不会关闭


第二种解决方案是定义应该运行的自定义“应用程序上下文”,而不是通过指定要监视的主窗体创建的“默认上下文”。可以通过从System.Windows.Forms.ApplicationContext派生自定义类来完成此操作。指定此上下文后,您可以使用它来控制应用程序的终止,而不是基于主窗体的闭包。启动两个“主窗体”并跟踪这两个窗体是否仍处于活动状态的示例代码可以在中找到。您可以通过为主窗体指定Load和Close处理程序来执行类似的操作,然后在主窗体实例化时将它们传递给子窗体,从而保持“open”窗体的计数,并在该数字为零时关闭整个应用程序。只需通过调用
childForm.Show()
before
this.Close()

确保在关闭主窗体之前加载子窗体。首先想到的是,您正在关闭通过调用
Application.Run(new MyForm())
或类似命令打开的窗体。这种形式具有特殊的意义;它是应用程序的“主要形式”,当关闭时,它向应用程序发出信号,表示用户希望关闭整个程序,而不管有多少其他窗口处于打开状态

有两种可能的修复方法。首先,也是最简单的,就是隐藏()不希望可见的表单,而不是对其调用Close()。虽然不可见,但它仍在运行,因此应用程序不会关闭


第二种解决方案是定义应该运行的自定义“应用程序上下文”,而不是通过指定要监视的主窗体创建的“默认上下文”。可以通过从System.Windows.Forms.ApplicationContext派生自定义类来完成此操作。指定此上下文后,您可以使用它来控制应用程序的终止,而不是基于主窗体的闭包。启动两个“主窗体”并跟踪这两个窗体是否仍处于活动状态的示例代码可以在中找到。您可以通过为主窗体指定Load和Close处理程序来执行类似的操作,然后在主窗体实例化时将它们传递给子窗体,从而保持“open”窗体的计数,并在该数字为零时关闭整个应用程序。只需在关闭主窗体之前,通过调用
childForm.Show()
this.Close()

Hide()
之前确保子窗体已加载。为什么要关闭主窗体?它是父窗体@RandolfRincón-FadulThe OP说“我想关闭第一个表单并”。现在我看到了你的编辑,+1Thanx:)@RandolfRincón-FadulThanks,谢谢你的回答,但是我必须接受Keith的回答,因为这正是我在本例中所寻找的答案。但是如果我能+10你,我会:)
Hide()
没有关闭,只是隐藏了表单。为什么要关闭主表单?它是父窗体@RandolfRincón-FadulThe OP说“我想关闭第一个表单并”。现在我看到了你的编辑,+1Thanx:)@RandolfRincón-FadulThanks,谢谢你的回答,但是我必须接受Keith的回答,因为这正是我在本例中所寻找的答案。但是如果我能+10