C# 根据KeyEventArgs与组合键字符串相互转换

  /// <summary>
    /// 快捷键相关的类
    /// </summary>
    public static class HotKeyInfo
    {
        /// <summary>
        /// 根据KeyEventArgs生成组合键字符串
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public static string GetStringByKey(KeyEventArgs e)
        {
            if (e.KeyValue == 10)
            {
                return "Shift + ";
            }
            else if(e.KeyValue == 17)
            {
                return "Ctrl + ";
            }
            else if(e.KeyValue == 18)
            {
                return "Alt + ";
            }
            else
            {
                StringBuilder keyValue = new StringBuilder();
                if (e.Modifiers != 0)
                {
                    if (e.Control)
                    {
                        keyValue.Append("Ctrl + ");
                    }
                    if (e.Alt)
                    {
                        keyValue.Append("Alt + ");
                    }
                    if (e.Shift)
                    {
                        keyValue.Append("Shift + ");
                    }
                }
                if ((e.KeyValue >= 48 && e.KeyValue <= 57))    //0-9
                {
                    keyValue.Append(e.KeyCode.ToString());
                    //keyValue.Append(e.KeyCode.ToString().Substring(1));
                }
                else
                {
                    keyValue.Append(e.KeyCode);
                }

                return keyValue.ToString();
            }
        }

        /// <summary>
        ///  根据按键获得单一键值对应字符串
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public static string GetSingleStrByKey(KeyEventArgs e)
        {
            if (e.KeyValue == 16)
            {
                return "Shift";
            }
            else if (e.KeyValue == 17)
            {
                return "Ctrl";
            }
            else if (e.KeyValue == 18)
            {
                return "Alt";
            }
            else
            {
                return e.KeyCode.ToString();
            }
        }

        /// <summary>
        /// 根据string生成KeyEventArgs
        /// </summary>
        /// <param name="strKey"></param>
        /// <returns></returns>
        public static KeyEventArgs GetKeyByString(string strKey)
        {
            Keys keyResult = new Keys();
            string[] strKeyCodes = strKey.Split(‘+‘);
            if (strKeyCodes.Length > 0)
            {
                int numberKey;
                foreach (string keyEach in strKeyCodes)
                {
                    if (keyEach.Trim().ToUpper() == "CTRL")
                    {
                        keyResult = keyResult | Keys.Control;
                    }
                    else if (keyEach.Trim().ToUpper() == "SHIFT")
                    {
                        keyResult = keyResult | Keys.Shift;
                    }
                    else if (keyEach.Trim().ToUpper() == "ALT")
                    {
                        keyResult = keyResult | Keys.Alt;
                    }
                    //数字
                    else if (int.TryParse(keyEach, out numberKey))
                    {
                        KeysConverter converter = new KeysConverter();
                        Keys getKey = (Keys)converter.ConvertFromString(‘D‘ + keyEach);
                        keyResult = keyResult | getKey;
                    }
                    //其他(字母,F0-F12)
                    else
                    {
                        KeysConverter converter = new KeysConverter();
                        Keys getKey = (Keys)converter.ConvertFromString(keyEach);
                        keyResult = keyResult | getKey;
                    }
                }

            }
            KeyEventArgs newEventArgs = new KeyEventArgs(keyResult);
            return newEventArgs;
        }
    }

版权声明:作者:jiankunking 出处:http://blog.csdn.net/jiankunking 本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

时间: 2024-10-13 19:59:37

C# 根据KeyEventArgs与组合键字符串相互转换的相关文章

C# 依据KeyEventArgs与组合键字符串相互转换

/// 快捷键相关的类 /// </summary> public static class HotKeyInfo { /// <summary> /// 依据KeyEventArgs生成组合键字符串 /// </summary> /// <param name="e"></param> /// <returns></returns> public static string GetStringByKe

Bash基础(2) 通配符 组合键 数据重定向 管道 tee

Bash基础(2)     通配符  组合键  数据重定向  管道  tee命令 1 文本名"通配符" *:匹配任意长度的任意字符: ?:匹配任意单个字符: []: 匹配指定范围内的任意单个字符: [0-9] [^]:匹配范围外的任意单个字符: [^a-b] 字符集合: [:lower:] 匹配任何小写字母 [:upper:] 匹配任何大写字母 [:alnum:] 匹配任何字母 [:digit:]  匹配任何数字 [:space:] 匹配空格符 [:punct:] 匹配任何标点符号 [

Silverlight下组合键、快捷键的使用方法

在开发Silverlight的项目中,为了更好的用户体验,我们常要给一些控件添加一些快捷键.然而,在Silverlight中的快捷键跟winForm中的有些不同,特写此文章与大家分享一下: private void txtBox_KeyDown(object sender, KeyEventArgs e) { ModifierKeys keys = Keyboard.Modifiers; if ((e.Key == Key.G) && keys == ModifierKeys.Contro

WPF TextBox中keydown事件组合键

//enter键和alt键组合if (e.KeyStates == Keyboard.GetKeyStates(Key.Return) && Keyboard.Modifiers == ModifierKeys.Alt) { }或 if (e.KeyStates == Keyboard.GetKeyStates(Key.Return) && (e.KeyboardDevice.Modifiers & ModifierKeys.Control) == Modifier

禁用Skype For Business 2016客户端的Ctrl+Enter快捷组合键

在Lync客户端或者Skype For Business 2016客户端上,都有很多快捷键(快捷键分类可以参考:https://support.office.com/en-us/article/Keyboard-shortcuts-for-Skype-for-Business-74eda765-5631-4fc1-8aad-cc870115347a).中国用户很多电脑上都会使用QQ这个软件,QQ中默认发送消息使用的是Ctrl+Enter组合键.如果有人使用QQ习惯了,在使用Lync客户端的时候就

SendKeys发送组合键

使用: using System.Windows.Forms;//添加命名空间引用 { SendKeys.SendWait("{DOWN}"); ppt.ppt_sendkey("+{F5}");//全屏 表示SHIFT+F5的组合:加号直接代表shift键 ppt.ppt_sendkey("{ESC}");//取消全屏 } SendKeys   语句 将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样. 语法 SendKeys  

Windows+X组合键失效问题

有时候,生活总给你带来点出其不意的乐趣,比如今天的[Windows+X组合键失效],网上找了很多教程,修改注册表等等,均无效. 博主在使用Win7.10.甚至8的时候居然都遇到这问题了,中间间隔时间很长,所以一般会忘记了上次是怎么解决的.对于一个一贯遵循能用键盘搞定的坚决不用鼠标的装X爱好者来说,简直是一场灾难. 现解决方法如下,Win10,Win7亲测有效: 开始->运行->gpedit.msc命令->用户配置->管理模板->Windows组件->文件资源管理器(有些

利用原生JS判断组合键

<script type="text/javascript"> var isAlt = 0; var isEnt = 0; document.onkeydown = function(e){ var evn = e||event; var code = evn.keyCode||evn.which||evn.charCode; if(code==13){ isEnt = 1; } if(code==18){ isAlt = 1; } // 判读Alt+Enter组合键 if

eclipse中代码格式化组合键失效了

因为最近在整理java笔记,发现代码格式化的组合键失效了,但其他的组合键是好着的,设置里面找了也是对着的. 最后是在输入法的设置里面发现了它,原来是快捷键冲突了.取消输入法里面 的快捷键就好了,或者改掉也行.