Шаг 146.
Microsoft Visual C++ 2010. Язык С/С++.
Компоненты Windows Forms. Компонент MenuStrip. Общие сведения (окончание)

    На этом шаге мы рассмотрим назначение "горячих клавиш" пунктам меню и особенности их использования.

    Допустим, мы опцию сформировали. Но возникают два вопроса, которые опытный пользователь сразу вам задаст. Он скажет: "Я знаю, что при эксплуатации любой программы для обеспечения большей скорости работ оператора надо иметь возможность работать не только с помощью мыши, но и с помощью клавиатуры. Вы это предусмотрели? И второе - у меня в приложении намечается довольно сложное меню, которое отражает функцию моего предприятия. Поэтому с приложением будут работать многие операторы, и я бы хотел, чтобы оператор, работающий с одним разделом меню, не мог работать с другим, точнее, чтобы он не имел к нему доступа".

    И вы должны будете его требования учесть. Как же этого добиться?

    Что касается дублирования действий мыши работой с клавиатурой, то этот вопрос решается. Активизируйте любую созданную вами опцию и посмотрите ее свойства в окне 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.




Предыдущий шаг Содержание Следующий шаг