当前位置:编程学习 > C#/ASP.NET >>

父窗体取不到mdi子窗体的数量

private void callDepBtn_Click(object sender, EventArgs e)
        {
            
            if (!isChildformShow("callDepartment"))
            {
                callDepartment Cdt = new callDepartment();
                Cdt.MdiParent = this;                                    //指定当前窗体为顶级Mdi窗体
                Cdt.Parent = splitContainer2.Panel2;                     //指定子窗体的父容器为
                Cdt.Show();

            }
        }
        /// <summary>
        /// 检测子窗体是否打开过
        /// </summary> 
        /// 
        private bool isChildformShow(string formName)
        {
            for (int i = 0; i < this.MdiChildren.Length; i++)
            {
                if (this.MdiChildren[i].Name==formName)
                {
                    this.MdiChildren[i].Activate();
                    this.MdiChildren[i].WindowState = FormWindowState.Normal;
                    return true;
                }
            }

            return false;                                           
        }
用这个判断mdi子窗体是否打开过,可是this.MdiChildren.Length始终都是0,帮忙看一下喽! --------------------编程问答-------------------- MdiChildren.Count();  ? --------------------编程问答-------------------- 没这个属性! --------------------编程问答-------------------- 这个MdiChildren得出的结果是个数组 --------------------编程问答-------------------- 有这个属性吖, 

MessageBox.Show(MdiChildren.Count().ToString());   

 试试咯。 --------------------编程问答-------------------- 或者你 用  foreach 循环嘛。

foreach(Form frm in MdiChildren)
{
  //TODO
} --------------------编程问答-------------------- 错误 5 “System.Array”不包含“Count”的定义,并且找不到可接受类型为“System.Array”的第一个参数的扩展方法“Count”(是否缺少 using 指令或程序集引用?) E:\website\JinPaiSystem\CommonLib\Client\FormClientFinal.cs 120 41 CommonLib
不行的,我这怎么没有呢?? --------------------编程问答-------------------- 我用 foreah(Form form in this.MdiChildren){}这个 也是取不到MdiChildren --------------------编程问答-------------------- 我用 foreach(Form form in this.MdiChildren){}这个 也是取不到MdiChildren --------------------编程问答--------------------

不懂,我这是有的... --------------------编程问答-------------------- me.MdiChildren.Length   
循环这个里面的就可以了,然后删除 --------------------编程问答-------------------- private void callDepBtn_Click(object sender, EventArgs e)
        {
            
            if (!isChildformShow("callDepartment"))
            {
                callDepartment Cdt = new callDepartment();
                Cdt.MdiParent = this;                                    //指定当前窗体为顶级Mdi窗体
                Cdt.Parent = splitContainer2.Panel2;                     //指定子窗体的父容器为
                Cdt.Show();

            }
        }
        /// <summary>
        /// 检测子窗体是否打开过
        /// </summary> 
        /// 
        private bool isChildformShow(string formName)
        {
            
            for (int i = 0; i < MdiChildren.Length; i++)
            {
                if (this.MdiChildren[i].Name==formName)
                {
                    this.MdiChildren[i].Activate();
                    this.MdiChildren[i].WindowState = FormWindowState.Normal;
                    return true;
                }
            }

            return false;                                            //如果没有相同的值则表示要调用的子窗体还没有被打开,返回false值 
        }

这是代码了,看一下应该是没有问题的哦,怎么会还不行呢?? --------------------编程问答-------------------- 你用了第三方控件吧 --------------------编程问答-------------------- 是不是和我设置了父级容器有关系呢? --------------------编程问答-------------------- LZ你代码没问题啊 正确的 --------------------编程问答-------------------- 我在想是不是和 这一句有关系 Cdt.Parent = splitContainer2.Panel2; ;哎刚学这个不久,搞得头大了 --------------------编程问答-------------------- -- LZ你直接在窗体的属性中就制定父窗口然后打开窗口的时候
form1 f=new form1();
f.showdialog(); --------------------编程问答-------------------- MDI 的 我没弄过,我弄过 将窗体在 panel中打开的,然后 panel.Controls   也能获取所以在panel中的控件,当然,包括窗体。  这个可以试试哦。 --------------------编程问答-------------------- 这是我写的例子
------------
 private void botton1_Click ( object sender , EventArgs e )//这是一个菜单的事件 
         { 
               Form frmTemp = new Form ( ) ;      //新建一个窗体 
               frmTemp.MdiParent = this ;      //定义此窗体的父窗体,从而此窗体成为一个MDI窗体 
               frmTemp.Text = "窗体0" + FormCount.ToString ( ) ;      //设定MDI窗体的标题
               FormCount++ ; 
               frmTemp.Show ( ) ; //把此MDI窗体显示出来 
         }
--------------------编程问答--------------------
            
            form2 frm = new form2 ();
            frm.TopLevel = false;
            frm.Parent = panel1;
            frm.Width = 100;
            frm.Height = 80;
            panel1.Controls.Add(frm);
            frm.Visible = true;

 这样是可以将窗体 在panel中打开。 --------------------编程问答-------------------- 因为这个窗体是由splitContainer划分了区域的,现在只能让这个子窗体显示在固定的区域 --------------------编程问答-------------------- 这是show和showdialog的区别
------------------------
将窗体显示为有模式对话框用form1.ShowDialog()方法。这个方法有一个可选参数 owner,该参数可用于指定窗体的父子关系。
在Form1代码段中:
Form2 f2=new Form2();
f2.ShowDialog(this);/
如果没有使用f2.ShowDialog(this)而直接使用的是无参的,要定义父子关系,则需要语句f2.owner=this;
将窗体显示为无模式对话框则用form1.show()方法。
如果窗体显示为有模式,则在关闭该对话框之前,不执行 ShowDialog 方法后面的代码。
但是,当窗体显示为无模式时,那么该窗体显示之后,会立刻执行 Show 方法后面的代码。
--------------------编程问答-------------------- 还有LZ你干嘛要指定父容器呢
你是获取子窗体数量
不用指定父容器 --------------------编程问答-------------------- -------------------------------------
|             |         b            |
|    a        | -------------------- |
|             |         c            |
|             |                      |
-------------------------------------

这样的结构,我想把mdi子窗体放到c的位置,所以就得制定容器了 --------------------编程问答-------------------- 这编辑器不给力,怎么变形了。就是一个向左倒下的品字结构 --------------------编程问答-------------------- foreach (Control cl in splitContainer2.Panel2.Controls)
            {
                if (cl.Name == formName)
                {
                    return true;
                    break;
                }
            }
换成这个也算解决了吧
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,