我想限制用户在MDI应用程序中创建表单的多个实例。
如果打开该表单的一个实例,则必须获得焦点。如果它不是新实例,则必须创建它。
我该怎么做?
答案 0 :(得分:5)
你可以这样做。
创建一个静态方法:
public static Form IsFormAlreadyOpen(Type FormType)
{
foreach (Form OpenForm in System.Windows.Forms.Application.OpenForms)
{
if (OpenForm.GetType() == FormType)
return OpenForm;
}
return null;
}
然后在创建子表单时。
frmMyChildForm frmChild1;
if ((frmChild1 = (frmMyChildForm)IsFormAlreadyOpen(typeof(frmMyChildForm))) == null)
{ //Form isn't open so create one
frmChild1= new frmMyChildForm ();
}
else
{ // Form is already open so bring it to the front
frmChild1.BringToFront();
}
答案 1 :(得分:0)
也许这样的事可以帮到你
Form frmToCreate;
String strClassName=typeof(FormToCreate).Name
frmToCreate = GetForm(strClass);
if(frmToCreate == null)
{
//create the form here
}
frmToCreate.MdiParent = this; //supposing you are inside of the mainwindow (MDI window)
frmToCreate.Visible = true;
//other code goes here
GetForm会是这样的
public Form GetForm(String type)
{
int i;
Form[] children = this.MdiChildren; //or mdiwindow.MdiChildren
for (i = 0; i < children.Length; i++)
{
if (children[i].GetType().Name == type)
{
return children[i];
}
}
return null;
}
如果只是玩MdiChildren
财产。
答案 2 :(得分:-1)
你可以使用单例模式方法,让表单有一个Instance-member-variable来跟踪它是否已被初始化。