Опубликован: 11.09.2006 | Уровень: специалист | Доступ: платный
Лекция 3:

Работа с элементами управления (продолжение)

Добавление пользовательских (композитных) элементов управления

После создания композитного элемента его можно добавлять в обычные приложения. Создайте новое Windows-приложение и назовите его TestUserElement. В окне Toolbox щелкаем правой кнопкой на закладке Windows Forms и выбираем пункт Add/Remove Items… В окне Customize Toolbox на вкладке .NET Framework Components нажимаем кнопку Browse и выбираем файл UserInput.dll из папки bin/Debug проекта UserInput. В результате в окне компонент появляется элемент UserControl1, принадлежащий пространству имен UserInput (рис. 3.14):

Компонент UserControl1

Рис. 3.14. Компонент UserControl1

Закрываем окно Customize Toolbox — в окне ToolBox создан элемент управления UserControl1, который, как и обычный элемент, мы можем перетаскивать на форму, переименовывать и копировать (рис. 3.15).

Для добавления элемента UserControl1 просто перетаскиваем его на форму

увеличить изображение
Рис. 3.15. Для добавления элемента UserControl1 просто перетаскиваем его на форму

Для работы композитного элемента уже не требуется никакого кода — он представляет собой полностью автономный функциональный блок (рис. 3.16):

Приложение TestUserElement

Рис. 3.16. Приложение TestUserElement

Можно создавать пользовательские элементы управления непосредственно в текущем проекте — для этого в окне Solution Explorer щелкаем на названии проекта TestUserElement и в появившемся меню выбираем Add/Add User Control.

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

Запуск приложения в области уведомлений. Элемент управления NotifyIcon

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

Приложения в области уведомления

Рис. 3.17. Приложения в области уведомления

Создайте новое приложение и назовите его SystemTray. Перетаскиваем на форму из окна ToolBox элементы управления ContextMenu и NotifyIcon. Элемент управления NotifyIcon и представляет собой отображение запущенного приложения в области задач. Добавляем пункты контекстного меню и устанавливаем следующие свойства элемента NotifyIcon:

contextMenu1,
свойство Name Text
mnuShow Показать
mnuHide Скрыть
notifyIcon1, свойство Значение
СontextMenu contextMenu1
Icon ICOCode\Glava3\SystemTray\Icon\ eventlogWarn.ico
Text Область уведомлений

Изображение, используемое в качестве иконки (свойство Icon) элемента NotifyIcon, будет выводиться в область уведомлений. Значение свойства Text представляет собой текст всплывающей подсказки, появляющейся при наведении курсора на иконку приложения. Добавляем обработчик пункта меню mnuShow:

private void mnuShow_Click(object sender, System.EventArgs e)
 {
   //Включаем отображения приложения на панели задач при запуске
   this.ShowInTaskbar = true;
   //Показываем форму
   this.Show();
   //Отключаем доступность пункта меню mnuShow
   mnuShow.Enabled = false;
   //Включаем доступность пункта меню mnuHide
   mnuHide.Enabled = true;
   //Переменной Hidden устанавливаем значение false
   
 }

Обработчик пункта меню mnuHide изменяет эти значения на обратные:

private void mnuHide_Click(object sender, System.EventArgs e)
 {
   this.ShowInTaskbar = false;
   this.Hide();
   mnuShow.Enabled = true;
   mnuHide.Enabled = false;
   
 }

В конструкторе формы скрываем видимость приложения на панели задач при запуске:

public Form1()
 {
   InitializeComponent();
   this.ShowInTaskbar = false;
 }

Переключаемся в режим дизайна, в окне Properties элемента управления NotifyIcon переключаемся на события и дважды щелкаем в поле события DoubleClick:

private void notifyIcon1_DoubleClick(object sender, System.EventArgs e)
{
  mnuShow_Click(this, new EventArgs());
}

В результате обработчиком события notifyIcon1_DoubleClick будет обработчик mnuShow_Click. Запускаем приложение. При сворачивании приложение исчезает с панели задач, а развернуть его можно, щелкнув дважды на иконке в области уведомлений или выбрав пункт "Показать в контекстном меню" (рис. 3.18 и рис. 3.19):

При наведении курсора на иконку появляется подсказка — "Область уведомлений"

Рис. 3.18. При наведении курсора на иконку появляется подсказка — "Область уведомлений"
Контекстное меню

Рис. 3.19. Контекстное меню

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

Елена Дьяконова
Елена Дьяконова

При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: 

Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll

Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан.

Затем:

Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll

Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз.

Александр Сороколет
Александр Сороколет

Свойство WindowState формы blank Maximized. Не открывается почемуто на всё окно, а вот если последующую форму бланк открыть уже на макс открывается :-/

Иван Циферблат
Иван Циферблат
Россия, Таганрог, 36, 2000