Mdi不重复打开子窗体的问题,帮我看一段代码
有一个MDI窗提,为了防止重复打开相同的子窗体,我是这样处理的,代码如下:
这样处理也是没问题的。
private XFrmCompany xFrmCompany = null;
private void barButtonItem29_ItemClick(object sender,
DevExpress.XtraBars.ItemClickEventArgs e)
{
if ((xFrmCompany == null) || xFrmCompany.IsDisposed)
{
xFrmCompany = new XFrmCompany();
xFrmCompany.MdiParent = this;
xFrmCompany.Show();
MessageBox.Show(xFrmCompany.IsDisposed.ToString());
}
else
{
xFrmCompany.Activate();
}
}
=======================================================
由于子窗体太多,我于是确定把XFrmCompany作为参数传递过去,代码如下:
private XFrmCompany xFrmCompany = null;
private void ShowChildForm(DevExpress.XtraEditors.XtraForm childForm, string className)
{
if ((childForm == null) || (childForm.IsDisposed))
{
Type classType = Type.GetType(className);
if (classType != null)
{
childForm = (DevExpress.XtraEditors.XtraForm)Activator.CreateInstance(classType);
childForm.MdiParent = this;
childForm.Show();
}
}
else
{
childForm.Activate();
}
}
private void barButtonItem29_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
ShowChildForm(xFrmCompany, "Production.XFrmCompany ");
}
这样可以打开子窗体,但会重复打开相同的子窗体。
请教:怎样用第二种方法,避免打开相同的子窗体。
[解决办法]
先查窗体有没被创建,然后再选择是不是要重复打开。
2005下使用:
/// <summary>
/// 查找是否已创建窗体
/// </summary>
/// <param name= "FormName "> 窗体Name </param>
/// <returns> </returns>
public static bool SearchAllForm(string FormName)
{
for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i].Name == FormName)
{
return true;
}
}
return false;
}
2003下使用:
[DllImport( "User32.dll ", EntryPoint = "FindWindow ")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport( "user32.dll ", EntryPoint = "FindWindowEx ")] //找子窗体
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport( "User32.dll ", EntryPoint = "SendMessage ")] //用于发送信息给窗体
private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);
/// <summary>
/// 查找是否已创建窗体
/// </summary>
/// <param name= "FormTitle "> 标题名称 </param>
/// <returns> </returns>
public static bool SearchForm(string FormTitle)
{
IntPtr ParenthWnd = new IntPtr(0);
IntPtr EdithWnd = new IntPtr(0);
//查到窗体,得到整个窗体
ParenthWnd = FindWindow(null,FormTitle);
if (!ParenthWnd.Equals(IntPtr.Zero))
{
return true;
}
else
{
return false;
}
}