netlib.narod.ru | < Назад | Оглавление | Далее > |
В начале главы я уже упоминал окна сообщений. Давайте взглянем на короткую, но полностью завершенную программу Windows Forms, которая отображает наши любимые два слова бессмертной прозы:
MessageBoxHelloWorld.cs
//----------------------------------------------------- // MessageBoxHelloWorld.cs (C) 2001 by Charles Petzold //----------------------------------------------------- class MessageBoxHelloWorld { public static void Main() { System.Windows.Forms.MessageBox.Show("Hello, world!"); } }
Эта программа очень похожа на оригинальную программу ConsoleHelloWorld из главы 1. В ней есть класс (MessageBoxHelloWorld), метод класса с именем Main, который является точкой входа в программу, и единственная исполняемая инструкция, делающая почти то же самое, что и ее консольный аналог. Длинное имя функции разбивается на части следующим образом:
Поскольку Show — это статический метод, он должен предваряться именем класса и не требует создания объекта класса, точно так же как метод WriteLine класса Console. Вот как выглядит результат работы этой программы:
Когда вы щелкаете по кнопке OK, диалоговое окно закрывается, выполняется возврат из метода Show и работа программы завершается.
System.Windows.Forms — гигантское пространство имен, содержащее около 200 классов и 100 перечислений, а также 41 делегат, 7 интерфейсов и 4 структуры. Пространства имен System и System.Drawing наиболее важные в этой книге. Обычно в начало программы Windows Forms помещается инструкция
using System.Windows.Forms;
и в результате на статический метод Show класса MessageBox можно ссылаться следующим образом:
MessageBox.Show("Hello, world!");
Скорее всего, работая с Windows вы видели множество различных окон сообщений. Они всегда содержат краткое сообщени для пользователя и позволяют ответить щелчком по кнопке. Количество кнопок изменяется от одной до трех. Иногда сообщение предваряется значком, и у окна есть информативный заголовок. Програмисты чсто используют окна сообщений для отладки, поскольку они предоставляют простой способ отобразить текстовую информацию и приостановить выполнние програмы.
Класс MessageBox является потомком Object и наследует несколько методов, реализуемых Object. Единственный метод, реализуемый MessageBox самостоятельно — Show. Это статический метод, для которого существует 12 различных версий. Вот семь из них:
Различные версии метода Show класса MessageBox
DialogResult Show(string strText) |
||
DialogResult Show(string strText, string strCaption) |
||
DialogResult Show(string strText, string strCaption, MessageBoxButtons mbb) |
||
DialogResult Show(string strText, string strCaption, MessageBoxButtons mbb, MessageBoxIcon mbi) |
||
DialogResult Show(string strText, string strCaption, MessageBoxButtons mbb, MessageBoxIcon mbi) |
||
DialogResult Show(string strText, string strCaption, MessageBoxButtons mbb, MessageBoxIcon mbi, MessageBoxDefaultButton mbdb) |
||
DialogResult Show(string strText, string strCaption, MessageBoxButtons mbb, MessageBoxIcon mbi, MessageBoxDefaultButton mbdb, MessageBoxOptions mbo) |
||
Остальные перегруженные методы Show используются для взаимодействия с кодом Win32.
Выводимый в заголовке окна сообщения текст обычно является именем приложения. Вот альтернативнй вызов MessageBox.Show для нашей первой программы Windows Forms:
MessageBox.Show("Hello, world!", "MessageBoxHelloWorld");
Если не указывать второй параметр, текста в заголовке не будет.
Чтобы выбрать, какие кнопки будут в окне сообщения следует указать одно из значений перечисления:
Перечисление MessageBoxButtons
Член перечисления | Значение |
OK | 0 |
OKCancel | 1 |
AbortRetryIgnore | 2 |
YesNoCancel | 3 |
YesNo | 4 |
RetryCancel | 5 |
Например, кнопки ОК и Cancel (Отмена) покажет такой вызов:
MessageBox.Show("Hello, world!", "MessageBoxHelloWorld", MessageBoxButtons.OKCancel);
При использовании одной из версий MessageBoxSbow без этого параметра показывается только кнопка ОК. Кнопки AbortRetryIgnore восходят к печально известному сообщению MS-DOS, которое выводилось при попытке обратиться к устройству (обычно дисководу), которое почему-либо не отвечало. В графических средах использовать эти кнопки, пожалуй, не стоит, если только вы не стремитесь выглядеть до смешного старомодным.
Кроме того, можно указать одно из значений перечисления MessageBoxIcon чтобы вывести в окне сообщений значок:
Перечисление MessageBoxIcons
Член перечисления | Значение |
None | 0x00 |
Hand | 0x10 |
Stop | 0x10 |
Error | 0x10 |
Question | 0x20 |
Exclamation | 0x30 |
Warning | 0x30 |
Asterisk | 0x40 |
Information | 0x40 |
Как можно видеть по значениям, в информационных окнах на самом деле используются только четыре уникальных значка. Вот пример показа окна со значком:
MessageBox.Show("Hello, world!", "MessageBoxHelloWorld", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
Если задано значение MessageBoxButtons, соответствующее двум или трем кнопкам, можно задействовать перечисление MessageBoxDefaultButton, определяющее кнопку по умолчанию:
Перечисление MessageBoxDefaultButton
Член перечисления | Значение |
Button1 | 0x000 |
Button2 | 0x100 |
Button3 | 0x200 |
Например, вызов:
MessageBox.Show("Hello, world!", "MessageBoxHelloWorld", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2);
делает вторую кнопку — Cancel (Отмена) — кнопкой по умолчанию. После появления окна сообщения именно она является выделенной и реагирует на ввод с клавиатуры, например, на нажатие пробела.
Еще одно перечисление, используемое методом Show класса MessageBox, — MessageBoxOptions — определяет параметры окна:
Перечисление MessageBoxOptions
Член перечисления | Значение |
DefaultDesktopOnly | 0x020000 |
RightAlign | 0x080000 |
RtlReading | 0x100000 |
ServiceNotification | 0x200000 |
Однако эти параметры применяются редко.
Если в окне сообщений более одной кнопки, наверное, вам нужно будет знать, по какой кнопке щелкнул пользователь для его закрытия. Об этом сообщает возвращаемое MessageBoxSbow значение, принимающее одно из следующих значений перечисления:
Перечисление DialogResult
Член перечисления | Значение |
None | 0 |
OK | 1 |
Cancel | 2 |
Abort | 3 |
Retry | 4 |
Ignore | 5 |
Yes | 6 |
No | 7 |
Вот пример использования возвращаемого MessageBox.Show значения:
DialogResult dr = MessageBox.Show("Do you want to create a new file?", "WonderWord", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if {dr == DialogResult.Yes) { // Обработка "Да" (Yes) } else if (dr == DialogResult.No) { // Обработка "Нет" (No) } else { // Обработка "Отмена" (Cancel) }
Можно использовать и конструкцию switch/case, скажем, так:
switch (MessageBox.Show("Do you want to create a new file?", "WonderWord", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)) { case DialogResult.Yes: // Обработка "Да" (Yes) break; case DialogResult.No: // Обработка "Нет" (No) break; case DlalogResult.Cancel: // Обработка "Отмена" (Cancel) break; }
Иногда окна сообщений бывают полезны, если нужно быстро что-то посмотреть. Допустим, вы хотите показать имя каталога Windows с псевдонимом My Documents (Мои документы). Эту информацию можно получить с помощью класса Environment пространства имен System, используя статический метод GetFolderPath с одним параметром — членом перечисления Environment.SpecialFolder. Эти два имени отделяются точкой, так как SpecialFolder — перечисление, определенное в классе Environment.
MyDocumentsFolder.cs
//-------------------------------------------------- // MyDocumentsFolder.cs (C) 2001 by Charles Petzold //-------------------------------------------------- using System; using System.Windows.Forms; class MyDocumentsFolder { public static void Main() { MessageBox.Show( Environment.GetFolderPath(Environment.SpecialFolder.Personal), "My Documents Folder"); } }
На моем компьютере эта программа выводит такое окно сообщений:
netlib.narod.ru | < Назад | Оглавление | Далее > |