C#MDI窗体问题 在MDI主窗体中打开一个子窗体,当我隐藏MDI主窗体后,再显示MDI主窗体时,之前打开的子窗体会消失。。怎么才能让它不消失??有什么办法解决。。??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MDI从未遇到过,检查你弹出子窗体的代码吧 你是如何"隐藏MDI主窗体"的,指的是MDI主窗体最小化吗,还是什么? private void Button1_Click(object sender, EventArgs e) { Form1 f1 = new Form1(); f1.MdiParent = this; if (Application.OpenForms["Form1"] == null)//判断f1窗口是否打开(限制只能打开一次) { f1.Show(); } } private void button2_Click(object sender, EventArgs e) { this.Visible = false;//隐藏MDI窗体 Temp tp = new Temp(); tp.ShowDialog();//显示一个临时窗体是为了再次显示MDI窗体 }//下面是Temp窗体中的代码 private void button1_Click(object sender, EventArgs e) { this.Visible = false; MDIParent p = new MDIParent (); p.Visible=true; }这样再次显示后,之前打开的子窗体就会消失。。 不是的。。this.Visible = false; 这样来隐藏。。 //下面是Temp窗体中的代码 private void button1_Click(object sender, EventArgs e) { this.Visible = false; MDIParent p = new MDIParent (); p.Visible=true; }这里错了,你这是重新new了一个MDI父窗体,没有把以前的显示。 下面代码你自己改一下,我写给另一个人的答案。你只要把 button1.PerformClick(); 改成 this.Visible = true;就可以了。另外名字也得改改,呵呵。还有一种方法。比较简单,你看第二段代码段。public delegate void ButtonClickedDelegate();class FormA:Form{ //省略各种构造函数,事件等 { ButtonClickedDelegate npd = ButtonClicked; FormB b = new FormB(npd); b.ShowDialog(); } private void ButtonClicked() { button1.PerformClick(); } }class FormB:Form{ ButtonClickedDelegate ButtonClicked; //省略各种构造函数,事件等 //重载一个构造函数 public FormB(ButtonClickedDelegate npd) { InitializeComponent(); ButtonClicked = npd; } //button1 click事件 { ButtonClicked(); }}private void button2_Click(object sender, EventArgs e) { this.Visible = false;//隐藏MDI窗体 Temp tp = new Temp(); tp.ShowDialog();//显示一个临时窗体是为了再次显示MDI窗体 this.Visible = true; }//继续改代码 //下面是Temp窗体中的代码 private void button1_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; } 那怎么改呢???刚搞winform。。不是很了解。。 再给你贴一下吧,推荐你用这个方法,比较简单。第一种方法适用的环境更多,但是你这个用下面这个就够了。private void button2_Click(object sender, EventArgs e) { this.Visible = false;//隐藏MDI窗体 Temp tp = new Temp(); tp.ShowDialog();//显示一个临时窗体是为了再次显示MDI窗体 this.Visible = true; }//继续改代码 //下面是Temp窗体中的代码 private void button1_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; } 我想说……你在Temp窗体里重新new出来的MDIParent 跟你之前隐藏的窗体根本就不是一个窗体…… 再者实现你需要的这种效果完全没有必要这么做 控制窗体隐藏也可以用this.Hide(); 显示this.Show();就可以了 自定义光标,动态光标怎么加? 为什么不行 c# 如何调用 方法? 关于单击按钮,切换选项卡的问题 关于\Uxxxx 的解码问题 winform C# 如何动态更新一个列表 请问大家一个简单的问题,如何在一个函数中调用另一个函数中生成的类的实例? SQL 查询问题 VS.NET中有没有类似Delphi中的NoteBook控件啊! 怎样才能在calendar控件里将具体某一天、某一周、某一月的情况写入数据库,并显示出来? WPF中slider拖动时的响应事件是哪一个及用法? 请教一个时间段的问题,请假时间排除时间段的休息时间的一个方法.
{
Form1 f1 = new Form1();
f1.MdiParent = this;
if (Application.OpenForms["Form1"] == null)//判断f1窗口是否打开(限制只能打开一次)
{
f1.Show();
}
} private void button2_Click(object sender, EventArgs e)
{
this.Visible = false;//隐藏MDI窗体
Temp tp = new Temp();
tp.ShowDialog();//显示一个临时窗体是为了再次显示MDI窗体
}//下面是Temp窗体中的代码
private void button1_Click(object sender, EventArgs e)
{
this.Visible = false;
MDIParent p = new MDIParent ();
p.Visible=true;
}
这样再次显示后,之前打开的子窗体就会消失。。
不是的。。this.Visible = false; 这样来隐藏。。
//下面是Temp窗体中的代码
private void button1_Click(object sender, EventArgs e)
{
this.Visible = false;
MDIParent p = new MDIParent ();
p.Visible=true;
}这里错了,你这是重新new了一个MDI父窗体,没有把以前的显示。
你只要把 button1.PerformClick(); 改成 this.Visible = true;
就可以了。
另外名字也得改改,呵呵。还有一种方法。比较简单,你看第二段代码段。
public delegate void ButtonClickedDelegate();class FormA:Form
{
//省略各种构造函数,事件等
{
ButtonClickedDelegate npd = ButtonClicked;
FormB b = new FormB(npd);
b.ShowDialog();
} private void ButtonClicked()
{
button1.PerformClick();
} }class FormB:Form
{
ButtonClickedDelegate ButtonClicked; //省略各种构造函数,事件等 //重载一个构造函数
public FormB(ButtonClickedDelegate npd)
{
InitializeComponent();
ButtonClicked = npd;
}
//button1 click事件
{
ButtonClicked();
}}private void button2_Click(object sender, EventArgs e)
{
this.Visible = false;//隐藏MDI窗体
Temp tp = new Temp();
tp.ShowDialog();//显示一个临时窗体是为了再次显示MDI窗体
this.Visible = true;
}
//继续改代码 //下面是Temp窗体中的代码
private void button1_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.OK;
}
那怎么改呢???刚搞winform。。不是很了解。。
{
this.Visible = false;//隐藏MDI窗体
Temp tp = new Temp();
tp.ShowDialog();//显示一个临时窗体是为了再次显示MDI窗体
this.Visible = true;
}
//继续改代码 //下面是Temp窗体中的代码
private void button1_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.OK;
}