На этом шаге мы рассмотрим назначение "горячих клавиш" пунктам меню и особенности их использования.
Допустим, мы опцию сформировали. Но возникают два вопроса, которые опытный пользователь сразу вам задаст. Он скажет: "Я знаю, что при эксплуатации любой программы для обеспечения большей скорости работ оператора надо иметь возможность работать не только с помощью мыши, но и с помощью клавиатуры. Вы это предусмотрели? И второе - у меня в приложении намечается довольно сложное меню, которое отражает функцию моего предприятия. Поэтому с приложением будут работать многие операторы, и я бы хотел, чтобы оператор, работающий с одним разделом меню, не мог работать с другим, точнее, чтобы он не имел к нему доступа".
И вы должны будете его требования учесть. Как же этого добиться?
Что касается дублирования действий мыши работой с клавиатурой, то этот вопрос решается. Активизируйте любую созданную вами опцию и посмотрите ее свойства в окне Properties (Свойства). Вы там найдете свойства ShowShortcutKeys и ShortcutKeys. Первое из них обеспечивает видимость клавиш быстрого вызова (ShortcutKeys) в наименовании опции (если эти клавиши будут определены). А второе свойство как раз и задает комбинацию клавиш, при нажатии которой опция станет выполняться так, как если бы вы на ней щелкнули мышью. Задание происходит в два этапа, как показано на рисунках 1 и 2.
Рис.1. Вид меню с заданными клавишами быстрого доступа
Рис.2. Задание клавиш быстрого вызова для главных опций и подопций
Из рисунка видно, что в режиме исполнения приложения не у всех опций, для которых мы задавали клавиши быстрого вызова, они появились. Из рисунка видно также, что такие клавиши остались только у самых последних опций (исполнительных), а у тех опций, которые не делятся на подопции, произойдет исполнение алгоритма (выполнится обработчик события click).
Какой вывод? Если пользователь запомнит комбинации клавиш у исполнительных опций, то ему нет необходимости двигаться по всему дереву меню (что делается с помощью мыши), а стоит только нажать нужную комбинацию, и соответствующая опция исполнится. Вот поэтому и были проигнорированы комбинации клавиш у составных опций меню. Демонстрация изложенного видна из рисунка 3.
Рис.3. Сообщение исполнительной опции
Приложение запущено на выполнение, опции не раскрыты, была нажата комбинация клавиш Ctrl+B и последняя (исполнительная) опция выполнилась, выдав сообщение. Текст обработчика события для этой опции представляет собой следующее:
private: System::Void подопция11ToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { MessageBox::Show("Нажата комбинация Ctrl+В", "Клавиши быстрого доступа", MessageBoxButtons::OK,MessageBoxIcon::Asterisk); }
Вернемся теперь ко второму вопросу, поставленному пользователем разработчику: каким образом ограничить доступ ко всему меню некоторым операторам?
Для этого делается следующее: главная опция или отдельные подопции либо лишаются возможности доступа к ним, либо делаются вообще невидимыми. Первое достигается за счет переустановки свойства опции Enabled в значени False, а второе - за счет присвоения свойству Visible тоже значения False. Но это делается не "в лоб". Следует разработать механизм авторизации для доступа к меню, который станет по регистрационным данным пользователя открывать одни опции, делать невидимыми другие и недоступными третьи. На рисунке 4 показаны три главных опции меню, из которых вторая сделана недоступной, а третья невидимой.
Рис.4. Закрытие опций меню (режим проектирования)
Рис.5. Закрытие опций меню (режим выполнения)
На следующем шаге мы рассмотрим некоторые свойства опций MenuStrip.