如何在winforms窗口中打开,但是如果这个窗口已经打开了,就把它打开
本文关键字:窗口 winforms 如果 | 更新日期: 2023-09-27 18:11:09
我有一个窗口"Child 1",它从"Parent"打开。一旦我在菜单中点击打开"Child 1",如果我在菜单中点击几次,它可以打开几个窗口。如何验证窗口"Child 1"是否打开,那么我们应该把它打开。
打开窗口的代码:
var ticketTypesForm = new fTicketTypes();
ticketTypesForm.Show();
调用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();
}
}
-
如果你的应用程序可以在模态模式下使用子窗口(你不需要与父窗口进行用户交互),那么就使用子窗口作为模态。窗口总是在上面。
var tickettypes = new fTicketTypes();ticketTypesForm.ShowDialog(这);
-
当用户关闭窗口时,你的应用程序也可以通过Hide()方法关闭子窗口。因此对话框将永远不会被删除。但是在这种情况下,你必须使用相同的ticketTypesForm实例(而不是每次打开窗口都创建一个新实例)
init app或先显示
var ticketTypesForm = new fTicketTypes();
展示ticketTypesForm.Show(this);
关闭
ticketTypesForm.Hide();