|
Программирование >> Автоматически обновляемые приложения
Как сделать так, чтобы форма отбрасывала тень? Если вы хотите, чтобы ваша форма отбрасывала тень, то переопределите свойство CreateParams, добавив К свойству classstyle новое значение cs DROPSHADOw, как показано в листинге 5.14. f Листинг 5,14i ТеНь для формы private const int CS DROPSHADOW = 0x00020000; Переопределяем свойства CreateParams protected override CreateParams CreateParams { не и затем исчезнет. Все дело в файле Program.cs. Откройте его и увидите три строчки: Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Forml()); Код в первой строке делает доступным использование визуальных тем ХР для элементов управления. Вторая строчка отключает рендеринг текста с использованием старой версии GDI+ из .NET Framework 1.1 (подробнее это описано в блоге http: blogs.msdn.com/jfoscoding/archive/2005/10/13/ 480632.aspx). И, наконец, третья строчка - ключ решения нашей задачи. Мы видим, что метод Run ссылается на главную форму, которая становится формой по умолчанию. Но в нашем случае мы не хотим, чтобы она была формой по умолчанию. Мы не можем настроить это поведение через окно свойств, но можем изменить код: Forml mainForm = new Forml () ; Application.Run(); Запустив проект, вы увидите, что никакая форма не появлялась на экране, но, тем не менее, наша программа выполняется. Примечание Пример со скрытой формой находится в папке NoForm на прилагаемом диске. 108 Глава 5 CreateParams ср = base.CreateParams; cp.ClassStyle = СS DROPSHADOW; return cp; Запустив проект еще раз и вызвав на экран второе окно, вы увидите, что теперь оно отбрасывает тень. Имейте в виду, что данный код предназначен для операционных систем Windows ХР и выше, так как старые версии Windows не поддерживают подобную функциональность на уровне системы. В этом случае вам придется самим позаботиться об отрисовке подобного эффекта. Как вывести запрос при закрытии формы? Иногда встречаются ситуации, когда необходимо удостовериться, что пользователь действительно хочет закрыть программу, а не по ошибке щелкнул на кнопке закрытия программы. В этом случае нужно написать код для события Formciosing, показанный В листинге 5.15. : Листинг 5.15. Вывод сообщения при закрытии формы private void Forml FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show( Вы уверены, что хотите выйти из программы? , Внимание! , MessageBoxButtons.YesNo) == DialogResult.No) е.Cancel = true; Типичная ситуация, когда можно использовать это событие,- наличие текстового поля, содержащего измененный текст, который необходимо сохранить перед закрытием программы. В этом случае вы предоставляете пользователю шанс, чтобы он сначала сохранил изменения, а уже потом снова закрыл программу. Обратите внимание, что событие Formciosing пришло на смену событию closing из .NET Framework 1.1, которое считается устаревшим. Если у вас остались старые проекты, то не забудьте сделать соответствующие изменения в них. В последнее время многие программы используют Выбираем варианты закрытия формы Можно усложнить пример и сделать поведение при закрытии формы более избирательным. В .NET Framework 2.0 появилось новое свойство FormCiosingEventArgs.cioseReason, которое позволяет выбрать способ Закрытия окна при помощи перечисления system.windows.Forms.cioseReason. Это перечисление имеет следующие поля: □ ApplicationExitCall - был ВЫЗВаН метОД Exit КЛаССа Application; □ FormOwnerCiosing - была Закрыта родительская форма; □ MdiFormCiosing- была Закрыта родительская форма MDI (окно с многодокументным интерфейсом); □ None - не был определен способ закрытия формы; □ TaskManagerCiosing - приложение было закрыто через Диспетчер задач (Windows Task Manager); □ Userciosing- ОКНО закрывается пользователем через элементы пользовательского интерфейса: через элементы управления, кнопку Закрыть (X) на заголовке формы, команду Закрыть в системном меню или нажатием клавиш <Alt>+<F4>; □ windowsShutDown- приложение закрывается операционной системой при выключении системы. Ниже мы рассмотрим пример, который позволяет заблокировать кнопку X на заголовке формы. А здесь мы пойдем другим путем. Кнопка закрытия окна останется доступной, но пользователь все равно не сможет закрыть окно этим способом. Текст программы приведен в листинге 5.16. f Листинг 5.16. Попытка закрытия формы private void Forml FormClosing(object sender, FormCiosingEventArgs e) ( if (e.CioseReason == CioseReason.UserClosing) событие Formciosing ДЛЯ сворачивания в область уведомлений в виде значка, а реальное закрытие формы происходит при выборе команды контекстного меню приложения. Подобное поведение, в частности, характерно для программ обмена мгновенными сообщениями ICQ, Qip, Mail@Agent. О том, как реализовать подобную функциональность, будет рассказано в главе 6, когда речь пойдет об элементе управления Notifyicon.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |