черный.Name = "черный";
черный.Size = new System.Drawing.Size (152, 22);
черный.Text = "&Черный";
черный.Click += new System.EventHandler (черный_Click);
// красный
красный.Name = "красный";
красный.Size = new System.Drawing.Size (152, 22);
красный.Text = "&Красный";
красный.Click += new System.EventHandler (красный_Click);
//
//синий
//. . .
//Создаем PopUp-меню ТОЛЩИНА, устанавливаем свойства его пунктов ТОЛЩИНА.DropDownItems.AddRange(new ToolStripItem[ ] { пикселей1,
пикселей2
});
ТОЛЩИНА.Name = "ТОЛЩИНА"; ТОЛЩИНА.Text = "&ТОЛЩИНА";
ТОЛЩИНА.Size = new System.Drawing.Size (82, 20); // пикселей1
пикселей1.Checked = true; |
// установить флажок |
пикселей1.CheckState = Forms.CheckState.Checked; |
// запомнить состояние |
пикселей1.Name = "пикселей1"; |
|
пикселей1.Text = "&1 пиксель"; |
|
пикселей1.Size = new System.Drawing.Size (154, 22); |
|
пикселей1.Click += new System.EventHandler (толщина_Click);
//пикселей2
//. . .
8.Установка и сброс отметки одного пункта меню
Без учета состояния остальных пунктов ниспадающего меню:
this.Пункт1.CheckOnClick = true; // В дизайнере VS
9. Установка и сброс отметки пунктов PopUp-меню
Задача: установить контрольную отметку у выбранного пункта ниспадающего меню, а у взаимоисключающих пунктов аналогичную отметку убрать.
рис.10
private void черный_Click (object sender, EventArgs e)
{
color = Color.Black;
MenuItemCheck ("&Черный", ЦВЕТ);
}
private void красный_Click (object sender, EventArgs e)
{
color = Color.Red;
MenuItemCheck ("&Красный", ЦВЕТ);
}
private void синий_Click(object sender, EventArgs e)
{
color = Color.Blue;
MenuItemCheck ("&Синий", ЦВЕТ);
}
private void толщина_Click (object sender, EventArgs e)
{
switch (((ToolStripMenuItem)sender).Text)
{
case "&1 пиксель": width = 1; break;
case "&2 пикселя": width = 2; break;
case "&4 пикселя": width = 4; break;
. . . . . . . .
}
MenuItemCheck (( (ToolStripMenuItem)sender).Text, ТОЛЩИНА);
}
292
//private void MenuItemCheck(ToolStripMenuItem name, ToolStripMenuItem popup)
private void MenuItemCheck ( string text, ToolStripMenuItem popup )
{
foreach (ToolStripMenuItem item in popup.DropDownItems)
{
if ( item.Text != text ) item.Checked = false;
else
item.Checked = true;
}
}
11. Дополнительные возможности
Элементами меню могут быть:
пункты меню типа ToolStripMenuItem, списки ComboBox типа ToolStripComboBox, разделители типа ToolStripSeparator,
управляющие элементы TextBox типа ToolStripTextBox.
Enabled=false
Щелкаем здесь
рис.11
Особенностью элементов ComboBox и TextBox является то, что они не исчезают с экрана после их выборки. Если выбран пункт меню, то меню исчезает.
private System.Windows.Forms.ToolStripMenuItem |
toolStripMenuItem1; |
private System.Windows.Forms.ToolStripSeparator |
toolStripSeparator1; |
private System.Windows.Forms.ToolStripTextBox |
toolStripTextBox1; |
private System.Windows.Forms.ToolStripComboBox |
toolStripComboBox1; |
Создание контекстного меню
Это меню, которое выводится по щелчку правой кнопки мыши, и вид которого зависит от управляющего элемента, на котором сделан щелчок. Контекстное меню, дублирующее некоторые действия основного меню, - самый привычный способ работы с программой для пользователя.
Ряд элементов управления (TextBox, ComboBox) имеют встроенное контекстное меню.
Пример: элемент управления TextBox содержит в себе простейшее контекстное меню, дублирующее действия подменю Edit.
рис.12
Добавим элемент управления ContextMenuStrip (ContextMenu – VS 2003) из окна ToolBox на форму.
Контекстное меню включает только одну древовидную структуру элементов меню, поэтому оно наследует не класс ToolStrip, а класс
ToolStripDropDownMenu.
public class ContextMenuStrip : ToolStripDropDownMenu
Пункты контекстного меню добавляются точно так же, как и для главного меню. Все, что нужно сделать, — это определить, где будет появляться контекстное меню.
Привязка контекстного меню к ОЭУ
Многие элементы управления имеют свойство ContextMenuStrip, с помощью которого можно прикрепить контекстное меню к элементу.
Panel
ContextMenuStrip
рис.13
Местоположение меню определяется свойством LayoutStyle относительно родительского окна.
12. Создание панели инструментов ToolStrip public class ToolStrip : ScrollableControl, IComponent, IDisposable
В графических программах панели инструментов — основное средство работы. Панели инструментов ToolStrip содержат, как правило, наборы кнопок (Button), зачастую дублирующих пункты главного меню.
Перетащим на форму из окна ToolBox компонент ToolStrip.
На кнопках панели обычно располагаются иконки.
Добавить
объект
рис.14
295
Создание рисунков (иконок).
Щелкаем правой кнопкой на проекте, далее выбираем: Add / New Item... / Icon File
Запустится графический редактор со своим главным меню. Редактор создает две иконки – 16х16 и 32х32 пикселей. Во избежание путаницы рекомендуется иконку 16х16 удалить.
Для этого в меню Image сначала удаляемую иконку делаем текущей: Image / Current Icon Image Type / 16x16, 16 colors
а затем ее удаляем: Image / Delete Image Type.
Создаем рисунок первого инструмента. Остальные инструменты создаем так же.
Добавление инструмента на панель
Добавить объект на панель инструментов можно двумя способами: с помощью щелчка на стрелке списка Add ToolStripButton в строке инструментов или через свойство Items, создающее коллекцию инструментов.
1-ый способ.
рис.15
Контекстное меню любой кнопки панели инструментов позволяет с помощью пункта Set Image... открыть окно Select resource и импортировать рисунок из файла.
рис.16
2-ой способ. Щелкаем на кнопке ... свойства Items. Появляется редактор коллекции.
Добавить
объект
рис.17
1.Для каждого добавляемого инструмента изменяем его свойства
Text и Name.
2.Используя свойство Image … инструмента, открываем окно Select resource (см. выше) и импортируем иконку из созданного файла.
297
Для каждого инструмента создаем либо свой обработчик события, либо указываем обработчик пункта меню, соответствующего инструменту.
private void toolStripЦвет_Click (object sender, EventArgs e)
{
// ColorDialog colorDialog1 = new ColorDialog(); // Создать окно
colorDialog1.Color = color; |
// текущий цвет в рамке |
if (colorDialog1.ShowDialog() == DialogResult.OK) |
color = colorDialog1.Color; |
// новый цвет |
}
private void toolStripПлюс_Click (object sender, EventArgs e)
{
width += 2;
}
private void toolStripМинус_Click (object sender, EventArgs e)
{
if (width == 1) return; width -= 2;
}
private void Form1_MouseMove (object sender, MouseEventArgs e)
{
int y = menuStrip1.Size.Height + toolStrip1.Size.Height;
if ( leftDown == true )
{
Graphics g = this.CreateGraphics(); |
|
if ( toolStripГрад.Checked == true ) |
|
{ |
|
Pen pen2 = new Pen(Color.FromArgb(255, c, c), width); |
//белый – красный |
// Pen pen2 = new Pen(Color.FromArgb(c, 0, 0), width); |
//красный – черный |
g.DrawLine (pen2, 0, y, e.X, e.Y); |
|
if (c < 20) |
|
c = 255; |
|
else |
|
c = c – h; |
|
} |
|
else |
|
g.DrawLine(pen, 0, y, e.X, e.Y); |
|
} |
|
}
Реализация на уровне исходного текста программы
1.Создается контейнер типа ToolStrip.
2.Создаются кнопки-инструменты.
3.С помощью свойства контейнера Items получаем коллекцию элементов.
4.Используя метод коллекции AddRange(), добавляем в коллекцию ссылки на кнопки-инструменты.
Следует заметить, что все инструменты панели, как и пункты меню, наследуют абстрактный класс ToolStripItem:
public class ToolStripButton : ToolStripItem
ToolStrip toolStrip1 = new ToolStrip();
ToolStripButton toolStripЦвет |
= new ToolStripButton(); |
ToolStripButton toolStripПлюс |
= new ToolStripButton(); |
ToolStripButton toolStripМинус = new ToolStripButton();
ToolStripButton toolStripГрад = new ToolStripButton();
// toolStrip1
//
toolStrip1.Items.AddRange(new ToolStripItem[ ] { toolStripЦвет, toolStripПлюс, toolStripМинус, toolStripГрад });
toolStrip1.Name = «toolStrip1»; toolStrip1.Text = «ToolStrip1»;
toolStrip1.Location = new System.Drawing.Point(0, 24); toolStrip1.Size = new System.Drawing.Size(707, 25); toolStrip1.TabIndex = 1;
//toolStripЦвет
toolStripЦвет.Name = «toolStripЦвет»; toolStripЦвет.Text = «ToolStripЦвет»;
toolStripЦвет.DisplayStyle = ToolStripItemDisplayStyle.Image; toolStripЦвет.Image =
((System.Drawing.Image)(resources.GetObject(«toolStripЦвет.Image»))); toolStripЦвет.ImageTransparentColor = System.Drawing.Color.Magenta; toolStripЦвет.Size = new System.Drawing.Size(23, 22);
toolStripЦвет.Click += new System.EventHandler(toolStripButton1_Click);
//toolStripПлюс
//
. . .
// toolStripГрад
//
toolStripГрад.CheckOnClick = true;
. . .
13.Создание набора вкладок. Элемент управления TabControl.
ВVS-2005 этот элемент управления изменен.
Контейнер TabControl содержит коллекцию страниц типа TabPage. Коллекция имеет тип Controls.
К коллекции страниц (вкладок) можно получить доступ и через свойство TabPages, которое доступно в окне свойств дизайнера. Каждая страница имеет закладку, текст которой определяется свойством Text.
Существует два способа добавления страниц в дизайнере.
1-ый способ. Используя управляющую кнопку элемента.
рис.18
Список закладок в одну строку:
1
рис.19