При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан. Затем: Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз. |
Работа с элементами управления (продолжение)
Добавление пользовательских (композитных) элементов управления
После создания композитного элемента его можно добавлять в обычные приложения. Создайте новое Windows-приложение и назовите его TestUserElement. В окне Toolbox щелкаем правой кнопкой на закладке Windows Forms и выбираем пункт Add/Remove Items… В окне Customize Toolbox на вкладке .NET Framework Components нажимаем кнопку Browse и выбираем файл UserInput.dll из папки bin/Debug проекта UserInput. В результате в окне компонент появляется элемент UserControl1, принадлежащий пространству имен UserInput (рис. 3.14):
Закрываем окно Customize Toolbox — в окне ToolBox создан элемент управления UserControl1, который, как и обычный элемент, мы можем перетаскивать на форму, переименовывать и копировать (рис. 3.15).
увеличить изображение
Рис. 3.15. Для добавления элемента UserControl1 просто перетаскиваем его на форму
Для работы композитного элемента уже не требуется никакого кода — он представляет собой полностью автономный функциональный блок (рис. 3.16):
Можно создавать пользовательские элементы управления непосредственно в текущем проекте — для этого в окне Solution Explorer щелкаем на названии проекта TestUserElement и в появившемся меню выбираем Add/Add User Control.
На диске, прилагаемом к книге, вы найдете приложение TestUserElement (Code\Glava3\TestUserElement).
Запуск приложения в области уведомлений. Элемент управления NotifyIcon
Некоторые программы, такие как словари и антивирусы, при запуске остаются в области уведомлений панели задач, откуда их можно развернуть, дважды щелкнув на иконке приложения (рис. 3.17):
Создайте новое приложение и назовите его SystemTray. Перетаскиваем на форму из окна ToolBox элементы управления ContextMenu и NotifyIcon. Элемент управления NotifyIcon и представляет собой отображение запущенного приложения в области задач. Добавляем пункты контекстного меню и устанавливаем следующие свойства элемента NotifyIcon:
notifyIcon1, свойство | Значение |
---|---|
СontextMenu | contextMenu1 |
Icon | Code\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):
На диске, прилагаемом к книге, вы найдете приложение SystemTray (Code\Glava3\SystemTray).