如何使WinForm的Alt+F4失效? 好像不可以,是系统级,你可以做一个标志,当用户名和密码正确,更改标志为true,那么不管如何关闭对话框,标志为true则进入主程序不就行了吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 怎么截获alt+f4,望兄台奉献代码。 我觉得这样处理不好,你不就是希望登陆成功的用户才能进入系统吗?我的建议: 设置变量IsLoginSuccess = false,如果登陆成功时修改该变量为true,然后进入系统,否则退出!注意:在验证用户登陆信息后,再进入主程序即可,此为唯一入口! 1、屏蔽Alt+F4将窗体的属性KeyPrieview设置为true,然后在窗体的MouseDown事件中添加处理:private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e){ if ((e.KeyCode == Keys.F4)&&(e.Alt == true)) { e.Handled = true; }}2、可以根据登陆窗体的返回值(DialogResult)来确定是否正常登陆,Alt+F4关闭时一般返回DialogResult.Cancel 我遇到和你一样的问题,方法很简单………//一种方法是这样子的(把代码拷贝进去就万事大吉) private const int SC_CLOSE = 0xF060; private const int WM_SYSCOMMAND = 0x112; protected override void WndProc (ref System.Windows.Forms.Message m ) { if (m.Msg == WM_SYSCOMMAND) { if ((m.WParam.ToInt32() & 0xFFF0) == SC_CLOSE && m.LParam.ToInt32() == 0) return; } base.WndProc(ref m); } //我用的就是上面的方法……还有一种更有趣的方法: //创建一个消息筛选器类 public class ATL_F4_MsgFilter : IMessageFilter { private const int SC_CLOSE = 0xF060; private const int WM_SYSCOMMAND = 0x112; public bool PreFilterMessage(ref Message m) { if (m.Msg == WM_SYSCOMMAND) { if ((m.WParam.ToInt32() & 0xFFF0) == SC_CLOSE && m.LParam.ToInt32() == 0) return true; } return false; } } 然后在程序代码中加入如下代码: //============================================================================ private ALT_F4_MsgFilter myMsgFilter; private int nFilterAddCount; //添加筛选器计数器 //============================[创建筛选器事例]================================ private void Form1_Load(object sender, System.EventArgs e) { myMsgFilter=new ALT_F4_MsgFilter(); } //==============================[ 打开屏蔽 ]================================ private void button1_Click(object sender, System.EventArgs e) { if (nFilterAddCount==0) { Application.AddMessageFilter(myMsgFilter); nFilterAddCount++; } } //==============================[ 关闭屏蔽 ]================================ private void button2_Click(object sender, System.EventArgs e) { if (nFilterAddCount == 1) { Application.RemoveMessageFilter(myMsgFilter); nFilterAddCount -- ; } } //============================================================================ //当然只想屏蔽的话,也很简单,只需要以下代码就可以了 private void Form1_Load(object sender, System.EventArgs e) { Application.AddMessageFilter(new ALT_F4_MsgFilter()); } c#视频播放器,双击屏幕全屏的问题 C#问题 求助:大型XML文档的修改 A页面弹出B页面,如何能够在B页面中自动激发A页面的事件? 急!! C# 中的鼠标事件 请教各位如何利用.net做一个安装程序? dev中的gridControl分组排序的问题 新手询问一段C#代码 请教怎样开发一个继承自control的新控件。 哪位告诉我一个安装.net的秘匙,给分喽!!! 怎样生成Socket数组??? 字符串相加连接不起来??
设置变量IsLoginSuccess = false,如果登陆成功时修改该变量为true,然后进入系统,否则退出!注意:在验证用户登陆信息后,再进入主程序即可,此为唯一入口!
将窗体的属性KeyPrieview设置为true,然后在窗体的MouseDown事件中添加处理:
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if ((e.KeyCode == Keys.F4)&&(e.Alt == true))
{
e.Handled = true;
}
}
2、可以根据登陆窗体的返回值(DialogResult)来确定是否正常登陆,Alt+F4关闭时一般返回
DialogResult.Cancel
//一种方法是这样子的(把代码拷贝进去就万事大吉)
private const int SC_CLOSE = 0xF060;
private const int WM_SYSCOMMAND = 0x112;
protected override void WndProc (ref System.Windows.Forms.Message m )
{
if (m.Msg == WM_SYSCOMMAND)
{
if ((m.WParam.ToInt32() & 0xFFF0) == SC_CLOSE
&& m.LParam.ToInt32() == 0)
return;
}
base.WndProc(ref m);
}
//我用的就是上面的方法……
还有一种更有趣的方法: //创建一个消息筛选器类
public class ATL_F4_MsgFilter : IMessageFilter
{
private const int SC_CLOSE = 0xF060;
private const int WM_SYSCOMMAND = 0x112;
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND)
{
if ((m.WParam.ToInt32() & 0xFFF0) == SC_CLOSE
&& m.LParam.ToInt32() == 0)
return true;
}
return false;
}
} 然后在程序代码中加入如下代码:
//============================================================================
private ALT_F4_MsgFilter myMsgFilter;
private int nFilterAddCount; //添加筛选器计数器
//============================[创建筛选器事例]================================
private void Form1_Load(object sender, System.EventArgs e)
{
myMsgFilter=new ALT_F4_MsgFilter();
}
//==============================[ 打开屏蔽 ]================================
private void button1_Click(object sender, System.EventArgs e)
{
if (nFilterAddCount==0)
{
Application.AddMessageFilter(myMsgFilter);
nFilterAddCount++;
}
}
//==============================[ 关闭屏蔽 ]================================
private void button2_Click(object sender, System.EventArgs e)
{
if (nFilterAddCount == 1)
{
Application.RemoveMessageFilter(myMsgFilter);
nFilterAddCount -- ;
}
}
//============================================================================
//当然只想屏蔽的话,也很简单,只需要以下代码就可以了
private void Form1_Load(object sender, System.EventArgs e)
{
Application.AddMessageFilter(new ALT_F4_MsgFilter());
}