如何在winforms窗口中打开,但是如果这个窗口已经打开则只需启动它

时间:2013-04-28 16:21:21

标签: c# winforms

我有窗口“Child 1”,它从“Parent”打开。一旦我点击菜单打开“Child 1”,如果我在菜单中点击几次,它就可以打开几个窗口。如何验证窗口“Child 1”是否打开然后我们应该启动它。

我用来打开窗口的代码:

    var ticketTypesForm = new fTicketTypes();
    ticketTypesForm.Show();

5 个答案:

答案 0 :(得分:3)

调用Application.OpenForms会为您提供所有打开表单的集合。您可以浏览每个打开的表单以检查是否已创建子表单1。如果只是调用.Focus()方法来预先设置它。如果尚未创建,请按原样创建表单。

答案 1 :(得分:1)

只需保留您班级的参考,而不是每次都创建一个。

答案 2 :(得分:1)

不要使用var,而是可以这样做

fTicketTypes ticketTypeForm;
//Some code goes here.
if(ticketTypeForm == null)
    ticketTypeForm = new fTicketTypes();
ticketTypeForm.Show();

答案 3 :(得分:1)

在再次展示新表单之前,请使用以下方法检查其是否已打开:

Application.OpenForms.OfType<YOUR_FORM_TYPE>().Any())

如果已打开,请忽略他的命令,但如果不再打开它,则可以执行以下操作:

    ticketTypesForm myTicketTypesForm;
    private void OpenDialog(object sender, EventArgs e)
    {
        if (!Application.OpenForms.OfType<ticketTypesForm>().Any())
        {
            if (myTicketTypesForm == null)
                myTicketTypesForm = new ticketTypesForm();
            myTicketTypesForm.Show();
        }
        else
        {
            myTicketTypesForm.Focus();
        }
    }

答案 4 :(得分:0)

  1. 如果您的应用可以在模态模式下使用子窗口(您不需要用户与父窗口进行交互),那么只需将子窗口用作模态。窗口始终位于顶部。

    var ticketTypesForm = new fTicketTypes(); ticketTypesForm.ShowDialog(本);

  2. 当用户关闭窗口时,您的应用也可以通过方法Hide()关闭子窗口。所以对话将永远不会被处理掉。但在这种情况下,您必须使用相同的ticketTypesForm实例(每次打开窗口时都不创建新实例)

  3. 初始化应用或首次显示

    var ticketTypesForm = new fTicketTypes();
    

    显示

    ticketTypesForm.Show(this);
    

    靠近

    ticketTypesForm.Hide();