Создание Windows-приложений на основе Visual C#

         

Добавление пунктов контекстного меню в режиме запуска приложения. Элемент управления ComboBox


В зависимости от различных событий, происходящих на форме, содержание контекстного меню может меняться. Создайте новое приложение и назовите его MenuRunTime. Добавляем на форму элемент управления GroupBox (выпадающий список) и размещаем внутри него две надписи, текстовое поле, кнопку, GroupBox (рис. 3.6).


Рис. 3.6.  Приложение MenuRunTime в режиме дизайна

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

textBox1, свойствоЗначение
NametxtMenuText
Text
comboBox1, свойствоЗначение
NamecmbShortCuts
Text
button1, свойствоЗначение
NamebtnAdd
TextДобавить

Добавляем на форму элементы управления ContextMenu и ColorDialog. Свойству СontextMenu формы Form1 устанавливаем значение добавленного контекстного меню — сontextMenu1. Вводим пункты контекстного меню:

NameTextShortcut
mnuChangeColorИзменить цветCtrlG
mnuExitВыходAltF4

В обработчике пункта меню mnuChangeColor вызываем диалог colorDialog1 и присваиваем выбранное значение цвета фоновому цвету формы:

private void mnuChangeColor_Click(object sender, System.EventArgs e) { if(colorDialog1.ShowDialog()==DialogResult.OK) { this.BackColor =colorDialog1.Color; } }

В обработчике пункта меню "Выход" просто закрываем форму:

private void mnuExit_Click(object sender, System.EventArgs e) { this.Close(); }

Элемент ComboBox обычно заполняется значениями в режиме дизайна — для этого используется его свойство Items. Однако в нашем примере при загрузке формы мы заполним его всеми значениями сочетаний клавиш, поддерживаемых средой CLR:

private void Form1_Load(object sender, System.EventArgs e) { object[] sc = new object[Enum.GetValues(typeof (Shortcut)).Length]; Enum.GetValues(typeof(Shortcut)).CopyTo(sc,0); cmbShortCuts.Items.AddRange(sc); }

В обработчике кнопки btnAdd будет создаваться новый пункт меню и добавляться в контекстное меню сontextMenu1:

Листинг 3.3.

(html, txt)

В обработчике нового пункта снова будем вызывать диалог colorDialog1:

//Обработчик события Click экземпляра mnu private void NewmnuChangeColor_Click(object sender, System.EventArgs e) { if(colorDialog1.ShowDialog()==DialogResult.OK) { this.BackColor =colorDialog1.Color; } }


} // Создаем новый экземпляр mnu класса пунктов меню MenuItem MenuItem mnu = new MenuItem(); //Устанавливаем в качестве текста пункта значение, введенное в txtMenuText mnu.Text = txtMenuText.Text; //Устанавливаем в качестве сочетания клавиш данного пункта //выбранное значение из cmbShortCuts mnu.Shortcut=(Shortcut)cmbShortCuts.SelectedItem; //Добавляем пункт в контекстное меню contextMenu1 contextMenu1.MenuItems.Add(mnu); //Определяем обработчик для события Click экземпляра mnu mnu.Click += new System.EventHandler(this.NewmnuChangeColor_Click); }

Листинг 3.3.

В обработчике нового пункта снова будем вызывать диалог colorDialog1:

//Обработчик события Click экземпляра mnu private void NewmnuChangeColor_Click(object sender, System.EventArgs e) { if(colorDialog1.ShowDialog()==DialogResult.OK) { this.BackColor =colorDialog1.Color; } }

Запускаем приложение. Цвет формы можно изменить, выбрав соответствующий пункт меню или используя сочетание клавиш Ctrl+G (рис. 3.7). После введения текста пункта, выбора ярлыка и нажатия кнопки "Добавить" новый пункт доступен в меню (рис. 3.8).


Рис. 3.7.  Контекстное меню приложения MenuRunTime


Рис. 3.8.  Новый пункт "Снова изменить цвет" в контекстном меню

Добавление пунктов главного меню в режиме работы приложения ничем не отличается от рассмотренного – если бы мы поместили на форму главное меню, предпоследняя строчка обработчика кнопки btnAdd приняла бы вид:

//Добавляем пункт в главное меню mainMenu1 mainMenu1.MenuItems.Add(mnu);

На диске, прилагаемом к книге, вы найдете приложение MenuRunTime (Code\Glava3\MenuRunTime).


Содержание раздела