关于用show和hide实现winform切换的问题

鸣鸣Amadues 2011-03-01 02:50:56
我有几个winform,在winform上建立几个button,click事件:
EditCustomer wf1 = new EditCustomer();
wf1.Show();
this.Hide();

这样来实现窗口间的切换,不过,在按右上角关闭时,程序无法完全退出,隐藏的窗口仍然是在运行的。

请问有什么解决方法?谢谢。

ps:先不考虑其他实现winform切换的方法,项目赶进度没时间学习新的方法。虽然我这个方法比较土但是能实现用户功能就可以了。
...全文
594 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
myjavamosquito 2011-03-02
  • 打赏
  • 举报
回复
重新指定程序的主窗体。
鸣鸣Amadues 2011-03-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lanlang_88 的回复:]
上面的方法可以在你点击关闭时完全退出该窗口,因为操作的只是一个窗体,而不是重新创建的新窗体。
[/Quote]

但是前面隐藏的窗口没法关闭呀。
xiaoyuzi 2011-03-02
  • 打赏
  • 举报
回复
另外关闭系统用application.exit就行
xiaoyuzi 2011-03-02
  • 打赏
  • 举报
回复
我的实现是定义一个主窗体StartForm,这个窗体界面什么都不放,系统一启动,从主窗体的got focus事件切换到实际我们要操作的窗体,然后主窗体隐藏。其他我们要操作的窗体切换用this.close就行了。
主窗体代码主要有
private void StartForm_GotFocus(object sender, EventArgs e)
{
// Logon
LogonForm frm = new LogonForm();
frm.Show();
this.Close();
}

private void StartForm_Closing(object sender, CancelEventArgs e)
{
// The start form can't be closed, or else the application will quit.
e.Cancel = true;
this.Visible = false;
}
鸣鸣Amadues 2011-03-02
  • 打赏
  • 举报
回复
请问有没有方法重写关闭窗体的this.close()?
再跟那个遍历窗体结合起来我想应该就可以实现了。
  • 打赏
  • 举报
回复
this.Close();
wuyq11 2011-03-01
  • 打赏
  • 举报
回复
Thread th = new Thread(new ThreadStart(new MethodInvoker(delegate
{
this.Invoke(new MethodInvoker(delegate { this.Close(); }));
Application.Run(new Form1());
})));
th.Start();
詸菲貓 2011-03-01
  • 打赏
  • 举报
回复
上面的方法可以在你点击关闭时完全退出该窗口,因为操作的只是一个窗体,而不是重新创建的新窗体。
詸菲貓 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 raffin 的回复:]

是这样,假如我使用
EditCustomer wf1 = new EditCustomer();
wf1.Show();
this.Close();

那么就全部退出了,无法进入到新的窗口了,所以我只能用Hide,不能用Close。

不过用了Hide后,再点击右上角关闭,原本隐藏的窗口不会退出,仍然是在运行的。

所以想问问有什么方法解决。



另外,用这个方法切换……
[/Quote]应该会的,给你个思路,你可以在隐藏窗体以后,想再打开该窗体的时候遍历已经打开的窗体,Foreach(Form f in Application.OpenForms)
{
if(f is EditCustomer)
{
f.Show();
}
}
你可以试下,这样应该可以避免创建新的窗口,而且只对该窗体实现显示和隐藏
鸣鸣Amadues 2011-03-01
  • 打赏
  • 举报
回复
是这样,假如我使用
EditCustomer wf1 = new EditCustomer();
wf1.Show();
this.Close();

那么就全部退出了,无法进入到新的窗口了,所以我只能用Hide,不能用Close。

不过用了Hide后,再点击右上角关闭,原本隐藏的窗口不会退出,仍然是在运行的。

所以想问问有什么方法解决。



另外,用这个方法切换窗口,假如我反复切换的话,会不会引起内存泄露,也就是不断会新建窗口?
詸菲貓 2011-03-01
  • 打赏
  • 举报
回复
点击关闭实现窗体的隐藏么?如果是可以在Form_closing事件中这样写:
e.Cancel=true;
this.Hide();
鸣鸣Amadues 2011-03-01
  • 打赏
  • 举报
回复
不是这个意思,
我想知道如何自己重写右上角关闭的按钮?
shaofei830927 2011-03-01
  • 打赏
  • 举报
回复
从Main方法中出来的窗体叫做主窗体 只有主窗体关闭掉 程序才关闭掉 可以直接用 Application的Exit方法 也可以将主窗体 传递到子窗体中 在关闭子窗体的时候 将主窗体 一起关掉
bdmh 2011-03-01
  • 打赏
  • 举报
回复
发差了,是这个
Application.Exit()
bdmh 2011-03-01
  • 打赏
  • 举报
回复
System.IO.FileMode.Create

110,567

社区成员

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

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

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