gpt4 book ai didi

c# - 处理未处理的回车键 c#

转载 作者:行者123 更新时间:2023-12-03 02:27:01 25 4
gpt4 key购买 nike

我必须在 win 表单上处理 enter (以及其他键)而不会产生错误声音,但前提是当前事件的控件尚未处理它。

因此,当在 TextBox 或 DateTimePicker 中按下 enter 时,我想用表单处理它(没有错误声音),但如果按下它,例如,在 DataGridView 中,我希望它按照 DataGridView 默认的方式处理.

OnKeyUp 解决了我只处理未处理的击键 (e.Handled) 的问题,而 ProcessCmdKey ( this ) 解决了声音问题,但两者都没有解决。

有什么建议么?

最佳答案

感谢这个非常有趣的问题。不幸的是,除了根据 this article 覆盖主窗体上的 ProcessCmdKey 之外,我似乎找不到所有按键的全局事件处理程序。 .此方法的唯一问题是传递给事件处理程序委托(delegate)的参数没有定义创建事件的控件:(

因此,我唯一的想法是您需要将事件处理程序分配给应用程序中的每个控件。我已经编写了一些代码,可以帮助您了解如何做到这一点。我不确定将 KeyPress 事件处理程序分配给页面上的每个控件可能会产生什么不利影响,但这是我看到的唯一可行的解​​决方案。

代码:

private void Form1_Load(object sender, EventArgs e)
{
AssignHandler(this);
}

protected void HandleKeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter && (sender != this.textBoxToIgnore || sender ! this.gridViewToIgnore))
{
PlaySound(); // your error sound function
e.Handled = true;
}
}

public void AssignHandler(Control c)
{
c.KeyPress += new KeyPressEventHandler(HandleKeyPress);
foreach (Control child in c.Controls)
{
AssignHandler(child);
}
}

关于c# - 处理未处理的回车键 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3843484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com