Tab不会触发keydown或keypress事件

时间:2014-04-02 20:46:39

标签: c# c#-4.0 webforms tabs infragistics

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

我使用了离开方法并更改了标签控件的标签,唯一的问题是,如果我没有点击标签并说我点击该标签上的另一个控件,它仍然会拍到新标签页。

我认为解决这个问题的一种方法是收听标签键按下,如果关键按下是标签,请将表单更改为另一个标签,我似乎无法让它工作虽然。我尝试过使用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,所以这可能会导致标签出现一些问题。

3 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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