Нет ничего из коробки, чтобы сделать это, AFAIK.Вам нужно сделать это самостоятельно.Однако это не так сложно, вам просто нужно проверить горячую клавишу, переопределив метод ProcessCmdKey
, а затем вызвать Control.Focus()
для соответствующего элемента управления:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Control | Keys.D1))
{
textBox1.Focus();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
Вы даже можете сделать еще один шаг вперед, чтобы иметь ярлыки для нескольких элементов управления, а также иметь возможность управлять элементами управления и их ярлыками во время выполнения, имея словарь, содержащий ярлыки и элементы управления, которые должны бытьfocus:
Dictionary<Keys, Control> FocusShortcuts;
public Form1()
{
InitializeComponent();
FocusShortcuts = new Dictionary<Keys, Control>();
FocusShortcuts.Add(Keys.Control | Keys.D1, textBox1);
FocusShortcuts.Add(Keys.Control | Keys.D2, textBox2);
FocusShortcuts.Add(Keys.Control | Keys.D3, textBox3);
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
Control control;
if (FocusShortcuts.TryGetValue(keyData, out control))
{
control.Focus();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
Update
Если вместо этого вы хотите установить фокус на элемент управления с помощью его порядка табуляции, вы можете заменить textBox1.Focus();
на что-то вроде этого:
int someIndex = 5;
Control control = this.Controls.OfType<Control>()
.FirstOrDefault(c => c.TabIndex == someIndex);
if (control != null) control.Focus();
Вам просто нужно изменить значение someIndex
на индекс по вашему выбору и изменить this
с контейнером элемента управления (вы можете оставить его, если контейнер является текущей формой / UserControl).