关闭父窗口但子窗口无法关闭

时间:2015-05-14 18:15:26

标签: c# winforms

我想开发一个Windows窗体应用程序。在父窗口中,将使用一个按钮来创建和显示子窗口窗体。当我关闭父窗口时,子窗口也会自动关闭。但是当我关闭父窗口时,我不想关闭子窗口。因此,我希望父窗口将关闭,但子窗口将保持激活状态。

在父窗口中:

private void button1_click (object sender, EventArgs e)
{
  childwindow c=new childwindow();
  c.show();
}

然后当我关闭父窗口时,子窗口也关闭了。

3 个答案:

答案 0 :(得分:1)

将方法连接到主窗体的FormClosing事件。 (您要关闭但不会导致应用程序退出的那个)

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        e.Cancel = true;
        this.Hide();
    }

这将取消关闭事件,然后隐藏主窗体。 您现在需要自己处理应用程序的关闭。

答案 1 :(得分:0)

根据您拥有的所有名称,您应该能够隐藏"你的窗口。这样称呼:

Form.Hide();

答案 2 :(得分:0)

您可以在Application.Run()外部启动父窗口,这样它就可以关闭,子窗口将保持打开状态。

static void Main()
{ 
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    var parentWindow = new ParentWindow();
    parentWindow.Show();
    Application.Run();  // Not application run without specific form
}

但是,您需要使用某种标志来终止应用程序,例如,如果孩子没有打开和/或关闭Child,并且只关闭孩子,那么父母将不会被关闭:

在父母:

public static int i = 1;

private void button1_Click(object sender, EventArgs e)
{
    var childForm = new ChildWindow();          
    childForm.Show();
}

private void Parent_FormClosing(object sender, FormClosingEventArgs e)
{           
    if (i==1 || i==4)
    {              
        Application.Exit();
    }

    if (i == 2)
    { 
        ChildWindow.i= 3;
    }            
}

在孩子身上:

public static int i=2;

public ChildWindow()
{
    InitializeComponent();
    ParentWindow.i=2;

}

private void Child_FormClosing(object sender, FormClosingEventArgs e)
{

    if (i==3)
    {               
        Application.Exit();
    }

    ParentWindow.i = 4;

}