每一个功能窗体都会在主界面窗体中嵌入,这个该如何实现。
解决方案 »
- 关于C# winfrom控件的访问
- c# Socket服务器端怎么来判断客户端出现断开问题,并刷新列表呢?急,在线等!!!
- WCF 获取内网IP
- directshow 的程序中怎样删除一个graph 再重建一个新图
- 哪位大侠知道用c#导出到excel的时候,如何设置多行显示啊?单元格内自动换行
- 请问如何将String转换为Hex String?
- 菜鸟 关于窗体激活的问题? 急!!!!
- 高分跪问简单的问题!
- 请教高手:如何用C#读取一个带structure的二进制文件的数据并将其转换为行列字串的形式?
- 如何实现http连接加密?
- 小问题:冠以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();