好像不可以,是系统级,你可以做一个标志,当用户名和密码正确,更改标志为true,那么不管如何关闭对话框,标志为true则进入主程序不就行了吗?

解决方案 »

  1.   

    怎么截获alt+f4,望兄台奉献代码。
      

  2.   

    我觉得这样处理不好,你不就是希望登陆成功的用户才能进入系统吗?我的建议:
         设置变量IsLoginSuccess = false,如果登陆成功时修改该变量为true,然后进入系统,否则退出!注意:在验证用户登陆信息后,再进入主程序即可,此为唯一入口!
      

  3.   

    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
      

  4.   

    我遇到和你一样的问题,方法很简单………
    //一种方法是这样子的(把代码拷贝进去就万事大吉) 
    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()); 
    }