一个关于MDI的非常奇怪的问题,解决后马上给分。(见里面) 類似問題也困擾了我: http://expert.csdn.net/Expert/topic/2066/2066046.xml?temp=.8162653 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 To derek():好像也没有完整的回答呀,你的问题解决了吗? 你可以不用MDI的方法,替换的方法如下:把主窗体中加入一Panel,然后把所谓子窗体加入到此Panel中即可,不过此窗体FormBorderStyle设置为none。 你可以不用MDI的方法,替换的方法如下:把主窗体中加入一Panel,然后把所谓子窗体加入到此Panel中即可,不过此窗体FormBorderStyle设置为none。 让它看起来象最大化,但不是最大化子窗体获得焦点的时候,计算本身的大小MdiParent 的 ClientSize.Height ClientSize.Width如果有ToolBar减去ToolBar的高度,有StateBar就减去StateBar的高度然后高度和宽度都减去4(试了一下,好象要留一个小小的边出来)在MdiParent 的 MdiChildActivate 和 Resize 事件中if (this.ActiveMdiChild != null){ if (this.ActiveMdiChild.WindowState == FormWindowState.Minimized) { MessageBox.Show("没有需要最大化的窗体了,应该处理一下是否显示最小化状态"); } //MessageBox.Show(this.ActiveMdiChild.Top.ToString()); this.ActiveMdiChild.Top = 0; this.ActiveMdiChild.Left = 0; this.ActiveMdiChild.Width = this.ClientSize.Width - 4; this.ActiveMdiChild.Height = this.ClientSize.Height - 4 - this.toolBar1.Height - this.statusBar1.Height;}子窗体焦点获得时this.Width = 根据主窗计算出的大小this.Height = 同子窗体焦点失去的时候this.Width = 0;this.Height = 0;为了不让它们占位置我试了WindowState = Minimized,效果不好,如果窗体多了,最小化排列的位置就会占位所以在上面MessageBox的地方,去处理是不是显示Child的排列如果始终会有一个Child显示在最前端,那就不用处理了总之只要禁止Child最大化.就不会出问题如果还想要MDI的排列等属性,那就要自己加条件判断了,判断是否执行子窗的Resize就测试到这.基本没什么问题如果控件和窗体不多,愚翁说的办法最好 关于flag标记问题 上传文件显示进度条 VS2005 代码突然没有智能提示 Interface 与实现问题 技术共享(远程传递oracle参数)--感谢论坛所有帮助过我的朋友:圣诞快乐!! socket编程 求助帖:windows xp 上的msdn 2003不能正常工作<ASP.NET上也有这帖,请斑竹别删> 关于datagrid更新的问题! 网络连接的超时问题 很简单关于 C# 的属性的问题, 高手来看看 Word编程如何查找一个字符并且获得它的位置? !!!帮帮小妹吧!!!
好像也没有完整的回答呀,你的问题解决了吗?
把主窗体中加入一Panel,然后把所谓子窗体加入到此Panel中即可,不过此窗体FormBorderStyle设置为none。
把主窗体中加入一Panel,然后把所谓子窗体加入到此Panel中即可,不过此窗体FormBorderStyle设置为none。
子窗体获得焦点的时候,计算本身的大小
MdiParent 的 ClientSize.Height ClientSize.Width
如果有ToolBar减去ToolBar的高度,有StateBar就减去StateBar的高度
然后高度和宽度都减去4(试了一下,好象要留一个小小的边出来)在MdiParent 的 MdiChildActivate 和 Resize 事件中if (this.ActiveMdiChild != null)
{
if (this.ActiveMdiChild.WindowState == FormWindowState.Minimized)
{
MessageBox.Show("没有需要最大化的窗体了,应该处理一下是否显示最小化状态");
}
//MessageBox.Show(this.ActiveMdiChild.Top.ToString());
this.ActiveMdiChild.Top = 0;
this.ActiveMdiChild.Left = 0;
this.ActiveMdiChild.Width = this.ClientSize.Width - 4;
this.ActiveMdiChild.Height = this.ClientSize.Height - 4 - this.toolBar1.Height - this.statusBar1.Height;
}
子窗体焦点获得时
this.Width = 根据主窗计算出的大小
this.Height = 同子窗体焦点失去的时候
this.Width = 0;
this.Height = 0;
为了不让它们占位置
我试了WindowState = Minimized,效果不好,如果窗体多了,最小化排列的位置就会占位
所以在上面MessageBox的地方,去处理是不是显示Child的排列
如果始终会有一个Child显示在最前端,那就不用处理了总之只要禁止Child最大化.就不会出问题
如果还想要MDI的排列等属性,那就要自己加条件判断了,判断是否执行子窗的Resize
就测试到这.基本没什么问题
如果控件和窗体不多,愚翁说的办法最好