父窗体取不到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#