如何在winforms窗口中打开,但是如果这个窗口已经打开了,就把它打开

本文关键字:窗口 winforms 如果 | 更新日期: 2023-09-27 18:11:09

我有一个窗口"Child 1",它从"Parent"打开。一旦我在菜单中点击打开"Child 1",如果我在菜单中点击几次,它可以打开几个窗口。如何验证窗口"Child 1"是否打开,那么我们应该把它打开。

打开窗口的代码:

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

如何在winforms窗口中打开,但是如果这个窗口已经打开了,就把它打开

调用Application.OpenForms将为您提供所有打开表单的集合。您可以浏览每个打开的表格,检查是否已经创建了儿童表格1。如果是,就调用.Focus()方法把它放在前面。如果还没有创建表单,请按照您的方式创建表单。

从你的类中保留一个引用,而不是每次都创建一个。

不要使用var,你可以这样做

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

在再次显示新表单之前,检查它是否已经打开:

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();
        }
    }
  1. 如果你的应用程序可以在模态模式下使用子窗口(你不需要与父窗口进行用户交互),那么就使用子窗口作为模态。窗口总是在上面。

    var tickettypes = new fTicketTypes();ticketTypesForm.ShowDialog(这);

  2. 当用户关闭窗口时,你的应用程序也可以通过Hide()方法关闭子窗口。因此对话框将永远不会被删除。但是在这种情况下,你必须使用相同的ticketTypesForm实例(而不是每次打开窗口都创建一个新实例)

init app或先显示

var ticketTypesForm = new fTicketTypes();

展示
ticketTypesForm.Show(this);

关闭

ticketTypesForm.Hide();