当Windows Shell被Windows窗体应用程序取代时,第一次按键丢失

本文关键字:Windows 第一次 取代 Shell 窗体 应用程序 | 更新日期: 2023-09-27 18:06:44

我已经按照这个问题中给出的方法成功地替换了Windows Shell。

然而,我发现第一个按键丢失了,这对用户来说有点麻烦。我们尝试的解决方案是在onshow事件中激活表单:

private void OnShownLoginForm(object z_sender, EventArgs z_e)
{
    Activate();
    m_loginTextBox.Focus();
}

但这并没有解决问题。你知道发生了什么事吗?

当Windows Shell被Windows窗体应用程序取代时,第一次按键丢失

您可以尝试使用System.Windows.Forms.SendKeys Class (MSDN文档)在表单加载事件时向表单发送按键事件。如果这不起作用,请尝试在窗体中发送键盘事件。显示自表单以来的事件。显示的是表单启动过程中的最后一个事件。

听起来像是由另一个控件先获得焦点引起的。文本框是否有制表符,是否可以将其设置为0?然后,在表单加载后,重点应该放在它上面。

否则试着创建一个新的表单来测试,它似乎真的不可复制。

我不知道它是否相关,但我有一个类似的问题,其中一个webform的tabindex属性不工作,按TAB键后,专注于页面加载的第一个输入,直到用户第一次点击表单用鼠标。

我没有访问源代码,所以我尝试用javascript解决它。
在鼠标第一次点击之前,所有的键盘敲击,包括TAB键,激活了按键事件,TAB键在页面加载时无法被keydown/keyup检测到。

我了解到TAB键激活了按键事件,我可以通过它访问键码。只需注册按键事件并使用jQuery手动切换到下一个输入即可。在鼠标第一次点击表单后,TAB键不再被按键事件捕获。

下面是一个代码示例:
function tabNext(e){
    if(e.keyCode == 9){
        // do work
    }
}
$('input').keypress(tabNext);