| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3007 人关注过本帖
标题:[讨论]Windows程序中如何调用关闭事件?
取消只看楼主 加入收藏
marer
Rank: 2
等 级:新手上路
威 望:3
帖 子:928
专家分:0
注 册:2005-7-18
收藏
 问题点数:0 回复次数:11 
[讨论]Windows程序中如何调用关闭事件?
讨论一下,在Windows程序中如何在点击窗体上的X按钮在关闭窗体前查看是否用户对窗体上的DataGrid中的数据进行了修改,如果已修改则提示保存,否则直接关闭?注意:不是点击自己做的“关闭”按钮,而是点击窗体上的X按钮。

我写了个代码,但好像没有实现功能:

private DataTable dt=new DataTable();

private void Form1_Closing(object sender,........)
{
DataRow[] rr=dt.Select("","",DataViewRowState.ModifiedCurrent);
if(rr==null || rr.Length<=0)
{
return;
}
if(MessageBox.Show("您有"+rr.Length.ToString()+"条数据已修改,是否保存?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
{
SqlConnection con=new SqlConnection(.........);
SqlCommand cmd=new SqlCommand();
cmd.Connection=con;
cmd.CommandText="update Test set [ID]=@newid,[Name]=@newname,Sex=@newsex where [ID]=@oldid and [Name]=@oldname and Sex=@oldsex";
cmd.Parameters.Add("@newid",SqlDbType.VarChar,10,"ID");
cmd.Parameters.Add("@newname",SqlDbType.VarChar,10,"Name");
cmd.Parameters.Add("@newsex",SqlDbType.Char,2,"Sex");
SqlParameter para=cmd.Parameters.Add("@oldid",SqlDbType.VarChar,10,"ID");
para.SourceVersion=DataRowVersion.Original;
para=cmd.Parameters.Add("@oldname",SqlDbType.VarChar,10,"Name");
para.SourceVersion=DataRowVersion.Original;
para=cmd.Parameters.Add("@oldsex",SqlDbType.Char,2,"Sex");
para.SourceVersion=DataRowVersion.Original;
SqlDataAdapter da=new SqlDataAdapter();
da.UpdateCommand=cmd;
try
{
da.Update(rr);
}
catch(SqlException er)
{
MessageBox.Show(er.Message);
}
}
}
搜索更多相关主题的帖子: Windows程序 窗体 按钮 
2006-08-09 00:37
marer
Rank: 2
等 级:新手上路
威 望:3
帖 子:928
专家分:0
注 册:2005-7-18
收藏
得分:0 
别光说,拿个代码来看看

public class 人生历程 extends Thread{public void run(){while(true){努力,努力,再努力!!;Thread.sleep(0);}}}
2006-08-09 12:23
marer
Rank: 2
等 级:新手上路
威 望:3
帖 子:928
专家分:0
注 册:2005-7-18
收藏
得分:0 
以下是引用chenjin145在2006-8-9 12:54:00的发言:
[CODE]
this.Closing+=new CancelEventHandler(CloseCancel);

private void CloseCancel(object sender,CancelEventArgs e)
{
//判斷修改
e.Cancel=true;
}
[/CODE]

你的語氣缺乏禮貌

我一猜就会有人写这个代码,这么简单可以解决,还用拿到上面来讨论吗?自己做个工程来试试啊,这个不行的


public class 人生历程 extends Thread{public void run(){while(true){努力,努力,再努力!!;Thread.sleep(0);}}}
2006-08-10 17:28
marer
Rank: 2
等 级:新手上路
威 望:3
帖 子:928
专家分:0
注 册:2005-7-18
收藏
得分:0 
以下是引用chenjin145在2006-8-11 8:49:19的发言:

不知道你怎麼猜的
如果你用過,應該知道它的功能
我懷疑你根本都不了解.net的消息處理機制

事實就是,這個簡單的東西解決了你說點x誤關窗體的深奧的問題

你看看我楼顶的贴子的代码,你复制一下看一看可以实现功能吗?然后再上来说


public class 人生历程 extends Thread{public void run(){while(true){努力,努力,再努力!!;Thread.sleep(0);}}}
2006-08-11 15:18
marer
Rank: 2
等 级:新手上路
威 望:3
帖 子:928
专家分:0
注 册:2005-7-18
收藏
得分:0 
我所讲的不是解决误关窗体的功能,这样的话e.Cancel就可以解决,只是在用户点击了X后,要调用某些控件的数据,而此时某些控件已经被销毁了,根本用不了它们的数据。

public class 人生历程 extends Thread{public void run(){while(true){努力,努力,再努力!!;Thread.sleep(0);}}}
2006-08-11 15:20
marer
Rank: 2
等 级:新手上路
威 望:3
帖 子:928
专家分:0
注 册:2005-7-18
收藏
得分:0 
以下是引用monday4667在2006-8-11 15:17:34的发言:
我是这样做的第一种方法:
protected override void OnClosed(EventArgs e)//重写窗体关闭
{
//这里你添加你要在关闭前要做的事情

base.OnClosed(e);//这里是调用原来的关闭
}


第二种方法:
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)
{
MessageBox.Show("用户点了关闭按纽了");//这里你可以加入自己要做的事情
return;
}
base.WndProc(ref m);
}

这两个方法也不行,无法实现


public class 人生历程 extends Thread{public void run(){while(true){努力,努力,再努力!!;Thread.sleep(0);}}}
2006-08-11 15:26
marer
Rank: 2
等 级:新手上路
威 望:3
帖 子:928
专家分:0
注 册:2005-7-18
收藏
得分:0 
上传个东西吧
上传个东西吧,当修改数据后,点击X按钮时看看是否可以提示保存?
HMAZal8J.rar (32.35 KB) [讨论]Windows程序中如何调用关闭事件?



public class 人生历程 extends Thread{public void run(){while(true){努力,努力,再努力!!;Thread.sleep(0);}}}
2006-08-11 15:27
marer
Rank: 2
等 级:新手上路
威 望:3
帖 子:928
专家分:0
注 册:2005-7-18
收藏
得分:0 
我也试过用bool值来判断,但是也不行,Closing事件触发后,bool值永远是false

public class 人生历程 extends Thread{public void run(){while(true){努力,努力,再努力!!;Thread.sleep(0);}}}
2006-08-11 17:01
marer
Rank: 2
等 级:新手上路
威 望:3
帖 子:928
专家分:0
注 册:2005-7-18
收藏
得分:0 
大家都来试一下,成功后把代码传上来

public class 人生历程 extends Thread{public void run(){while(true){努力,努力,再努力!!;Thread.sleep(0);}}}
2006-08-11 17:01
marer
Rank: 2
等 级:新手上路
威 望:3
帖 子:928
专家分:0
注 册:2005-7-18
收藏
得分:0 
还是没有达到预期效果,我再次把程序发上来,看看可不可以实现:如果我把DataGrid数据修改后点击窗体上的X后是否可以实现提示保存的效果。用我的代码来试试看:
MAdBcwP6.rar (32.34 KB) [讨论]Windows程序中如何调用关闭事件?



public class 人生历程 extends Thread{public void run(){while(true){努力,努力,再努力!!;Thread.sleep(0);}}}
2006-08-28 14:20
快速回复:[讨论]Windows程序中如何调用关闭事件?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027328 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved