首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Mdi不重复打开子窗体的有关问题,帮小弟我看一段代码

2012-01-20 
Mdi不重复打开子窗体的问题,帮我看一段代码有一个MDI窗提,为了防止重复打开相同的子窗体,我是这样处理的,

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;
}

}

热点排行