当前位置:编程学习 > C#/ASP.NET >>

快捷键(ctrl+Q)

.net里面怎么实现判断快捷键(ctrl+Q),我想实现如果用户同时按了这两个键,我就将程序退出,该怎么写呢,新手请教,谢谢大家了 --------------------编程问答-------------------- 自己顶下啊 --------------------编程问答-------------------- KEY_Down()事件
{
 if( e.code=alt+Q)
  application.exit()
} --------------------编程问答--------------------

                from1.KeyPreview=true;
                private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.Q)
{
Application.Exit();
}
}
--------------------编程问答-------------------- 谢谢楼上回复,我是用select语句来判断的,为什么我写了如下语句,程序还是退不了呢?请大家指点下啊,谢谢了 
Case e.KeyCode = Keys.Q & e.Control
                Application.Exit() --------------------编程问答-------------------- 关注。 --------------------编程问答--------------------         private void Form1_Load(object sender, EventArgs e)
        {
           this.KeyPreview = true;
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if ((e.Modifiers == Keys.Control) && (e.KeyCode == Keys.Q))
            {
                Application.Exit();
            }
        } --------------------编程问答-------------------- 谢谢楼上回复,我刚又试了下,发现任何快捷键按了都不起任何作用,是怎么回事呢?是不是哪里没有设置好呢?请大家指点啊 --------------------编程问答-------------------- 我没做过``帮顶 关注``` --------------------编程问答-------------------- 你写的是VB代码吧 --------------------编程问答-------------------- 要么:注册键

    //================================================================================================
    private RegisterHotKeyClass _RegisKey = new RegisterHotKeyClass();
    private void button6_Click(object sender, EventArgs e)
    {
        _RegisKey.Keys = Keys.Q;
        _RegisKey.ModKey = RegisterHotKeyClass.MODKEY.MOD_CONTROL | RegisterHotKeyClass.MODKEY.MOD_ALT;
        _RegisKey.WindowHandle = this.Handle;
        _RegisKey.HotKey += new RegisterHotKeyClass.HotKeyPass(_Regis_HotKey);
        _RegisKey.StarHotKey();
                    
    }

    void _Regis_HotKey()
    {
        MessageBox.Show("Ctrl Alt Q");
    }
                 
                 
    public class RegisterHotKeyClass
    {
        private IntPtr m_WindowHandle = IntPtr.Zero;
        private MODKEY m_ModKey = MODKEY.MOD_CONTROL;
        private Keys m_Keys = Keys.A;
        private int m_WParam = 10000;
        private bool Star = false;
        private HotKeyWndProc m_HotKeyWnd = new HotKeyWndProc();

        public IntPtr WindowHandle
        {
            get { return m_WindowHandle; }
            set { if (Star)return; m_WindowHandle = value; }
        }
        public MODKEY ModKey
        {
            get { return m_ModKey; }
            set { if (Star)return; m_ModKey = value; }
        }
        public Keys Keys
        {
            get { return m_Keys; }
            set { if (Star)return; m_Keys = value; }
        }
        public int WParam
        {
            get { return m_WParam; }
            set { if (Star)return; m_WParam = value; }
        }

        public void StarHotKey()
        {
            if (m_WindowHandle != IntPtr.Zero)
            {
                if (!RegisterHotKey(m_WindowHandle, m_WParam, m_ModKey, m_Keys))
                {
                    throw new Exception("注册失败!");
                }
                try
                {
                    m_HotKeyWnd.m_HotKeyPass = new HotKeyPass(KeyPass);
                    m_HotKeyWnd.m_WParam = m_WParam;
                    m_HotKeyWnd.AssignHandle(m_WindowHandle);
                    Star = true;
                }
                catch
                {
                    StopHotKey();
                }
            }
        }
        private void KeyPass()
        {
            if (HotKey != null) HotKey();
        }
        public void StopHotKey()
        {
            if (Star)
            {
                if (!UnregisterHotKey(m_WindowHandle, m_WParam))
                {
                    throw new Exception("卸载失败!");
                }
                Star = false;
                m_HotKeyWnd.ReleaseHandle();
            }
        }


        public delegate void HotKeyPass();
        public event HotKeyPass HotKey;


        private class HotKeyWndProc : NativeWindow
        {
            public int m_WParam = 10000;
            public HotKeyPass m_HotKeyPass;
            protected override void WndProc(ref Message m)
            {
                if (m.Msg == 0x0312 && m.WParam.ToInt32() == m_WParam)
                {
                    if (m_HotKeyPass != null) m_HotKeyPass.Invoke();
                }

                base.WndProc(ref m);
            }
        }
                    
        public enum MODKEY
        {
            MOD_ALT = 0x0001,
            MOD_CONTROL = 0x0002,
            MOD_SHIFT = 0x0004,
            MOD_WIN = 0x0008,
        }

        [DllImport("user32.dll")]
        public static extern bool RegisterHotKey(IntPtr wnd, int id, MODKEY mode, Keys vk);

        [DllImport("user32.dll")]
        public static extern bool UnregisterHotKey(IntPtr wnd, int id);

    }
    //================================================================================================
    

--------------------编程问答-------------------- 上面的代码给你作参考,你可能需要修改一下,

引用 7 楼 xiaojin0710 的回复:
谢谢楼上回复,我刚又试了下,发现任何快捷键按了都不起任何作用,是怎么回事呢?是不是哪里没有设置好呢?请大家指点啊

你 this.KeyPreview = true; 没有? --------------------编程问答--------------------

Case e.KeyCode = Keys.Q & e.Control

转化成一个KeyCode了,不是实际的Ctrl+Q --------------------编程问答-------------------- 建议使用if语句,如果使用switch可以参考
http://blog.csdn.net/jjhua/archive/2009/07/26/4381034.aspx

已经测试,比较好用 --------------------编程问答-------------------- 干嘛那么麻烦。。。
我问你  你程序里有没有退出菜单项? 有的话直接指定菜单项的快捷键为Ctrl+Q就可以了  在属性设置里面就有

LZ结贴 赶着转生 --------------------编程问答--------------------
引用 14 楼 foxdave 的回复:
干嘛那么麻烦。。。
我问你 你程序里有没有退出菜单项? 有的话直接指定菜单项的快捷键为Ctrl+Q就可以了 在属性设置里面就有

LZ结贴 赶着转生


确实~
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,