c# - 将 KeyDown 事件传递给其他控件

标签 c# .net winforms keydown

我正在编写一个 C# WinForms 应用程序,.NET 4.0。

我在 Form 上有一个 WinForms Control。用户开始使用键盘输入内容后,会出现另一个 Control。该 Control 是某种文本输入。我想将用户输入发送到该Control。当然,在它获得焦点后,它会接收所有用户键盘输入。但是当用户在 Control 出现之前开始输入时,我必须在调用它的 ShowFocus 后将第一个 KeyDown 事件传递给该控件 方法。

SendKeys.Send method是一种做类似事情的方法。但这太复杂了,而且似乎不安全。我只有一个来自 KeyEventArgsKeyData 属性的 Keys 枚举值,我想使用它,而不是将其转换为一些奇怪的字符串.

有什么好的方法可以将 KeyDown 事件从一个控件传递到另一个控件吗?

最佳答案

您可以在Form上使用PreviewKeyDown

假设您要将键盘输入发送到 TextBox textBox1:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.PreviewKeyDown+= Form1_OnPreviewKeyDown;
        textBox1.Visible = false;
    }

    private bool _textboxEnable = false;
    private void Form1_OnPreviewKeyDown(object sender, PreviewKeyDownEventArgs previewKeyDownEventArgs)
    {
        if (!_textboxEnable) textBox1.Visible = true;
        if (!textBox1.Focused) textBox1.Focus();
    }
}

关于c# - 将 KeyDown 事件传递给其他控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27507946/

相关文章:

c# - Controls.Clear() 清理多深?

c# - "MOST"多次执行命令行工具的有效方法是什么?

c# - IHttpAsyncHandler 和 IObservable 网络请求

c# - 如何验证 XML 文件是否实现特定架构

.net - 寻找 32 位 Microsoft 通用控件 (ListView) 的替代品

winforms - 如何提高启动时引用的 dll 的加载性能?

c# - 阻塞的线程占用了哪些资源

c# - 性能 : should I make one or multiple queries to database

.net - .NET消息框中的自定义按钮标题?

c# - 标签中的路径显示