怎么在C#的WinForm的菜单中定义像VS一样的快捷键,例如 注释代码Ctrl+E,C

特别 2016-01-07 11:15:22
怎么在C#的WinForm的菜单中定义像VS一样的快捷键,例如 注释代码Ctrl+E,C

如下图

...全文
445 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
马少华 2016-01-08
  • 打赏
  • 举报
回复
给winform程序添加一个菜单,然后右键这个菜单->插入标准项,这些自动插入的菜单项就有快捷键,可以研究一下。
特别 2016-01-07
  • 打赏
  • 举报
回复
引用 3 楼 iAaronHua 的回复:
#1、#2给出的都是单一快捷键,楼主想要的的复合快捷键,如Ctrl+K,C(是按K和C两个字母)
说的是正确
引用 5 楼 Forty2 的回复:
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    //  新建一个空白Winform工程,添加以下代码:
    bool controlE = false;
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if ((keyData & Keys.Control) == Keys.Control)
        {
            if ((keyData & Keys.E) == Keys.E)
            {
                controlE = true;
                return true;
            }
            else if ((keyData & Keys.C) == Keys.C && controlE)
            {
                MessageBox.Show("Control E+C");
            }
        }
        controlE = false;
        return base.ProcessCmdKey(ref msg, keyData);
    }
}
谢谢,这种方法之前也想过 希望找一个更方便的通用的方法,因为像VS一样的,这种组合的快捷键【Control+E, C】有N多
Forty2 2016-01-07
  • 打赏
  • 举报
回复
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    //  新建一个空白Winform工程,添加以下代码:
    bool controlE = false;
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if ((keyData & Keys.Control) == Keys.Control)
        {
            if ((keyData & Keys.E) == Keys.E)
            {
                controlE = true;
                return true;
            }
            else if ((keyData & Keys.C) == Keys.C && controlE)
            {
                MessageBox.Show("Control E+C");
            }
        }
        controlE = false;
        return base.ProcessCmdKey(ref msg, keyData);
    }
}
江南小鱼 2016-01-07
  • 打赏
  • 举报
回复
iAaronHua 2016-01-07
  • 打赏
  • 举报
回复
#1、#2给出的都是单一快捷键,楼主想要的的复合快捷键,如Ctrl+K,C(是按K和C两个字母)
  • 打赏
  • 举报
回复
菜单控件给你设计好了快捷键机制。去学习就是了。
Forty2 2016-01-07
  • 打赏
  • 举报
回复
引用 6 楼 sdfkfkd 的回复:
希望找一个更方便的通用的方法,因为像VS一样的,这种组合的快捷键【Control+E, C】有N多
方法有了,要“更方便的通用的方法”,无非就是重构,使用一些编程小技巧。
 public class MyShortCut
{
    public Keys Modifier { get; private set; }
    public Keys[] Sequence { get; private set; }
    public Action Action { get; private set; }

    static TypeConverter converter = TypeDescriptor.GetConverter(typeof(Keys));
    public MyShortCut (Keys modifier, string keys, Action action)
	{
        this.Modifier = modifier; 
        this.Sequence = keys.Split(',')
            .Select(x => (Keys)converter.ConvertFrom(x))
            .ToArray();
        this.Action = action;
	}

    public MyShortCut(Keys modifier, string keys, ToolStripMenuItem menuItem) :
        this(modifier, keys, menuItem.PerformClick)
    {
        string ms = converter.ConvertTo(modifier, typeof(string)).ToString().Replace("+None","");
        menuItem.ShortcutKeyDisplayString =  ms + "+" + keys;
    }

    private List<Keys> keysPressed = new List<Keys>();
    private bool ProcessCmdKey(Keys keyData)
    {
        if ((keyData & this.Modifier) == this.Modifier)
        {
            this.keysPressed.Add(keyData & Keys.KeyCode);
            if (keysPressed.SequenceEqual(Sequence.Take(keysPressed.Count)))
            {
                if (keysPressed.Count == Sequence.Length)
                {
                    this.Action();
                    keysPressed.Clear();
                }
                return true;
            }
        }
        keysPressed.Clear();
        return false;
    }

    public static class Manager
    {
        static List<MyShortCut> shortcuts = new List<MyShortCut>();
        public static void Register(MyShortCut shortcut)
        {
            shortcuts.Add(shortcut);
        }
        public static bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            bool processed = false;
            foreach (var shortcut in shortcuts)
            {
                processed = shortcut.ProcessCmdKey(keyData) || processed;
            }
            return processed;
        }
    }
}
使用方法(其中if(true)示范给菜单加组合快捷键):
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        MyShortCut.Manager.Register(new MyShortCut(Keys.Control, "E,C", () => MessageBox.Show("Control EC")));
        MyShortCut.Manager.Register(new MyShortCut(Keys.Alt, "E,E", () => this.Text += " EE"));

        if (true)
        {
            ToolStripMenuItem subItem = new ToolStripMenuItem("Hi", null, (o, ea) => MessageBox.Show("hi"));
            ToolStrip tool = new ToolStrip(new ToolStripMenuItem("About", null, subItem));
            this.Controls.Add(tool);
            MyShortCut.Manager.Register(new MyShortCut(Keys.Control, "H,I", subItem));
        }
    }

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        return MyShortCut.Manager.ProcessCmdKey(ref msg, keyData) || base.ProcessCmdKey(ref msg, keyData);
    }
}
如果你还想在代码上简洁一些,可以使用Winform的"扩展属性"(类似在设计窗口中设置ToolTip的方式)。 具体可以参考微软的例子:https://msdn.microsoft.com/zh-cn/library/d6c1xa43.aspx 不过,即使用了扩展属性,示例中的protected override bool ProcessCmdKey还是不能避免。这是因为亲疏有别,微软对自己菜单的快捷键有特别处理。
辅助软件 aspx/asp代码生成器 语言规范 C# Language Specification 1.2(C#语言规范1.2).doc C# Language Specification 2.0(C#语言规范2.0).doc 源码教程 ASP.NET编程技术与交互式网页设计 asp.net亲密接触_带源码 C#学习 01_类.htm.txt 02_构造函数的执行序列.htm.txt 03_抽象类和接口.htm.txt 04_结构类型.htm.txt 05_类成员的定义.htm.txt 06_类成员的其他议题.htm.txt 07_接口的执行.htm.txt 08_集合.htm.txt 09_运算符重载.htm.txt 10_阴影和深度复制.htm.txt 11_事件基础.htm.txt 12_事件进阶.htm.txt 13_读写Txt文件.htm.txt 14_StatusBar控件.htm.txt 15_自定义控件.htm.txt 16_使用打开保存文件对话框.htm.txt 17_图形绘制基础.htm.txt 18_图形绘制进阶-线条、字体.htm.txt 19_图形绘制进阶-图像(双倍缓冲).htm.txt 20_Windows应用程序安装部署概念.htm.txt 21_使用文件基础.htm.txt 22_使用文件高级.htm.txt 23_串行化和并行化.htm.txt 技术资料 ACCESS数据库操作类.txt ASP.NET常用代码.txt asp.net常用函数表.txt Asp.net的身份验证.txt ASP导出Excel数据的四种方法.txt C#调用存储过程.txt CheckBox控件.txt datagrid排序_选择_分页.txt DataSet对象.txt DotNET WinForm FAQ 16个.txt excel打印.txt EXCEL导出.txt EXCEL合并单元格.txt mail.txt NET在RichTextBox控件加入图片(类似QQ).txt send.txt SQL储存过程等的解密.txt VisualC#打造“浏览器”.txt vs2005常用快捷键.txt webcontrol和pagelet.txt win2003配置msdtc.txt word导出.txt 保证应用程序只有一个实例运行.txt 编辑字段的word文件.txt 编码标准.txt 播放声音.txt 捕捉DataGrid的双击事件(C#版本).txt 不显示窗口后台运行程序.txt 储存过程.txt 处理“进程性能计数器被禁用”的错误.txt 串口操作.txt 打开word文件.txt 打造“浏览器”.txt 带图标和自定义颜色的ListBox.txt 得到当前数据库所有用户表信息.txt 读取、设置系统时间日期.txt 读写注册表.txt 对过程进行加密.txt 二进制数据保存.txt 二进制数据字段的更新.txt 分页及动态创建列的控件 .txt 改变Windows服务的启动顺序.txt 各进制之间的转换.txt 给图片添加版权信息.txt 关于拖放操作.txt 关于在WinForm里用HttpWebRequest获得某个页面,并填写页面的textbox及点击button的方法.txt 画带阴影效果的文字.txt 环境信息.txt 获得光标在多行textbox的行与列的函数.txt 计算控件文字所占的宽度.txt 加半透明图片水印.txt 将控件放到datagrid以及修改列宽.txt 截取系统消息.txt 解决VS.NET使用属性框不显示的问题.txt 里的InputBox.txt 模拟鼠标和键盘操作.txt 取CPU的序列号.txt 如何:在VisualC#.NET建立一个平滑的进度条.txt 如何得到网卡号.txt 如何调用WindowsAPI的要点.txt 如何控制输入法.txt 如何利用GDI作图解决异或问题.txt 如何取硬件标志.txt 如何让应用程序只有一个实例运行.txt 如何如何插入照片到Excel.txt 如何识别键盘左右的shift,Ctrl或Alt键.txt 如何水晶按钮的程序生成.txt 如何为DataGrid添加下拉列表框.txt 如何用C#在Excel生成图表?.txt 如何用程序实现键盘和鼠标的模拟?.txt 如何与资源管理器互动剪切、拷贝、粘贴文件.txt 深入理解C#编程的组件-事件-委托.txt 生成透明的GIF图片 .txt 生成压缩图片时的2种方法.txt 使用C#返回系统特殊路径.txt 使用VisualC#.NET检查Windows版本.txt 使用Win32和其他库.txt 使用自己画的光标.txt 数据绑定.txt 水晶报表使用winform.txt 水印.txt 特殊文件夹路径.txt 同一解决方案一个项目的xml注释在另一个项目不能智能提示显示这些注释的解决方法.txt 图像读取.txt 无标题窗口的拖放.txt 下面的5行代码完成了从局域网找出所有的机器.txt 显示DataGrid序号的一个适用的方法.txt 用C#快速往Excel写数据.txt 用C#来捕获屏幕.txt 用C#做ScreenSaver.txt 用imgscan.ocx来扫描图像.txt 用word填充表格.txt 用户登录组合控件.txt 在.NET得到计算机硬件信息的一些功能.txt 在MapX响应滚轮放大缩小地图.txt 在两个ASP.NET页面之间传递值.txt 在如何利用SharpZipLib进行文件的压缩和解压缩.txt 怎样打开关闭CDROM.txt 怎样检测网络的电脑是否有安装SQL2000.txt 怎样写一个存储过程类来实现如何对存储过程的调用?.txt 直接拉入图片文件到程序窗口打开.txt 指定Web服务器运行的不是ASP.NET1.1版.txt 字符串加密.txt 字幕显示屏幕保护.txt 自己动手用c#写控件.txt C#试题 简答题.txt 填空题.txt 问答题1.txt 问答题2.txt 选择题.txt 综合题.txt
语言规范 C# Language Specification 1.2(C#语言规范1.2).doc C# Language Specification 2.0(C#语言规范2.0).doc 源码教程 ASP.NET编程技术与交互式网页设计 asp.net亲密接触_带源码 C#学习 01_类.htm.txt 02_构造函数的执行序列.htm.txt 03_抽象类和接口.htm.txt 04_结构类型.htm.txt 05_类成员的定义.htm.txt 06_类成员的其他议题.htm.txt 07_接口的执行.htm.txt 08_集合.htm.txt 09_运算符重载.htm.txt 10_阴影和深度复制.htm.txt 11_事件基础.htm.txt 12_事件进阶.htm.txt 13_读写Txt文件.htm.txt 14_StatusBar控件.htm.txt 15_自定义控件.htm.txt 16_使用打开保存文件对话框.htm.txt 17_图形绘制基础.htm.txt 18_图形绘制进阶-线条、字体.htm.txt 19_图形绘制进阶-图像(双倍缓冲).htm.txt 20_Windows应用程序安装部署概念.htm.txt 21_使用文件基础.htm.txt 22_使用文件高级.htm.txt 23_串行化和并行化.htm.txt 技术资料 ACCESS数据库操作类.txt ASP.NET常用代码.txt asp.net常用函数表.txt Asp.net的身份验证.txt ASP导出Excel数据的四种方法.txt C#调用存储过程.txt CheckBox控件.txt datagrid排序_选择_分页.txt DataSet对象.txt DotNET WinForm FAQ 16个.txt excel打印.txt EXCEL导出.txt EXCEL合并单元格.txt mail.txt NET在RichTextBox控件加入图片(类似QQ).txt send.txt SQL储存过程等的解密.txt VisualC#打造“浏览器”.txt vs2005常用快捷键.txt webcontrol和pagelet.txt win2003配置msdtc.txt word导出.txt 保证应用程序只有一个实例运行.txt 编辑字段的word文件.txt 编码标准.txt 播放声音.txt 捕捉DataGrid的双击事件(C#版本).txt 不显示窗口后台运行程序.txt 储存过程.txt 处理“进程性能计数器被禁用”的错误.txt 串口操作.txt 打开word文件.txt 打造“浏览器”.txt 带图标和自定义颜色的ListBox.txt 得到当前数据库所有用户表信息.txt 读取、设置系统时间日期.txt 读写注册表.txt 对过程进行加密.txt 二进制数据保存.txt 二进制数据字段的更新.txt 分页及动态创建列的控件 .txt 改变Windows服务的启动顺序.txt 各进制之间的转换.txt 给图片添加版权信息.txt 关于拖放操作.txt 关于在WinForm里用HttpWebRequest获得某个页面,并填写页面的textbox及点击button的方法.txt 画带阴影效果的文字.txt 环境信息.txt 获得光标在多行textbox的行与列的函数.txt 计算控件文字所占的宽度.txt 加半透明图片水印.txt 将控件放到datagrid以及修改列宽.txt 截取系统消息.txt 解决VS.NET使用属性框不显示的问题.txt 里的InputBox.txt 模拟鼠标和键盘操作.txt 取CPU的序列号.txt 如何:在VisualC#.NET建立一个平滑的进度条.txt 如何得到网卡号.txt 如何调用WindowsAPI的要点.txt 如何控制输入法.txt 如何利用GDI作图解决异或问题.txt 如何取硬件标志.txt 如何让应用程序只有一个实例运行.txt 如何如何插入照片到Excel.txt 如何识别键盘左右的shift,Ctrl或Alt键.txt 如何水晶按钮的程序生成.txt 如何为DataGrid添加下拉列表框.txt 如何用C#在Excel生成图表?.txt 如何用程序实现键盘和鼠标的模拟?.txt 如何与资源管理器互动剪切、拷贝、粘贴文件.txt 深入理解C#编程的组件-事件-委托.txt 生成透明的GIF图片 .txt 生成压缩图片时的2种方法.txt 使用C#返回系统特殊路径.txt 使用VisualC#.NET检查Windows版本.txt 使用Win32和其他库.txt 使用自己画的光标.txt 数据绑定.txt 水晶报表使用winform.txt 水印.txt 特殊文件夹路径.txt 同一解决方案一个项目的xml注释在另一个项目不能智能提示显示这些注释的解决方法.txt 图像读取.txt 无标题窗口的拖放.txt 下面的5行代码完成了从局域网找出所有的机器.txt 显示DataGrid序号的一个适用的方法.txt 用C#快速往Excel写数据.txt 用C#来捕获屏幕.txt 用C#做ScreenSaver.txt 用imgscan.ocx来扫描图像.txt 用word填充表格.txt 用户登录组合控件.txt 在.NET得到计算机硬件信息的一些功能.txt 在MapX响应滚轮放大缩小地图.txt 在两个ASP.NET页面之间传递值.txt 在如何利用SharpZipLib进行文件的压缩和解压缩.txt 怎样打开关闭CDROM.txt 怎样检测网络的电脑是否有安装SQL2000.txt 怎样写一个存储过程类来实现如何对存储过程的调用?.txt 直接拉入图片文件到程序窗口打开.txt 指定Web服务器运行的不是ASP.NET1.1版.txt 字符串加密.txt 字幕显示屏幕保护.txt 自己动手用c#写控件.txt C#试题 简答题.txt 填空题.txt 问答题1.txt 问答题2.txt 选择题.txt 综合题.txt 辅助软件 aspx/asp代码生成器

110,565

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧