ПОНЯТНО О Visual Basic NET (том 2)

Функция MsgBox


Простое окно MsgBox. В 3.7 я вкратце описал, как пользоваться окном MsgBox. Здесь я более подробно разберу его действие. Обеспечивает его появление на экране функция MsgBox. Если мы выполним оператор

MsgBox("Привет!")

то увидим на экране такое окно (Рис. 7.4).

Рис. 7.4

Обратите внимание, что кнопка ОК выделена (активна). Это значит, что вместо того, чтобы щелкать по ней мышью, можно просто на клавиатуре нажать клавишу Enter – результат будет тот же.

Точно такое же окно мы увидим, если выполним оператор

y = MsgBox("Привет!")

Поскольку MsgBox, как и всякая функция, имеет значение, оно и будет присвоено переменной y. Что это за значение и зачем оно нужно, мы чуть ниже выясним.

Более сложное окно MsgBox. Рассмотрим следующее окно MsgBox (Рис. 7.5).

Рис. 7.5

Оно отличается от предыдущего количеством кнопок, картинкой и текстом в заголовке. Также активна у нас кнопка No. Задается окно такой функцией MsgBox:



MsgBox ("Хотите знать, сколько будет дважды два?",   MsgBoxStyle.YesNoCancel  Or   _

MsgBoxStyle.Information  Or  MsgBoxStyle.DefaultButton2,   "Ответьте на вопрос")

У функции – 3 параметра, разделенные запятыми:

Первый параметр – текст сообщения «Хотите знать, сколько будет дважды два?».

Третий параметр – текст заголовка «Ответьте на вопрос». Если этот параметр вами не указан, то в заголовок выносится название вашего проекта.

Второй параметр у нас такой:

MsgBoxStyle.YesNoCancel  Or  MsgBoxStyle.Information  Or  MsgBoxStyle.DefaultButton2

Он определяет количество и названия кнопок (у нас – MsgBoxStyle.YesNoCancel), внешний вид и поведение окна (у нас – MsgBoxStyle.Information), а также то, какая кнопка из трех будет активной (у нас – MsgBoxStyle.DefaultButton2).

Вам не нужно запоминать их названий. VB сам предложит их вам на выбор во всплывающем списке, как только вы при вводе этой строки в окно кода введете запятую после первого параметра.

Составные части второго параметра отделяются друг от друга знаком логической функции Or. Не буду пояснять, почему. Составных частей может быть одна, две и больше. Они являются значениями перечисления MsgBoxStyle. Смысл трех из них ясен из таблицы:



Кнопки
OKOnly
Кнопка OK
OKCancel
Кнопки OK, Cancel (отменить)
YesNo
Кнопки Yes, No
YesNoCancel
Кнопки Yes, No, Cancel
RetryCancel
Кнопки Retry (попробовать еще раз), Cancel
AbortRetryIgnore
Кнопки Abort (отменить), Retry, Ignore (игнорировать)
Картинки
Critical
Х – крест
Question
? – вопрос
Exclamation
! – восклицание
Information
i – информация
Какая кнопка активна
DefaultButton1
1-я
DefaultButton2
2-я
DefaultButton3
3-я

Есть еще несколько любопытных составных частей, на которых я не останавливаюсь.
Если второй и третий параметры функции не указаны, окно имеет такой вид, как на Рис. 7.4.
Нажимаем на разные кнопки. Мы можем, если хотим, задавать действия, которые должны выполниться при нажатии той или иной кнопки в окне MsgBox. Для этого существует перечисление MsgBoxResult. Его значения повторяют названия кнопок в окне: OK, Yes, No, Cancel, Abort, Retry, Ignore. При нажатии на кнопку функция MsgBox принимает соответствующее значение, а значит, мы можем его анализировать оператором If.
Вот пример обработки нажатия на кнопки для нашего окна:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim y = MsgBox("Хотите знать, сколько будет дважды два?", _
MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Information Or MsgBoxStyle.DefaultButton2, _
"Ответьте на вопрос")
        If y = MsgBoxResult.Yes Then
            Debug.WriteLine("Четыре")
        ElseIf y = MsgBoxResult.No Then
            Debug.WriteLine("Я вижу, Вы не хотите этого знать!")
        ElseIf y = MsgBoxResult.Cancel Then
            Debug.WriteLine("Вы, к сожалению, отказались отвечать, нажав кнопку Cancel  или крестик")
        End If
End Sub
Имейте в виду, что нажатие на крестик в окне MsgBox вызывает ту же реакцию, что и нажатие кнопки Cancel.
Названия кнопок сами по себе не играют никакой роли, их действие, как вы только что убедились, полностью определяется кодом, который вы напишете в процедуре. Однако в среде пользователей и программистов уже утвердились некоторые привычки, которые вам небесполезно знать:
OK означает просто принять сообщение к сведению, Cancel
– отменить намечавшееся действие, Abort – прекратить неудавшуюся попытку (например, когда ваша процедура занимается распечаткой документа на принтере и приходит сообщение «Принтер не готов»), Retry – повторить неудавшуюся попытку, Ignore – проигнорировать предупреждение и продолжать, как ни в чем не бывало, Yes-No – ответить да или нет на вопрос, содержащийся в сообщении, и предпринять соответствующие действия.

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