Tab 不会触发 keydown 或 keypress 事件

Posted

技术标签:

【中文标题】Tab 不会触发 keydown 或 keypress 事件【英文标题】:Tab will not fire keydown or keypress event 【发布时间】:2014-04-02 20:46:39 【问题描述】:

我正在使用网络表单,并且有一个带有标签栏的表单。每个选项卡中都有多个文本框。我增加了标签索引,从每个标签的 1 开始。如果用户点击表单末尾并点击选项卡,我想从一个选项卡到另一个选项卡。

我使用了离开方法并更改了我的选项卡控件的选项卡,唯一的问题是如果我没有点击选项卡并说我单击该选项卡上的另一个控件,它仍然会跳转到新选项卡。

我想解决这个问题的一种方法是监听 tab 按键,如果按键是 tab on leave 然后将表单更改为另一个 tab,但我似乎无法让它工作。我尝试过使用 keypress 和 keydown ,但两者都不会将该选项卡作为键。如果我说点击或点击开始输入,它会触发事件,但选项卡不会。

有什么建议吗?

我已经尝试过这些,但这些事件都不会触发。

private void afsiTxtDaysForTempOEpriceOverrides_KeyPress(object sender, KeyPressEventArgs e)
    
        if (e.KeyChar == 11)
        
            afsiTxtDaysForTempOEpriceOverrides_Leave(sender, e);
        
    

private void afsiTxtDaysForTempOEpriceOverrides_KeyDown(object sender, KeyEventArgs e)

    if (e.KeyCode == "11")
    
        afsiTxtDaysForTempOEpriceOverrides_Leave(sender, e);
    


private void afsiChkSalesBaseCostUpdate_KeyPress(object sender, KeyPressEventArgs e)

    if (e.KeyChar == 11)
    
        afsiChkSalesBaseCostUpdate_Leave(sender, e);
    


private void afsiChkSalesBaseCostUpdate_KeyDown(object sender, KeyEventArgs e)

    if (e.KeyCode == 11)
    
        afsiChkSalesBaseCostUpdate_Leave(sender, e);
    

编辑:发现该页面正在使用 Infragistics 的 UltraWinTabControl,所以这可能会导致选项卡出现一些问题。

【问题讨论】:

您确定 TAB 键事件不会被您和用户之间的某些东西消耗,并转化为导航操作吗?您可能需要通过使用某种焦点更改事件(或您在此平台上的任何名称)采取不同的方法 这就是我的想法。启用制表符时,制表符可能会影响按键使制表符不是键。 【参考方案1】:

我最终需要覆盖 ProcessCmdKey 现在我遇到了一个与此相关但不是特定的新问题,因此如果我得到答案,我会将其添加为评论。

    private bool isTab = false;
    private bool isShiftTab = false;

  protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    

        if (keyData == Keys.Tab)
        
            isTab = true;
            ShiftTab.Append("Tab");
        
        else
        
            isTab = false;
        

        return base.ProcessCmdKey(ref msg, keyData);
    

【讨论】:

【参考方案2】:

您需要将 MultiLine 属性设置为 true,并且 AcceptsTab 也设置为 true。

【讨论】:

【参考方案3】:

或者使用 e.KeyCode 或 e.KeyData,它对我有用

if (e.KeyCode == Keys.Tab | e.KeyData == Keys.Enter)

【讨论】:

那行不通。 keydown 事件本身没有被调用。

以上是关于Tab 不会触发 keydown 或 keypress 事件的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 ExtJS 4 中触发 keydown 事件

jQuery:如何在文本框中捕获 TAB 按键

vb.net 方向键不能触发 keydown 事件

UserControl KeyDown 事件不会触发撤销 Windows 应用程序 KeyDown 事件

使用jQuery快速高效制作网页交互特效

处于编辑模式的单元格不会在C#中触发KeyDown事件