怎么让一个窗体在点“X”的时候是隐藏,而不是关闭?
RT 问题点数:100、回复次数:11Top
1 楼fanzai(帆仔)回复于 2006-03-04 04:47:15 得分 0
是一个子窗体,如果直接关闭,下次就不能show()了,还得重新new。Top
2 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-04 06:32:53 得分 50
this.Closing += new
System.ComponentModel.CancelEventHandler(this.Form1_Closing);
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// Hide the form...
this.Hide();
// Cancel the close...
e.Cancel = true;
}
Top
3 楼kkk_visual(凡事对错先问自己)回复于 2006-03-04 09:09:06 得分 10
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
if (m.Msg == WM_SYSCOMMAND && (int) m.WParam == SC_CLOSE)
{
this.WindowState = FormWindowState.Minimized;
return;
}
base.WndProc(ref m);
}Top
4 楼kkk_visual(凡事对错先问自己)回复于 2006-03-04 09:10:47 得分 0
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
if (m.Msg == WM_SYSCOMMAND && (int) m.WParam == SC_CLOSE)
{
this.Visible = false; //隐藏。
return;
}
base.WndProc(ref m);
}Top
5 楼lidong6(立冬)回复于 2006-03-04 10:41:59 得分 0
二楼正解,其他都是画蛇..Top
6 楼sxlfybb(房客)回复于 2006-03-04 10:42:07 得分 10
我这里正好有一个
public const int WM_SYSCOMMAND=0x112;
public const int SC_CLOSE=0xF060;
protected override void WndProc(ref Message m)
{
if( m.Msg == WM_SYSCOMMAND )
{
if( m.WParam.ToInt32() == SC_CLOSE || m.WParam.ToInt32() == SC_MINIMIZE )
{
this.Visible = false;
return;
}
}
base.WndProc (ref m);
}Top
7 楼TheRule(绝非偶然)回复于 2006-03-04 11:03:56 得分 0
呵呵,二楼Top
8 楼mooddecode1980(心情解码)回复于 2006-03-04 11:46:25 得分 0
:)
--Top
9 楼zhouyinhui(我也飘~~过)回复于 2006-03-04 11:49:35 得分 10
二楼是正确的方法,也是通常的方法,除此之外还可以:
protected override void Dispose( bool disposing )
{
this.Hide();
}Top
10 楼kingdhy(飞鹰)回复于 2006-03-04 11:54:46 得分 20
看看MSDN,如果把子窗体类型设置成对话框,则点关闭按钮时没有调用Form.Close()事件。Top
11 楼fanzai(帆仔)回复于 2006-03-04 17:10:02 得分 0
按照 jiangsheng(蒋晟.Net[MVP]) 说的,达到了我的要的效果。只是我必须判断用户是不是要关闭整个程序,否则子窗口永远不关闭,程序就没办法正常退出。
kingdhy(飞鹰) 说得听起来应该更好用,但是我没找到,再发个贴问。Top




