我们经常在做Winform项目的时候,会遇到父窗体下面有几个子窗体,当几个子窗体轮番点击的时候或许没有问题,看着好像还可以,但把父窗体放大或者缩小就会发现这个子窗体全都弹出来了,这是为什么呢?因为正常情况下你觉得没有问题是因为你点击新的子窗体把原先的子窗体覆盖了而已,如果一个项目中出现很多个子窗体,你觉得你会不会傻掉,项目最后客户看到这种情况是不认同的。
那该怎么办呢?
加入我们要做如下的:
点击子窗体只让窗体的标题变颜色方便辨认,而不需要原先的窗体被覆盖节约资源。。。。。
我们首先创建一个方法OpenFrm
/// <summary>
/// 打开子窗体
/// </summary>
/// <param name="targetFrm">目标子窗体</param>
/// <param name="isMDI">是否以MDI方式打开</param>
private void OpenFrm(Form targetFrm,bool isMDI)
{
Form form = Application.OpenForms[targetFrm.Name];
if (form != null)
{
form.Close();//在点击一次按钮,等于把窗体关闭后重新打开
}
if(isMDI==true)
{
targetFrm.MdiParent = this;
}
targetFrm.Show();
}然后在子窗体按钮的点击事件中这样写:
private void 子窗体2_Click(object sender, EventArgs e)
{
//按钮间颜色变换
子窗体1.ForeColor = Color.Red;
子窗体3.ForeColor = Color.DarkBlue;
子窗体4.ForeColor = Color.DarkBlue;
子窗体5.ForeColor = Color.DarkBlue;
子窗体6.ForeColor = Color.DarkBlue;
frmHisData = new FrmHisData();
OpenFrm(frmHisData,true);
子窗体2.Checked = !子窗体2.Checked;//状态取反
}这样写不管你的子窗体有几个,轮番点击不会出现一直覆盖而占用资源的情况。
在Winform项目中,当父窗体包含多个子窗体时,可能会遇到子窗体在窗口调整大小后全部显示的问题。这实际上是由于新子窗体并未关闭旧子窗体导致的。为解决此问题并优化用户体验,可以创建一个方法OpenFrm,确保每次点击新子窗体时,只会有一个子窗体处于活动状态,同时通过改变子窗体标题颜色来帮助用户识别当前活动窗体。

9889

被折叠的 条评论
为什么被折叠?



