每一个功能窗体都会在主界面窗体中嵌入,这个该如何实现。
解决方案 »
- FTP文件下载遇到不能在客户端打开FolderBrowserDialog目录?
- 数组中的信息,如何快速的存入数据库
- dictionary保存数据
- c#的疑惑
- 数据排序问题
- 用.net制作的安装程序安装完系统以后,再次安装的修复选项问题???
- 请教刚进入公司,学习C#,SQL,HTML.全都没学过.应怎样开始?请不吝赐教!!!!
- System.InvalidOperationException: 对象当前正在其他地方使用。 求大神帮忙看下代码。。。
- Newtonsoft.Json处理结果不正确,求解
- 关于窗体的OnMove方法,一难点求解====== 在线等.....
- 小问题:冠以listbox中的个别语句不明白
- 一个简单的datagridview问题
在VB中做 MDI窗体很简单。在C#里就没有这个轻松了,不过还是很方便的。
首先在C#里添加一个窗体,命名为MdiMain,将其IsMdiContainer设定成true,这样MDI主窗体就建立了。然后再添加新窗体,命名为MdiChild。现在运行程序,会发现只运行了MdiMain这个主窗体。呵呵因为我们没有写任何代码,第二个窗体当然不能出现了。现在来添加这个代码。
在MdiMain窗体上添加一个Menu,然后随便写个子菜单。双击子菜单,会出现它的Click事件,在这个事件内写如下代码:
MdiChild frmMdiChild=new MdiChild();
frmMdiChild.MdiParent=this;
frmMdiChild.Show();
这样在单击菜单项的时候就能显示MdiChild这个窗体了。但是这样会出现一个问题,就是说如果我按两次那个菜单项就会出现两个MdiChild窗体,呵呵,这是因为在C#中窗体就是一个Class,用刚才的代码就新建了一个MdiChild的实例。所以你按几次菜单项就会出现几个窗体了。控制的方法之一就是写一个变量,来存放是否打开了这个窗体,如果打开了就不继续执行了。这个小代码还是很简单的。
如果想通过程序关闭MdiChild窗体,只需在MdiChild里添加一个Button,在Button的Click事件里写上Close();就可以了。
如果功能相互独立,彼此交互不多的情况下可以考虑CAB (Component UI Application Block)。
然后跟正常的弹窗体代码是一样的.
比如
SubWindow sw = new SubWindow();
sw.ShowDialog();
这里的SubWindow就是你所指的功能窗体,
不知道是否达到您想要的效果?
Form2.TopLevel = False
Form2.Parent = Panel
Form2.Show();
frm.FormBorderStyle = FormBorderStyle.None;
frm.Dock = DockStyle.Fill;
frm.TopLevel = false;
this.Controls.Add(frm);
frm.Show();