C# 如何截取按TAB键以聚焦在按下TAB键后启用的复选框上?

C# 如何截取按TAB键以聚焦在按下TAB键后启用的复选框上?,c#,checkbox,keyboard-shortcuts,setfocus,C#,Checkbox,Keyboard Shortcuts,Setfocus,当我们按TAB键时,我们将焦点更改为给定TAB顺序中的下一个控件。在我的例子中,当我点击一个复选框(比如X),然后按下Tab按钮后,控件将进入一个文本字段,而不是进入下一个复选框(比如Y),该复选框以前被禁用,但在按下Tab按钮后变为启用。我希望控件移到Y复选框。谢谢 我有以下代码,但当我按下Tab按钮时,它没有运行: if (((e.KeyCode == Keys.Tab && !e.Shift) || e.KeyCode == Keys.Enter) &am

当我们按TAB键时,我们将焦点更改为给定TAB顺序中的下一个控件。在我的例子中,当我点击一个复选框(比如X),然后按下Tab按钮后,控件将进入一个文本字段,而不是进入下一个复选框(比如Y),该复选框以前被禁用,但在按下Tab按钮后变为启用。我希望控件移到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
            }
        }

每个控件都有一个被调用的属性。可以使用此属性指定下一个控件,该控件将焦点放在TAB键上。例如,如果Control1具有TabIndex 1,Control2具有TabIndex 2,则在按下Control1上的TAB键后,Control2将被聚焦


另外,由于TabIndex是每个控件中的一个属性,您还可以通过更改TabIndex动态决定下一个控件,以便在任何地方都能获得焦点。

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