public void showMdiChild(System.Windows.Forms.Form MdiChildForm)
{
int i;
Form[] frmForms = this.MdiChildren;
bool btrue=false;

Cursor.Current=Cursors.WaitCursor;

for (i=0; i<frmForms.Length; i++)
{
//窗体类实例转换成字符串时相同,说明是同一个实例
if (frmForms[i].ToString()==MdiChildForm.ToString())
{
MdiChildForm.Dispose(); //释放刚创建的子窗体的实例资源
this.MdiChildren[i].Activate(); //将已经创建的实例窗体激活

btrue=true;
}
}
//如果i等于窗体数组的长度,
//说明上面的循环完成后没有找到窗体实例与传过来的窗体实例相同,
//说明新创建的窗体没有被创建过,那么就把它显示出来
if(btrue==false)
{
MdiChildForm.MdiParent = this; //指定窗体的MDI父窗体
MdiChildForm.Show();
if(MdiChildForm.MaximizeBox ==false)
{
MdiChildForm.WindowState =  FormWindowState.Normal ;
MdiChildForm.StartPosition =FormStartPosition.CenterScreen;
}
else
MdiChildForm.WindowState =  FormWindowState.Maximized  ; 
}
 
if(this.MdiChildren.Length>0)
{
panelMain.Hide ();
bShowBtn=false;
}
Cursor.Current =Cursors.Default ;
}

解决方案 »

  1.   

    谢了!我已经写出来了,使用的是Win32API函数。如下:private const int GW_Child = 5;
    private const int GW_HWNDFIRST = 0;
    private const int GW_HWNDLAST = 1;
    private const int GW_HWNDNEXT = 2;
    private const int GW_HWNDPREV = 3;
    private System.Windows.Forms.Button button2;
    private const int GW_OWNER = 4;
    [DllImport("user32.dll")]
    private extern static System.IntPtr GetWindow(System.IntPtr hWnd,int wCmd);[DllImport("user32.dll")]
    private extern static System.IntPtr  GetDesktopWindow () ;[DllImport("user32.dll")]
    private extern static int GetWindowText(System.IntPtr hWnd,System.Text.StringBuilder lpString,int nMaxCount);[DllImport("user32.dll")]
    private extern static int GetWindowTextLength(System.IntPtr hWnd);[DllImport("user32.dll")]
    private extern static int GetClassName(System.IntPtr hWnd,System.Text.StringBuilder lpClassName,int nMaxCount);private void button2_Click(object sender, System.EventArgs e)
    {
        System.Text.StringBuilder text = new System.Text.StringBuilder(256);
        System.IntPtr LastHwnd = System.IntPtr.Zero ;
        System.IntPtr CurHwnd = GetDesktopWindow() ;
        CurHwnd = GetWindow(CurHwnd, GW_Child);
        do 
        {
            if (CurHwnd==System.IntPtr.Zero ) break;
            GetWindowText(CurHwnd,text,128);
            if(text.ToString().ToUpper()=="目标窗体的标题")
            {
                //Form2类:从System.Windows.Forms.Form派生的窗体类,其中定义了共有实例方法ShowText。
                Form2 f = (Form2)System.Windows.Forms.Form.FromHandle(CurHwnd);
                f.ShowText("Find Form2.");
                break;
            }
            CurHwnd = GetWindow(CurHwnd, GW_HWNDNEXT);
        } while(true);
    }