c#-Win Forms UserControl未检测到按键
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-Win Forms UserControl未检测到按键,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2320字,纯文字阅读大概需要4分钟。
内容图文
![c#-Win Forms UserControl未检测到按键](/upload/InfoBanner/zyjiaocheng/684/1f666f48cb2d4d1cac367cc6a9761dab.jpg)
对此有很多疑问(one,two,three,four,five),但是我尝试了所有这些修复程序,它们要么不起作用,要么不适合我的目的.这是我的基本结构:
User Control
|-Panel
|-Picture Box (several of them, created at runtime, do not exist at design time)
因为我认为这是相关的,所以面板的停靠设置为“填充”,调整大小设置为“增大和缩小”,因此它始终覆盖整个用户控件. PictureBox始终覆盖面板的一部分,但通常不是全部(尽管有可能).
我特别在听Ctrl C,并且我需要一个可以响应的方法,而不管哪个孩子有焦点.我想要一种可以监听任意按键的方法,以便以后进行扩展.
链接页面上的答案之一是建议使这些按键成为全局监听器,我不想这样做,因为如果它是后台应用程序,我不希望它消失.另一个建议以顶级形式检测它并将其过滤到我的用户控件中.问题在于关闭的用户控件是作为DLL构建的,我不想强??迫使用它的应用程序必须实现侦听Ctrl C的功能,这是它应该自己处理的事情.
为什么上面的链接对我不起作用
1)我没有在UserControl上将KeyPreview属性设置为true.关于该问题的第二个答案表明,我已经重写了ProcessCmdKey,但是无论我尝试什么,都永远不会调用回调.
2)这也建议重写ProcessCmdKey.正如我所说,它从未被调用过.
3)我没有接受按钮可以设置为true.
4)KeyDown和PreviewKeyDown回调都已实现,从未调用过.
5)还建议使用ProcessCmdKey.
无论焦点如何,如何在用户控制级别检测关键事件?另外,如果我尝试了上述方法,那么我错过了哪些设置却无法正常工作?
解决方法:
OP: I am specifically listening for Ctrl + C, and I need a method that can
respond regardless of which child has focus.
如果您想从控件中处理诸如Ctrl C之类的组合键,即使它没有焦点或无法选择,也可以在用户控件中添加一个不可见的MenuStrip并为其添加一个项目并为其分配快捷方式.然后处理项目的点击事件,并做您需要的事情.
即使您的控件不包含焦点,每次用户按下Ctrl C都会引发click事件.
您也可以使用以下代码进行操作:
public UserControl1()
{
InitializeComponent();
var menu = new MenuStrip();
var item = new ToolStripMenuItem();
item.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C;
item.Click += item_Click;
menu.Items.Add(item);
menu.Visible = false;
this.Controls.Add(menu);
}
void item_Click(object sender, EventArgs e)
{
MessageBox.Show("Ctrl + C");
}
注意
您不能在没有焦点的情况下处理按键事件,但是使用MenuStrip可以捕获要使用上述方法的快捷键.
使其起作用的原因是,该窗体是ContainerControl,并且ContainerControl在ProcessCmdKey中调用ToolStripManager.ProcessCmdKey方法,这导致ToolStripManager的所有非上下文菜单条的处理快捷方式.
有关更多信息,请查看ContainerControl.ProcessCmdKey的source code.
内容总结
以上是互联网集市为您收集整理的c#-Win Forms UserControl未检测到按键全部内容,希望文章能够帮你解决c#-Win Forms UserControl未检测到按键所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。