Windows窗体有焦点,但不处理键盘事件

本文关键字:处理 键盘 事件 窗体 焦点 Windows | 更新日期: 2023-09-27 18:07:01

我有一个奇怪的问题:

我有一个窗体,我打开使用ShowDialog()。表单中填充了一些按钮和组合框。其中一个组合框被设置为窗体的ActiveControl,窗体具有焦点。

我想要完成的是,用户可以在表单打开后立即输入其用户名(不需要首先选择组合框)。然而,如果我按下键盘,什么也没发生。但是,当我第一次用鼠标单击表单,然后用键盘输入一些东西时,它就工作了。我已经尝试了很多事情,比如在表单上调用Select()和Focus()。我甚至尝试在表单上模拟鼠标点击事件(OnMouseClick),但没有任何运气。

有人知道问题出在哪里吗?

多谢克里斯

Windows窗体有焦点,但不处理键盘事件

尝试BringToFront()

    var f = new Form1();
    f.Show();
    f.BringToFront();

然后在那个控件上使用Select

    private void Form1_Load(object sender, EventArgs e)
    {
        comboBox1.Select();
    }

假设您正在从另一个表单运行ShowDialog(),它可能值得将其更改为:ShowDialog(this),以便新表单具有正确的父类和正确的阻塞行为。如果没有"this",我就会看到表单在其他表单后面打开,以及其他奇怪的行为,包括焦点问题。

只是一个想法。

您有没有试过打电话给myComboBox.Focus();

表单有焦点并不一定意味着表单中的任何控件都有焦点。还要尝试检查表单和单个控件的onKey事件。这通常能帮助我判断到底什么是焦点。如果表单本身和它的控件上没有得到任何onKey事件,然后尝试使用form.Activate();