Как назначить сочетания клавиш кнопкам в BindingNavigator?

Есть ли способ назначить сочетания клавиш стандартным элементам навигации ToolStrip в BindingNavigator?

Элементы, которые добавляются с помощью метода .AddStandardItems, относятся к типу ToolStripItem, не имеющему свойства ShortcutKeys.

Я попытался выполнить приведение к ToolStripMenuItem , но это не удалось.

 public void ConfigureMyNavigator()
    {
               // Adds ToolStripItems which don't support shortcut keys           
                m_navigator.AddStandardItems();

                // Adds a ToolStripMenuItem which can support a shortcut key
                var button = new ToolStripMenuItem
                {
                    Size = new Size(0, 0),
                    Text = "Save",
                    ShortcutKeys = (Keys)Shortcut.CtrlS,
                    ToolTipText = "Press Ctrl+S to save"
                };
                button.Click += tsmi_Click;

                m_navigator.Items.Add(button);

                //   This fails with invalid cast exception
                ((ToolStripMenuItem)m_navigator.Items[1]).ShortcutKeys = (Keys)Shortcut.AltLeftArrow;


    }

Я думаю, я мог бы заменить toolstripitems на toolstripmenuitems один за другим, но чувствую, что это довольно неудобно.


person Kirsten Greed    schedule 28.02.2013    source источник


Ответы (3)


Вы можете прослушивать ключевые команды, а затем поднимать щелчок соответствующей кнопки ToolStripButton. Переопределите метод ProcessCmdKey в коде формы:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    switch (keyData)
    {
        case (Keys.Alt | Keys.Left):
            m_navigator.Items[1].PerformClick();
            break;
        case (Keys.Alt | Keys.Right):
            m_navigator.Items[6].PerformClick();
            break;
    }

    return base.ProcessCmdKey(ref msg, keyData);
}
person Mike Fuchs    schedule 08.03.2013

Вы пытались добавить символ «&» перед заголовком кнопки?

Текст = "&Сохранить"

person Ankit Goel    schedule 28.04.2014
comment
Привет, Анкит. Хорошая идея, но я хочу другие клавиши, кроме Alt. - person Kirsten Greed; 29.04.2014
comment
Хорошая идея, но не работает - person Maris B.; 10.03.2021

Вы можете переопределить метод AddStandardItems и перегрузить конструктор ToolStripMenuItem, чтобы он принимал ToolStripItem в качестве параметра для упрощения создания элементов.

Но это все еще своего рода «замена предметов один за другим».

person Matus    schedule 03.03.2013
comment
Есть ли способ переопределить AddStandardItems и сохранить способ работы текста позиции? На данный момент я не вижу, чем переопределение лучше, чем просто не вызывать AddStandardItems и добавлять кнопки одну за другой. При переопределении AddStandardItems мне нужно знать, как привязать кнопки к событиям, откуда взять значки и как заставить текст номера записи работать одинаково - person Kirsten Greed; 03.03.2013
comment
это, вероятно, не лучше, это просто многоразовое использование - person Matus; 04.03.2013