【问题标题】:How to intercept the TAB key press to focus on a check box which becomes enabled after TAB key was pressed?如何拦截 TAB 键按下以专注于按下 TAB 键后启用的复选框?
【发布时间】:2016-03-06 12:46:07
【问题描述】:

当我们按下 TAB 键时,我们将焦点更改为给定 Tab 键顺序中的下一个控件。在我的情况下,当我单击一个复选框(比如 X)然后在按下 Tab 按钮后,控件将进入一个文本字段而不是进入下一个复选框(比如 Y),该复选框之前被禁用并在选项卡按钮后启用按下。我希望控件移动到复选框 Y。谢谢。

我有以下代码,但是当我按下 Tab 按钮时它没有运行:

        if (((e.KeyCode == Keys.Tab && !e.Shift) || e.KeyCode == Keys.Enter)  && _resultsGrid.ActiveCell != null)
        {
            if (_resultsGrid.ActiveCell.IsInEditMode && (_resultsGrid.ActiveCell == lastEditableCell || e.KeyCode == Keys.Enter))
            {
                DateTime tempDateTime = DateTime.Today;
                if (!(_resultsGrid.ActiveCell.Column.DataType.ToString() == "System.DateTime" && !System.DateTime.TryParse(_resultsGrid.ActiveCell.Text, out tempDateTime)))
                {
                    if (_resultsGrid.ActiveCell.Text == "" && (_resultsGrid.ActiveCell.Column.DataType == typeof(System.Int16) || 
                        _resultsGrid.ActiveCell.Column.DataType == typeof(System.Int32) ||
                        _resultsGrid.ActiveCell.Column.DataType == typeof(System.Int64) ||
                        _resultsGrid.ActiveCell.Column.DataType == typeof(System.Decimal)))
                        _resultsGrid.ActiveCell.Value = 0;
                    else
                        _resultsGrid.ActiveCell.Value = _resultsGrid.ActiveCell.Text;
                }
                _returnKeyClickedToSaveRow = true;
                FireSaveEvent();
                if (!_saveFailed)
                {
                    if (e.KeyCode == Keys.Tab)
                    {
                        _checklastkey = true;
                        _resultsGrid.PerformAction(UltraGridAction.CommitRow);
                    }
                    else
                    {
                        _resultsGrid.PerformAction(UltraGridAction.CommitRow);
                        _resultsGrid.PerformAction(UltraGridAction.DeactivateCell);
                    }
                }
                _returnKeyClickedToSaveRow = false;
                this._entityDS.AcceptChanges(); //EAMNET-9811
            }
        }

【问题讨论】:

  • 将复选框 Y 的 Tab 键顺序更改为在 X 之后?只要它被禁用就会被跳过。
  • 听起来您使用错误的事件来决定启用复选框 Y - 如果复选框 X 启用复选框 Y,它可能应该在其选中事件中执行此操作 - 听起来像您在模糊/离开事件中执行此操作,此时已确定要移动到的下一个控件。

标签: c# checkbox keyboard-shortcuts setfocus


【解决方案1】:

每个控件都有一个属性,称为TabIndex。您可以使用此属性分配关注 TAB 键的下一个控件。例如,如果 Control1 的 TabIndex 为 1,而 Control2 的 TabIndex 为 2,则在 Control1 上按 TAB 键后,Control2 将成为焦点。

附:由于 TabIndex 是每个 Control 中的一个属性,您还可以通过更改 TabIndex 来动态决定下一个控件以在任何您想要的地方获得焦点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 2011-02-26
    相关资源
    最近更新 更多