Какие свойства есть меню c

  • 02/15/2019
  • Чтение занимает 4 мин

В этой статье

Приведенные ниже сведения организованы в соответствии со свойствами меню , которые отображаются в окне свойства при выборе команды меню.The information below is organized according to the Menu properties that appear in the Properties Window when you select a menu command. Они перечислены в алфавитном порядке, хотя окно свойств также позволяет просматривать эти свойства по категориям.These are listed alphabetically although the Properties window also enables you to view these properties by category.

СвойствоPropertyОписаниеDescription
РазбиениBreakМожет принимать одно из следующих значений:Can be one of these values:
Нет: нет перерывов.- None: No break. Это значение по умолчанию.This is the default.
Столбец: для статических меню это значение помещает команду меню в новую строку.- Column: For static menus, this value places the menu command on a new line.
В контекстных меню при этом значении команда меню помещается в новый столбец без разделительной линии между столбцами.For pop-up menus, this value places the menu command in a new column with no dividing line between the columns.
Установка этого свойства влияет на внешний вид меню только во время выполнения. В редакторе внешний вид меню не меняется.Setting this property affects the appearance of the menu only at run time, not in the menu editor.
Bar: аналогично столбцу , за исключением того, что для всплывающих меню это значение отделяет новый столбец от старого со вертикальной линией.- Bar: Same as Column except, for pop-up menus, this value separates the new column from the old column with a vertical line.
Установка этого свойства влияет на внешний вид меню только во время выполнения, а не в редакторе меню.Setting this property affects the appearance of the menu only at run time, not in the Menu Editor.
CaptionCaptionТекст, представляющий команду меню (имя меню).The text that labels the menu command (the menu name). Чтобы указать одну из букв названия команды меню как входящую в сочетание клавиш, поместите перед ней знак амперсанда (&).To make one of the letters in the caption of a menu command the mnemonic key, precede it with an ampersand (&).
Флажок установленCheckedЕсли значение равно true, команда меню изначально проверяется.If True, the menu command is initially checked. Тип: bool.Type: Bool. Значение по умолчанию: false.Default: False.
EnabledEnabledЕсли задано значение False, пункт меню отключен.If False, the menu item is disabled.
Grayed (Серым цветом)GrayedЕсли значение равно true, команда меню изначально является неактивной и неактивна.If True, the menu command is initially grayed and inactive. Тип: bool.Type: Bool. Значение по умолчанию: false.Default: False.
Help (Справка)HelpВыравнивает пункт меню по правому краю.Aligns menu item to the right. Значение по умолчанию: false.Default: False.

Например, команда меню Справка всегда находится справа во всех приложениях Windows.For example, the Help menu command is always on the right in all Windows applications. Если задано это свойство пункта меню, данный пункт будет отображаться прижатым к правому краю и в самом конце меню.If you set this property on a menu item, that item will appear at the very far right and at the very end of the menu. Применяется к элементам верхнего уровня.Applies to top-level items.

ИдентификаторIDЭтот символ определяется в файле заголовка.A symbol defined in the header file. Type: символ, целое числоили строка в кавычках.Type: Symbol, Integer, or Quoted String.

Можно использовать любой символ, который обычно доступен в любом редакторе, даже если окно свойств не содержит раскрывающийся список для выбора этого символа.You may use any symbol that is commonly available in any of the editors, even though the Properties Window does not provide a drop-down list for you to select from.

PopupPopupЕсли значение равно true, команда меню является всплывающим меню.If True, the menu command is a pop-up menu. Тип: bool.Type: Bool. Значение по умолчанию: true для меню верхнего уровня в строке меню; в противном случае — false.Default: True for top-level menus on a menu bar, otherwise False.
Командная строка.PromptСодержит текст, отображаемый в строке состояния, при выделении этой команды меню.Contains text to appear in the status bar when this menu command is highlighted. Текст помещается в таблицу строк с тем же идентификатором, что и команда меню.The text is placed in the string table with the same identifier as the menu command.

Это свойство доступно для любого типа проекта, но во время выполнения проявляются особенности, зависящие от MFC.This property is available for any type of project, but the run-time functionality is MFC specific.

Right to Left Justify (Выравнивание справа налево)Right to Left JustifyВыравнивание команды меню по правому краю в строке меню во время выполнения.Right-justifies the menu command on the menu bar at run time. Тип: bool.Type: Bool. Значение по умолчанию: false.Default: False.
Right to Left Order (Справа налево)Right to Left OrderОтображение команд меню справа налево в тех случаях, когда интерфейс локализован для языка с направлением чтения справа налево, например, иврита или арабского языка.Allows menu commands to display right to left when the interface is localized to any language that reads right-to-left, such as Hebrew or Arabic.
SeparatorSeparatorЕсли значение равно true, команда меню является разделителем.If True, the menu command is a separator. Тип: bool.Type: Bool. Значение по умолчанию: false.Default: False.

Команды меню “связать”Associate Menu Commands

В некоторых ситуациях может потребоваться, чтобы программную команду можно было вызывать с помощью команды меню и сочетания клавиш.There are often times you want a menu command and a keyboard combination to issue the same program command. Аналогичные команды выдаются с помощью редактора меню , чтобы назначить один и тот же идентификатор ресурса команде меню и записи в таблице сочетаний клавиш приложения.Identical commands are issued by using the Menu Editor to assign the same resource identifier to the menu command and to an entry in your application’s accelerator table. Затем необходимо изменить Заголовок команды меню, чтобы в нем отображалось название сочетания клавиш.You then edit the Caption of the menu command to show the name of the accelerator key.

Читайте также:  Какие физиологические свойства характеризует экг

Сопоставление команды меню с сочетанием клавишTo associate a menu command with an accelerator key

  1. В редакторе менювыберите нужную команду меню.In the Menu Editor, select the menu command you want.

  2. В окне свойствдобавьте название сочетания клавиш в свойство Заголовок .In the Properties Window, add the name of the accelerator key to the Caption property:

    • Сразу после заголовка меню введите escape-последовательность для табуляции (t), чтобы все сочетания клавиш в меню были выровнены по левому краю.Following the menu caption, type the escape sequence for a tab (t), so that all the menu’s accelerator keys are left aligned.

    • Введите имя клавиши-модификатора (CTRL, ALTили SHIFT), за которой следует знак «плюс» ( + ), а также имя, букву или символ дополнительного ключа.Type the name of the modifier key (Ctrl, Alt, or Shift) followed by a plus sign (+) and the name, letter, or symbol of the additional key.

    Например, чтобы назначить команду CTRL + O команде Открыть в меню файл , можно изменить заголовок команды меню так, чтобы он выглядел как следующий текст:For example, to assign Ctrl+O to the Open command on the File menu, you modify the menu command’s Caption so that it looks like the following text:

    &Open…tCtrl+O

    Команда меню в редакторе меню обновляется для отражения нового заголовка при его вводе.The menu command in the Menu Editor is updated to reflect the new caption as you type it.

  3. Создайте запись в таблице сочетаний клавиш с помощью редактора сочетаний клавиш и назначьте ему тот же идентификатор ресурса, что и команде меню.Create the accelerator-table entry in the Accelerator editor and assign it the same identifier as the menu command. Рекомендуется выбирать сочетания, которые легче запомнить.Use a key combination that you think will be easy to remember.

Приложение MFC может отображать описательный текст для каждой команды меню, которую пользователь может выбрать.Your MFC application can display descriptive text for each of the menu commands a user may select. Отображение описательного текста путем назначения текстовой строки каждой команде меню с помощью свойства Prompt в окне свойства .Display descriptive text by assigning a text string to each menu command using the Prompt property in the Properties window. Если в таблице строк имеется строка, идентификатор которой совпадает с идентификатором команды, приложение MFC автоматически отобразит этот строковый ресурс в строке состояния выполняющегося приложения в момент, когда пользователь наведет указатель мыши на пункт меню.If you have a string in the string table whose ID is the same as the command, an MFC application will automatically display this string resource in the status bar of the running application when a user hovers over a menu item.

  • Чтобы связать команду меню с текстовой строкой строки состояния в приложениях MFC, в редакторе менювыберите команду меню.To associate a menu command with a status bar text string in MFC applications, in the Menu Editor, select the menu command. В окне “Свойства”в поле Prompt (Подсказка) введите нужный текст для строки состояния.In the Properties Window, type the associated status bar text in the Prompt box.

В проекте C++ можно назначить клавишу доступа (назначенную клавишу, которая позволяет пользователю выбрать меню с клавиатурой) для меню и команд меню.In a C++ project, you can assign an access key (a mnemonic that allows the user to select the menu with the keyboard) to your menus and menu commands.

  • Чтобы назначить команде меню доступ (сочетание клавиш), введите амперсанд ( & ) перед буквой в имени меню или имени команды, чтобы указать эту букву в качестве соответствующего ключа доступа.To assign an access (shortcut) key to a menu command, type an ampersand (&) in front of a letter in the menu name or command name to specify that letter as the corresponding access key.

    Например, “&File” задает сочетание клавиш ALT + F в качестве сочетания клавиш для меню ” файл ” в приложениях, написанных для Microsoft Windows.For example, “&File” sets Alt+F as the shortcut key for the File menu in applications written for Microsoft Windows.

    Буква, с которой связана клавиша доступа, обычно наглядно обозначена в элементе меню.The menu item will provide a visible cue that one of the letters has a shortcut key assigned to it. Как правило, буква, следующая за символом амперсанда, отображается как подчеркнутая (везде в рамках одной ОС).The letter following the ampersand will appear underlined (contingent on the operating system).

Примечание

Убедитесь, что все клавиши доступа в меню уникальны, щелкнув меню правой кнопкой мыши и выбрав пункт Проверить назначенные клавиши.Make sure all the access keys on a menu are unique by right-clicking your menu and choosing Check Mnemonics.

ТребованияRequirements

Win32Win32

См. также разделSee also

Редактор менюMenu Editor

Обратная связь

Источник

Порой, чтобы продемонстрировать работу консольной программы бывает удобно воспользоваться меню — элементом пользовательского интерфейса, позволяющим выбрать одну из нескольких перечисленных опций программы. Иногда же наличие меню является обязательным условием задания по программированию.

Читайте также:  При какой температуре теряет свойства неодимовый магнит

Рассмотрим создание меню для консольной программы на примере следующей задачи: имеется список товаров, состоящих из наименования, цены и количества данного товара. Написать программу, позволяющую находить наименьшую и наибольшую цену. Взаимодействие с пользователем организовать с помощью меню.

Разбиваем программу на пункты

Прежде чем добавлять меню в программу, следует разбить программу на процедуры, которые должны будут выполняться при выборе соответствующих пунктов меню. Нашу задачу можно разбить на следующие пункты:

  • Добавление товара в список
  • Вывод списка товаров (как минимум для контроля вводимых данных)
  • Вывод товара с наибольшей ценой
  • Вывод товара с наименьшей ценой
  • Выход (иначе программа никогда не сможет завершиться)

Выводим пункты меню на экран

Чтобы вывести меню на экран, очистим его и затем просто напечатаем с помощью printf или cout номер пункта и то, что он должен делать:

Вариант для C:

void print_menu() {
system(“cls”); // очищаем экран
printf(“What do you want to do?n”);
printf(“1. Add good to listn”);
printf(“2. Print all goods in listn”);
printf(“3. Print the highest pricen”);
printf(“4. Print the lowest pricen”);
printf(“5. Exitn”);
printf(“>”);
}

Вариант для C++

void print_menu() {
system(“cls”); // очищаем экран
cout << “What do you want to do?” << endl;
cout << “1. Add good to list” << endl;
cout << “2. Print all goods in list” << endl;
cout << “3. Print the highest price” << endl;
cout << “4. Print the lowest price” << endl;
cout << “5. Exit” << endl;
cout << “>”;
}

Считываем введённый пункт меню

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

Вариант для C:

int get_variant(int count) {
int variant;
char s[100]; // строка для считывания введённых данных
scanf(“%s”, s); // считываем строку

// пока ввод некорректен, сообщаем об этом и просим повторить его
while (sscanf(s, “%d”, &variant) != 1 || variant < 1 || variant > count) {
printf(“Incorrect input. Try again: “); // выводим сообщение об ошибке
scanf(“%s”, s); // считываем строку повторно
}

return variant;
}

Вариант для C++:

int get_variant(int count) {
int variant;
string s; // строка для считывания введённых данных
getline(cin, s); // считываем строку

// пока ввод некорректен, сообщаем об этом и просим повторить его
while (sscanf(s.c_str(), “%d”, &variant) != 1 || variant < 1 || variant > count) {
cout << “Incorrect input. Try again: “; // выводим сообщение об ошибке
getline(cin, s); // считываем строку повторно
}

return variant;
}

Обработка выбранного пункта меню

Создадим для каждого пункта свой обработчик в виде процедуры, выполняющей указанное действие:

void add_good(good **goods, int *size, int *capacity) {
// реализация процедуры
}

void print_goods(good *goods, int size) {
// реализация процедуры
}

void print_highest(good *goods, int size) {
// реализация процедуры
}

void print_lowest(good *goods, int size) {
// реализация процедуры
}

Чтобы выполнить действие в зависимости от введённого пункта воспользуемся оператором switch-case:

switch (variant) {
case 1:
add_good(&goods, &size, &capacity);
break;

case 2:
print_goods(goods, size);
break;

case 3:
print_highest(goods, size);
break;

case 4:
print_lowest(goods, size);
break;
}

Казалось бы, всё готово, однако пока что программа обработает лишь один пункт меню и затем завершится, хотя должна завершаться лишь при выборе пятого пункта – “выход”. Чтобы организовать данный функционал, воспользуемся циклом do-while

int variant;

do {
print_menu();

variant = get_variant(5); // получаем номер выбранного пункта меню

switch (variant) {
case 1:
add_good(&goods, &size, &capacity);
break;

case 2:
print_goods(goods, size);
break;

case 3:
print_highest(goods, size);
break;

case 4:
print_lowest(goods, size);
break;
}

if (variant != 5)
system(“pause”); // задерживаем выполнение, чтобы пользователь мог увидеть результат выполнения выбранного пункта
} while (variant != 5);

Теперь наше меню будет работать до тех пор, пока пользователь не введёт число 5 чтобы выйти. При этом для всех остальных пунктов меню вызывается функция задержки system(“pause”), чтобы после завершения работы выбранного пункта меню нашей консольной программы пункты меню выводились не сразу, а лишь тогда, когда пользователь самостоятельно решит вернуться в него.

Полный листнинг кода

#include <stdio.h>
#include <stdlib.h>

typedef struct good {
char name[20]; // название-описание товара
double price; // цена товара
int count; // количество товара
} good;

void add_good(good **goods, int *size, int *capacity) {
printf(“Enter good description: “);
scanf(“%s”, &(*goods)[*size].name);
printf(“Enter good price: “);
scanf(“%lf”, &(*goods)[*size].price);
printf(“Enter good count: “);
scanf(“%d”, &(*goods)[*size].count);

(*size)++;

if (*size >= *capacity) {
*capacity *= 2;

*goods = (good *)realloc(*goods, *capacity * sizeof(good));
}
}

void print_goods(good *goods, int size) {
printf(“+———————+————-+——-+n”);
printf(“| good | Price | Count |n”);
printf(“+———————+————-+——-+n”);

if (size == 0)
printf(“| No goods was added… |n”);

for (int i = 0; i < size; i++)
printf(“| %19s | %11.2lf | %5d |n”, goods[i].name, goods[i].price, goods[i].count);

printf(“+———————+————-+——-+n”);
}

void print_highest(good *goods, int size) {
double max = goods[0].price;
int imax = 0;

for (int i = 1; i < size; i++) {
if (goods[i].count > max) {
max = goods[i].price;
imax = i;
}
}

printf(“The highest price of goods is %.2lf (good is %s)n”, max, goods[imax].name);
}

void print_lowest(good *goods, int size) {
double min = goods[0].price;
int imin = 0;

for (int i = 1; i < size; i++) {
if (goods[i].count < min) {
min = goods[i].price;
imin = i;
}
}

printf(“The lowest price of goods is %.2lf (good is %s)n”, min, goods[imin].name);
}

void print_menu() {
system(“cls”); // очищаем экран
printf(“What do you want to do?n”);
printf(“1. Add good to listn”);
printf(“2. Print all goods in listn”);
printf(“3. Print the highest pricen”);
printf(“4. Print the lowest pricen”);
printf(“5. Exitn”);
printf(“>”);
}

int get_variant(int count) {
int variant;
char s[100]; // строка для считывания введённых данных
scanf(“%s”, s); // считываем строку

Читайте также:  Деревья разной высоты какое свойство живых организмов

// пока ввод некорректен, сообщаем об этом и просим повторить его
while (sscanf(s, “%d”, &variant) != 1 || variant < 1 || variant > count) {
printf(“Incorrect input. Try again: “); // выводим сообщение об ошибке
scanf(“%s”, s); // считываем строку повторно
}

return variant;
}

int main() {
int variant; // выбранный пункт меню
int size = 0; // количество элементов массива товаров
int capacity = 1; // ёмкость массива товаров

good *goods = (good *)malloc(capacity * sizeof(good)); // выделяем память под массив товаров

do {
print_menu(); // выводим меню на экран

variant = get_variant(5); // получаем номер выбранного пункта меню

switch (variant) {
case 1:
add_good(&goods, &size, &capacity);
break;

case 2:
print_goods(goods, size);
break;

case 3:
print_highest(goods, size);
break;

case 4:
print_lowest(goods, size);
break;
}

if (variant != 5)
system(“pause”); // задерживаем выполнение, чтобы пользователь мог увидеть результат выполнения выбранного пункта
} while (variant != 5);

return 0;
}

Демонстрация работы программы

Демонстрация работы программы с меню

Понятнее не стало?

Закажите у нас! В кратчайшие сроки напишем для Вас любую программу с меню, какую пожелаете! Программы сопровождаются подробными комментариями, так что разобраться уж точно не составит труда! Чтобы сделать заказ – напишите нам: vk.com/programforyou

Последнее обновление: 31.10.2015

Для создания меню в Windows Forms применяется элемент MenuStrip. Данный класс унаследован от ToolStrip и
поэтому наследует его функциональность.

Наиболее важные свойства компонента MenuStrip:

  • Dock: прикрепляет меню к одной из сторон формы

  • LayoutStyle: задает ориентацию панели меню на форме. Может также, как и с ToolStrip, принимать следующие значения

    • HorizontalStackWithOverflow: расположение по горизонтали с переполнением – если длина меню превышает длину контейнера,
      то новые элементы, выходящие за границы контейнера, не отображаются, то есть панель переполняется элементами

    • StackWithOverflow: элементы располагаются автоматически с переполнением

    • VerticalStackWithOverflow: элементы располагаются вертикально с переполнением

    • Flow: элементы размещаются автоматически, но без переполнения – если длина панели меню меньше длины контейнера, то
      выходящие за границы элементы переносятся

    • Table: элементы позиционируются в виде таблицы

  • ShowItemToolTips: указывает, будут ли отображаться всплывающие подсказки для отдельных элементов меню

  • Stretch: позволяет растянуть панель по всей длине контейнера

  • TextDirection: задает направление текста в пунктах меню

MenuStrip выступает своего рода контейнером для отдельных пунктов меню, которые представлены объектом ToolStripMenuItem.

Добавить новые элементы в меню можно в режиме дизайнера:

Для добавления доступно три вида элементов: MenuItem (объект ToolStripMenuItem), ComboBox и TextBox. Таким образом,
в меню мы можем использовать выпадающие списки и текстовые поля, однако, как правило, эти элементы применяются в основном на панели инструментов.
Меню же обычно содержит набор объектов ToolStripMenuItem.

Также мы можем добавить пункты меню в коде C#:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

ToolStripMenuItem fileItem = new ToolStripMenuItem(“Файл”);

fileItem.DropDownItems.Add(“Создать”);
fileItem.DropDownItems.Add(new ToolStripMenuItem(“Сохранить”));

menuStrip1.Items.Add(fileItem);

ToolStripMenuItem aboutItem = new ToolStripMenuItem(“О программе”);
aboutItem.Click += aboutItem_Click;
menuStrip1.Items.Add(aboutItem);
}

void aboutItem_Click(object sender, EventArgs e)
{
MessageBox.Show(“О программе”);
}
}

ToolStripMenuItem в конструкторе принимает текстовую метку, которая будет использоваться в качестве текста меню. Каждый подобный объект
имеет коллекцию DropDownItems, которая хранит дочерние объекты ToolStripMenuItem. То есть один элемент ToolStripMenuItem
может содержать набор других объектов ToolStripMenuItem. И таким образом, образуется иерархическое меню или структура в виде дерева.

Если передать при добавление строку текста, то для нее неявным образом будет создан объект ToolStripMenuItem: fileItem.DropDownItems.Add(“Создать”)

Назначив обработчики для события Click, мы можем обработать нажатия на пункты меню: aboutItem.Click += aboutItem_Click

Отметки пунктов меню

Свойство CheckOnClick при значении true позволяет на клику отметить пункт меню. А с помощью свойства Checked
можно установить, будет ли пункт меню отмечен при запуске программы.

Еще одно свойство CheckState возвращает состояние пункта меню – отмечен он или нет. Оно может принимать три значения:
Checked (отмечен), Unchecked (неотмечен) и Indeterminate (в неопределенном состоянии)

Например, создадим ряд отмеченных пунктов меню и обработаем событие установки / снятия отметки:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

ToolStripMenuItem fileItem = new ToolStripMenuItem(“Файл”);

ToolStripMenuItem newItem = new ToolStripMenuItem(“Создать”) { Checked = true, CheckOnClick = true };
fileItem.DropDownItems.Add(newItem);

ToolStripMenuItem saveItem = new ToolStripMenuItem(“Сохранить”) { Checked = true, CheckOnClick = true };
saveItem.CheckedChanged += menuItem_CheckedChanged;

fileItem.DropDownItems.Add(saveItem);

menuStrip1.Items.Add(fileItem);
}

void menuItem_CheckedChanged(object sender, EventArgs e)
{
ToolStripMenuItem menuItem = sender as ToolStripMenuItem;
if (menuItem.CheckState == CheckState.Checked)
MessageBox.Show(“Отмечен”);
else if (menuItem.CheckState == CheckState.Unchecked)
MessageBox.Show(“Отметка снята”);
}
}

Клавиши быстрого доступа

Если нам надо быстро обратиться к какому-то пункту меню, то мы можем использовать клавиши быстрого доступа. Для задания клавиш быстрого доступа
используется свойство ShortcutKeys:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

ToolStripMenuItem fileItem = new ToolStripMenuItem(“Файл”);

ToolStripMenuItem saveItem = new ToolStripMenuItem(“Сохранить”) { Checked = true, CheckOnClick = true };
saveItem.Click+=saveItem_Click;
saveItem.ShortcutKeys = Keys.Control | Keys.P;

fileItem.DropDownItems.Add(saveItem);
menuStrip1.Items.Add(fileItem);
}

void saveItem_Click(object sender, EventArgs e)
{
MessageBox.Show(“Сохранение”);
}
}

Клавиши задаются с помощью перечисления Keys. В данном случае по нажатию на комбинацию клавиш Ctrl + P, будет срабатывать нажатие на пункт
меню “Сохранить”.

С помощью изображений мы можем разнообразить внешний вид пунктов меню. Для этого мы можем использовать следующие свойства:

  • DisplayStyle: определяет, будет ли отображаться на элементе текст, или изображение, или и то и другое.

  • Image: указывает на само изображение

  • ImageAlign: устанавливает выравнивание изображения относительно элемента

  • ImageScaling: указывает, будет ли изображение растягиваться, чтобы заполнить все пространство элемента

  • ImageTransparentColor: указывает, будет ли цвет изображения прозрачным

Если изображение для пункта меню устанавливает в режиме дизайнера, то нам надо выбрать в окне свойство пункт Image, после чего откроется
окно для импорта ресурса изображения в проект

Чтобы указать, как разместить изображение, у свойства DisplayStyle надо установить значение Image. Если мы хотим, чтобы
кнопка отображала только текст, то надо указать значение Text, либо можно комбинировать два значения с помощью другого
значения ImageAndText. По умолчанию изображение размещается слева от текста:

Также можно установить изображение динамически в коде:

fileToolStripMenuItem.Image = Image.FromFile(@”D:Icons

Источник