Как я создаю составные сочетания клавиш в приложении Windows Forms?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

13
задан Peter Mortensen 28 September 2014 в 08:15
поделиться

5 ответов

В ответе на вопрос [1 117] хорды клавиатуры а именно, которому я не верю, существует готовая опция, доступная Вам в этой точке.

Однако должно быть достаточно просто смоделировать. Я создал бы единый класс, возможно KeyboardChordProvider. Это должно будет знать о событиях клавиатуры на уровне формы. Как указано в другом месте, Form.KeyPreview свойство должно быть true. Это может быть достаточно для этого поставщика для подписки на Form.KeyPress событие. Вы могли сделать все это в конструкторе поставщика, если бы Вы передали в форме.

необходимо было бы зарегистрировать потенциальные нажатия клавиш в поставщике.

Внутренне этот экземпляр отследит текущее состояние. Каждый раз, когда нажатие клавиши наблюдается, который представляет первый ключ хорды, Вы обновили бы состояние поставщика и сгенерировали бы событие так, чтобы подписчик мог установить текст: (CTRL+W) был нажат. Ожидание второго ключа хорды...

, Если следующее нажатие клавиши соответствует потенциальной вторичной опции, то Вы имеете соответствие и могли повысить ChordPressed событие, содержащее детали вводимых штрихов. С другой стороны, Вы могли бы просто назвать конкретный обратный вызов, который был дан поставщику в то время, когда хорда была зарегистрирована (чтобы не иметь оператор переключения или некоторую другую отправку в ChordPressed обработчик событий).

, Если бы, никогда, нажатие клавиши не соответствует потенциалу следующий опция, то Вы сбросили бы состояние поставщика.

Внутренний поставщику Вы могли бы смоделировать возможные нажатия клавиш с помощью древовидной структуры. Текущее состояние поставщика является просто конкретным древовидным узлом. Вначале, корневой узел был бы активен. Если ребенок соответствует нажатию клавиши тогда, это становится текущим узлом в ожидании следующего штриха. Если ребенок был вершиной, то вся хорда соответствовала, и Вы повысили бы ChordPressed событие (передающий цепочку штрихов, которые получили Вас к той точке), или вызовите обратный вызов, сохраненный в листе. Каждый раз, когда никакое нажатие клавиши не соответствует ребенку, сброс назад к созданию активного корневого узла.

я думаю, что этот дизайн достиг бы того, что Вы хотите.

12
ответ дан 2 December 2019 в 00:32
поделиться

Средства управления меню имеют свойство, названное ShortCut, где можно присвоить значение. При нажатии того сочетания клавиш тот пункт меню будет вызван. Используйте то свойство для команд, которое имеет соответствующее меню.

при необходимости в ярлыках, которые не будут доступны в меню, тогда необходимо будет обработать это Ваш сам через KeyUp или события KeyDown, или на форме или на управлении. объект KeyEventArgs будет передан Вашему обработчику, и можно проверить, какая клавиша нажата, и были ли Ctrl, клавиши Alt или клавиши Shift также нажаты.

Пример кода из MSDN:

// Handle the KeyDown event to determine the type of character entered into the control.
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    // Initialize the flag to false.
    nonNumberEntered = false;

    // Determine whether the keystroke is a number from the top of the keyboard.
    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
    {
        // Determine whether the keystroke is a number from the keypad.
        if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
        {
            // Determine whether the keystroke is a backspace.
            if(e.KeyCode != Keys.Back)
            {
                // A non-numerical keystroke was pressed.
                // Set the flag to true and evaluate in KeyPress event.
                nonNumberEntered = true;
            }
        }
    }
    //If shift key was pressed, it's not a number.
    if (Control.ModifierKeys == Keys.Shift) {
        nonNumberEntered = true;
    }
}
2
ответ дан 2 December 2019 в 00:32
поделиться

Используйте событие и проверку OnKeyPressed формы, если желаемое сочетание клавиш было нажато в eventArgs аргументе

0
ответ дан 2 December 2019 в 00:32
поделиться

Это зависит от объема сочетания клавиш. Если Вы хотите, чтобы сочетание клавиш использовалось от какого-либо управления на Форме, не используя панель инструментов, установите

Form.KeyPreview = true;

на форме. Это позволит всем событиям нажатия клавиши быть фильтрованными KeyPress, KeyDown и события KeyUp на уровне формы, который позволит единственному сочетанию клавиш быть обработанным в одном месте вместо того, чтобы копировать функциональность во всех пользовательских элементах управления.

MSDN: Форма. Свойство

KeyPreview
0
ответ дан 2 December 2019 в 00:32
поделиться

В дополнение к некоторым ответам, с помощью амперсанда в подписи кнопки или пункта меню, заставит это быть подчеркнутым и доступный при помощи Высокого звука + буква Вы предшествовавший амперсандом &.

, Другими словами, если у Вас есть пункт меню, озаглавил & Файл , который это отобразит с подчеркиванием под F и пользователем, может инициировать меню путем нажатия на Высокий звук + F .

0
ответ дан 2 December 2019 в 00:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: