C#打开一个新的WinForm并关闭创建它的Form

时间:2012-05-02 16:12:57

标签: c# winforms

这是我的代码

Form1中

TicketDetails td = new TicketDetails(getTicketID());
td.Show();

我希望在显示td时关闭Form1。

4 个答案:

答案 0 :(得分:4)

如果Form1是您作为参数传递给Application.Run的表单,那么您无法关闭它,或者您的应用程序将退出。您可以做的是在显示td时隐藏表单。

TicketDetails td = new TicketDetails(getTicketID());
td.Show();

// Hide the main form
form1.Hide();

如果Form1不是您应用的主要表单,那么您只需在Close()上致电form1

编辑@comment,

public class Form1 : Form
{
    private override OnLoad(object sender, EventArgs e) {
        DoWork();
    }

    public void DoWork() {
        // your code
    }
}

然后是一个例子。

TicketDetails td = new TicketDetails(getTicketID());
td.Show();

form1.Hide();

// example, maybe you need to call your work method
form1.DoWork();

答案 1 :(得分:3)

如果要在显示第二个表单后关闭第一个表单,请使用Form.Shown事件:

td.Shown += (o, e) => { this.Close(); }
td.Show();

对于其他可能有趣的活动,请查看order of events in Windows Forms。当然,立即关闭当前表格也可以:

this.Close();
td.Show();

答案 2 :(得分:1)

我做过这样的事情:

TicketDetails td = new TicketDetails(getTicketID());
td.Show();
this.Hide();
td.Close += (object sender, EventArgs e) =>
{
    td.Parent.Close();
};

答案 3 :(得分:0)

只要TicketDetails不是模态的,td.show()之后的任何代码都会运行。

我还假设Form1是项目的启动表单。如果是这种情况,则使用.close将停止您的应用。

你尝试过这个:

TicketDetails td = new TicketDetails(getTicketID());
td.Show();
Form1.Hide();

这显然隐藏了Form1

由于