Есть ли сочетание клавиш, чтобы сфокусироваться на известном Tabindex - PullRequest
0 голосов
/ 08 октября 2018

Когда форма Windows имеет фокус, вы можете пройтись по любым элементам управления, у которых для свойства TabStop установлено значение True, в порядке Tabindex, нажав клавишу {TAB}.

Аналогично, вы можете выполнить их вв обратном порядке, используя {Shift + TAB}

. Есть ли какое-либо сочетание клавиш для перемещения фокуса на известный или абсолютный, индексный (например, самый низкий или самый высокий) вместо его перемещения относительно активного элемента управления?

Если да, MS это где-нибудь документирует?

1 Ответ

0 голосов
/ 08 октября 2018

Нет ничего из коробки, чтобы сделать это, 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...