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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Меню в C# и Windows Forms

Для добавления доступно три вида элементов: 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

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

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

Свойство 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(«Отметка снята»);
}
}

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

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

Если нам надо быстро обратиться к какому-то пункту меню, то мы можем использовать клавиши быстрого доступа. Для задания клавиш быстрого доступа
используется свойство 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, после чего откроется
окно для импорта ресурса изображения в проект

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

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

Изображения в меню в Windows Forms

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

fileToolStripMenuItem.Image = Image.FromFile(@»D:Icons023block32.png»);

Источник

Превью к статье о том, как создать меню для консольного приложения на C/C++

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

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

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

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

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

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

Чтобы вывести меню на экран, очистим его и затем просто напечатаем с помощью 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

Источник

  • Вертикальное меню
  • Горизонтальное меню
  • Выпадающее меню

Если ваш веб-сайт не ограничивается одной веб-страницей, то стоит подумать о добавлении панели навигации (меню). Меню — раздел веб-сайта, предназначенный помогать посетителю перемещаться по сайту.
Любое меню представляет собой список ссылок, ведущих на внутренние страницы сайта. Самым простым способом добавить панель навигации на сайт является создание меню с помощью CSS и HTML.

Вертикальное меню

Первым шагом создания вертикального меню будет создание маркированного списка. Также нам нужно будет иметь возможность идентифицировать список, поэтому мы добавим к нему атрибут id с идентификатором «navbar». Каждый элемент <li> нашего списка будет содержать по одной ссылке:

<ul id=»navbar»>
<li><a href=»#»>Главная</a></li>
<li><a href=»#»>Новости</a></li>
<li><a href=»#»>Контакты</a></li>
<li><a href=»#»>О нас</a></li>
</ul>

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

#navbar {
margin: 0;
padding: 0;
list-style-type: none;
width: 100px;
}

Теперь пришло время стилизовать сами ссылки. Мы добавим к ним фоновый цвет, изменим параметры текста: цвет, размер и насыщенность шрифта, уберем подчеркивание, добавим небольшие отступы и переопределим отображение элемента <a> со строчного на блочный. Дополнительно были добавлены левая и нижняя рамки к пунктам списка.

Самой важной частью наших изменений является переопределение строчных элементов на блочные. Теперь наши ссылки занимают все доступное пространство пунктов списка, то есть для перехода по ссылке нам больше не нужно наводить курсор точно на текст.

#navbar a {
background-color: #949494;
color: #fff;
padding: 5px;
text-decoration: none;
font-weight: bold;
border-left: 5px solid #33ADFF;
display: block;
}
#navbar li {
border-left: 10px solid #666;
border-bottom: 1px solid #666;
}

Мы объединили весь код, описанный выше, в один пример, теперь, нажав на кнопку попробовать, вы можете перейти на страницу с примером и увидеть результат:

<!DOCTYPE html>
<html>
<head>
<meta charset=»utf-8″>
<title>Название документа</title>
<style>
#navbar {
margin: 0;
padding: 0;
list-style-type: none;
width: 100px;
}
#navbar li {
border-left: 10px solid #666;
border-bottom: 1px solid #666;
}
#navbar a {
background-color: #949494;
color: #fff;
padding: 5px;
text-decoration: none;
font-weight: bold;
border-left: 5px solid #33ADFF;
display: block;
}
</style>
</head>

<body>

<ul id=»navbar»>
<li><a href=»#»>Главная</a></li>
<li><a href=»#»>Новости</a></li>
<li><a href=»#»>Контакты</a></li>
<li><a href=»#»>О нас</a></li>
</ul>

</body>
</html>

Попробовать »

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

Вернемся к рассмотренному ранее примеру вертикального меню и добавим в таблицу стилей следующее правило:

#navbar a:hover {
background-color: #666;
border-left: 5px solid #3333FF;
}

Попробовать »

Горизонтальное меню

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

Горизонтальное меню можно создать путем стилизации обычного списка. Свойству display для элементов <li> нужно присвоить значение inline, чтобы пункты списка располагались друг за другом.

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

<ul id=»navbar»>
<li><a href=»#»>Главная</a></li>
<li><a href=»#»>Новости</a></li>
<li><a href=»#»>Контакты</a></li>
<li><a href=»#»>О нас</a></li>
</ul>

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

#navbar {
margin: 0;
padding: 0;
list-style-type: none;
}
#navbar li { display: inline; }

Попробовать »

Теперь нам осталось лишь определить стилевое оформление для нашего горизонтального меню:

#navbar {
margin: 0;
padding: 0;
list-style-type: none;
border: 2px solid #0066FF;
border-radius: 20px 5px;
width: 550px;
text-align: center;
background-color: #33ADFF;
}
#navbar a {
color: #fff;
padding: 5px 10px;
text-decoration: none;
font-weight: bold;
display: inline-block;
width: 100px;
}
#navbar a:hover {
border-radius: 20px 5px;
background-color: #0066FF;
}

Попробовать »

Выпадающее меню

Меню, которое мы будем создавать, будет иметь основные навигационные ссылки, расположенные в горизонтальной панели навигации, и подпункты, которые будут отображаться только после наведения курсора мыши на тот пункт меню, к которому эти подпункты относятся.

Сначала нам нужно создать HTML-структуру нашего меню. Основные навигационные ссылки мы поместим в маркированный список:

<ul id=»navbar»>
<li><a href=»#»>Главная</a></li>
<li><a href=»#»>Новости</a></li>
<li><a href=»#»>Контакты</a></li>
<li><a href=»#»>О нас</a></li>
</ul>

Подпункты мы разместим в отдельном списке, вложив его в элемент <li>, который содержит родительскую ссылку относительно подпунктов. Теперь мы имеем четкую структуру нашей будущей панели навигации:

<ul id=»navbar»>
<li><a href=»#»>Главная</a></li>
<li><a href=»#»>Новости</a></li>
<li><a href=»#»>Контакты</a>
<ul>
<li><a href=»#»>Адрес</a></li>
<li><a href=»#»>Телефон</a></li>
<li><a href=»#»>Email</a></li>
</ul>
</li>
<li><a href=»#»>О нас</a></li>
</ul>

Попробовать »

Теперь приступим к написанию CSS кода. Для начала необходимо скрыть список с подпунктами с помощью объявления display: none;, чтобы они не отображались на веб-странице все время. Для отображения подпунктов нам нужно чтобы при наведении на элемент <li> список снова был преобразован в блочный элемент:

#navbar ul { display: none; }
#navbar li:hover ul { display: block; }

Убираем у обоих списков отступы и маркеры, установленные по умолчанию. Элементы списка с навигационными ссылками делаем плавающими, формируя горизонтальное меню, но для элементов списка, содержащих подпункты задаем float: none;, чтобы они отображались друг под другом.

#navbar, #navbar ul {
margin: 0;
padding: 0;
list-style-type: none;
}
#navbar li { float: left; }
#navbar ul li { float: none; }

Затем нам нужно сделать так, чтобы наше выпадающее подменю не смещало контент, расположенный под панелью навигации, вниз. Для этого мы зададим пунктам списка position: relative;, а списку, содержащему подпункты position: absolute; и добавим свойство top со значением 100%, чтобы абсолютно позиционированное подменю отображалось точно под ссылкой.

#navbar ul {
display: none;
position: absolute;
top: 100%;
}
#navbar li {
float: left;
position: relative;
}
#navbar { height: 30px; }

Попробовать »

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

Теперь нам осталось стилизовать оба наших списка и выпадающее меню будет готово:

#navbar ul {
display: none;
background-color: #f90;
position: absolute;
top: 100%;
}
#navbar li:hover ul { display: block; }
#navbar, #navbar ul {
margin: 0;
padding: 0;
list-style-type: none;
}
#navbar {
height: 30px;
background-color: #666;
padding-left: 25px;
min-width: 470px;
}
#navbar li {
float: left;
position: relative;
height: 100%;
}
#navbar li a {
display: block;
padding: 6px;
width: 100px;
color: #fff;
text-decoration: none;
text-align: center;
}
#navbar ul li { float: none; }
#navbar li:hover { background-color: #f90; }
#navbar ul li:hover { background-color: #666; }

Попробовать »

Источник