用MDIParent实现两窗体切换的问题

骑驴快跑 2010-07-21 10:16:53
用MDIParent实现两窗体切换的问题,BF窗体里MDI已经设置为True,备份是主窗体,切换还原窗体
问题现象:
当我一点击还原窗体时,在备份中出现了还原窗体,就铺上面了,还能挪动,还透明,能看到备份窗体中的内容,点备份窗体,就又弹出来一个备份的窗体,把还原窗体关了,在点就不出来了。

我想要的效果是,点击还原窗体,就直接覆盖备份窗体了,点备份,在显示备份窗体。。就这么简单~

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace BFHY
{
public partial class frmBF : Form
{

public frmBF()
{
InitializeComponent();
}

private void 备份管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
frmBF bf = new frmBF();
bf.Show();
}

private void 还原管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (frmHY.instance == null)
{
frmHY bf = new frmHY();
bf.MdiParent = this;
bf.Show();
}
}
}

}


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace BFHY
{
public partial class frmHY : Form
{
public static frmHY instance = null;
public frmHY()
{
InitializeComponent();
instance = this;
}

private void frmHY_Load(object sender, EventArgs e)
{

}

private void frmHY_FormClosed(object sender, FormClosedEventArgs e)
{
frmHY.instance = null;
}
}
}
...全文
102 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
骑驴快跑 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 poloyzhang 的回复:]
帮你写个方法,就是判断子窗体是否存在的.


C# code
private bool checkChildFormExist(string getFormName)
{
foreach (Form existForm in this.MdiChildren)
{
if (exist……
[/Quote]

bool在这里不对。。我这现在是两个窗体来切换,如果要是多了可咋办呢。
还是解决那个属性能搞定我这个切换的,或者说弹出不透明可以看不到下面的东西可以。
poloyzhang 2010-07-21
  • 打赏
  • 举报
回复
帮你写个方法,就是判断子窗体是否存在的.

  private bool checkChildFormExist(string getFormName)
{
foreach (Form existForm in this.MdiChildren)
{
if (existForm.Name == getFormName)
{
if (existForm.WindowState == FormWindowState.Minimized || existForm.WindowState == FormWindowState.Normal )
{
existForm.WindowState = FormWindowState.Maximized;
existForm.Activate();
return true;
}

}
}
return false;

}


----------------------------------------------------
使用>>
private void 备份管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
if( checkChildFormExist( "frmBF") ){
return;
}
else{
frmBF bf = new frmBF();
bf.Show();
}
}

poloyzhang 2010-07-21
  • 打赏
  • 举报
回复
顶..............................
骑驴快跑 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 poloyzhang 的回复:]
n个窗体都可以用这个方法.................... 判断一下即可.

已经测试通过.
[/Quote]

写的不对呀。。。切换后还原的窗体还是飘在上面,而且在点备份回来就抛异常了。。
poloyzhang 2010-07-21
  • 打赏
  • 举报
回复
n个窗体都可以用这个方法.................... 判断一下即可.

已经测试通过.
poloyzhang 2010-07-21
  • 打赏
  • 举报
回复
private void 备份管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
if( checkChildFormExist( "frmBF") ){
return;
}
else{
frmBF ims = new frmBF();
ims.MdiParent = this;
ims.WindowState = FormWindowState.Maximized;
ims.Show();
}
}

----------------------------还原管理--------------------------
if (checkChildFormExist( "frmHY") )
{
return;
}
else{
frmHY fhy = new frmHY();
fhy.MdiParent = this;
fhy.WindowState = FormWindowState.Maximized;
fhy.Show();
}


----------------------------要注意----在属性中把主form 的 isMdiContainer 设置为true---------------
poloyzhang 2010-07-21
  • 打赏
  • 举报
回复
private bool checkChildFormExist(string getFormName)
{
foreach (Form existForm in this.MdiChildren)
{
if (existForm.Name == getFormName)
{
if (existForm.WindowState == FormWindowState.Minimized )
{
existForm.WindowState = FormWindowState.Maximized;


}
existForm.Activate();
return true;
}
}
return false;

}

110,549

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧