c# - 实现快捷方式编辑器文本框的最佳方法是什么?

标签 c# wpf winforms keyboard keyboard-shortcuts

我想要做的是实现一个 TextBox ,它接受组合键作为输入。例如,按下这些键(Windows 窗体或 WPF)时会出现文本 Win + Ctrl + A

一个很好的例子是 Winamp 设置中的“全局热键”下。

最佳答案

您可以通过以下方式检测几乎所有按下的按键: 来源:How to detect the currently pressed key?

private KeyMessageFilter m_filter = new KeyMessageFilter();

private void Form1_Load(object sender, EventArgs e)
{
    Application.AddMessageFilter(m_filter);

}


public class KeyMessageFilter : IMessageFilter
{
    private Dictionary<Keys, bool> m_keyTable = new Dictionary<Keys, bool>();

    public Dictionary<Keys, bool> KeyTable
    {
        get { return m_keyTable; }
        private set { m_keyTable = value; }
    }

    public bool IsKeyPressed()
    {
        return m_keyPressed; 
    }

    public bool IsKeyPressed(Keys k)
    {
        bool pressed = false;

        if (KeyTable.TryGetValue(k, out pressed))
        {
            return pressed;                  
        }

        return false; 
    }

    private const int WM_KEYDOWN = 0x0100;

    private const int WM_KEYUP = 0x0101;

    private bool m_keyPressed = false;


    public bool PreFilterMessage(ref Message m)
    {
        if (m.Msg == WM_KEYDOWN)
        {
            KeyTable[(Keys)m.WParam] = true;

            m_keyPressed = true;
        }

        if (m.Msg == WM_KEYUP)
        {                
            KeyTable[(Keys)m.WParam] = false;

            m_keyPressed = false;
        }

        return false;
    }
}

关于c# - 实现快捷方式编辑器文本框的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9418199/

相关文章:

c# - 在另一个线程中填充的排序列表

c# - EntityFramework 多对多与联结表

c# - 如何在 C# 中使用低级键盘钩子(Hook)来抑制任务切换键(winkey、alt-tab、alt-esc、ctrl-esc)

c# - 淡入淡出启动画面

c# - 百分比计算

c# - 异步套接字客户端接收

c# - 为什么我的 finally block 在 C# 中不起作用?

c# - xaml解析异常问题仅在win7上

c# - WPF - 从代码更改全局样式

c# - List<string[]> 显示列表值