Шаг 286.
Язык программирования C#. Начала.
Немного о разном. Работа с диалоговым окном

    На этом шаге мы рассмотрим использование такого окна.

    В первых шагах (9 шаг) мы рассматривали способы вывода сообщений в диалоговое окно. Для этого использовался метод Show() класса MessageBox. На самом деле, окно, которое отображается в таком случае, можно использовать не только для отображения сообщения, но и для получения ответа от пользователя. Для этого в окне с сообщением отображается несколько кнопок, и при щелчке пользователя по одной из них программа определяет, какую именно кнопку нажал пользователь.

    Все дело в том, что метод Show() класса MessageBox возвращает результат. Просто раньше мы его не использовали. Результатом метода является одна из констант из перечисления DialogResult. Эта константа определяет кнопку, которую нажал пользователь в диалоговом окне (например, Abort, Cancel, Ignore, No, OK, Retry или Yes - название константы соответствует названию кнопки, по которой щелкает пользователь). Как все это используется на практике, иллюстрирует приведенная ниже программа.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Windows.Forms;

namespace pr286_1
{
    // Главный класс:
    class Program
    {
        // Главный метод: 
        static void Main()
        {
            // Текстовые переменные: 
            string msg, title;
            // Переменная для определения пиктограммы: 
            MessageBoxIcon icn;
            // Переменная для определения результата:
            DialogResult res;
            // Отображение диалогового окна: 
            res = MessageBox.Show("Baм нравится C#?",// Сообщение
                "Риторический вопрос",	// Заголовок
                MessageBoxButtons.YesNo, // Кнопки
                MessageBoxIcon.Question // Пиктограмма
                );
            // Проверка результата: 
            if (res == DialogResult.Yes)
            {
                // Если ответ "Да"
                // Текст сообщения:
                msg = "Дo6po пожаловать в команду!";
                // Заголовок окна: 
                title = "Наш человек";
                // Пиктограмма:
                icn = MessageBoxIcon.Information;
            }
            else
            {
                // Если ответ "Нет"
                // Текст сообщения: 
                msg = "У Вас нет сердца!";
                // Заголовок окна: 
                title = "Не может быть";
                // Пиктограмма: 
                icn = MessageBoxIcon.Error;
            }
            // Отображение окна с сообщением: 
            MessageBox.Show(msg, title, MessageBoxButtons.OK, icn);
        }
    }
}
Архив проекта можно взять здесь.

    В этой программе объявляется несколько переменных. Текстовые переменные msg и title нам нужны для того, чтобы запомнить текст сообщения и заголовок окна (который отображается последним в программе). В переменную icn (типа MessageBoxIcon) будет записано значение константы из перечисления MessageBoxIcon, определяющее тип пиктограммы для окна. Переменная res типа DialogResult используется для определения результата при нажатии кнопки в диалоговом окне. В переменную res записывается результат вызова статического метода Show() из класса MessageBox. Третьим аргументом методу передается константа YesNo из перечисления MessageBoxButtons. Эта константа означает, что у окна будет две кнопки (Yes и No, или Да и Нет).


Четвертый аргумент MessageBoxIcon.Question метода Show() означает, что в окне отображается пиктограмма с вопросительным знаком.

    На рисунке 1 показано, как выглядит первое окно (с вопросом), которое отображается при запуске программы на выполнение.


Рис.1. В начале выполнения программы появляется диалоговое окно с кнопками Да и Нет

    Если пользователь нажимает в окне кнопку Да, то значением переменной res будет константа Yes из перечисления DialogResult. Если пользователь нажмет кнопку Нет, то в переменную res будет скопировано значение константы No из перечисления DialogResult. Поэтому условие res==DialogResult.Yes в условной конструкции истинно, если пользователь нажал в диалоговом окне кнопку Да. В этом случае выполняются команды

  msg = "Дo6po пожаловать в команду!";   , 
  title = "Наш человек"; и 
  icn = MessageBoxIcon.Information;    . 

    В противном случае (если условие res==DialogResult.Yes ложно) выполняются команды

  msg = "У Вас нет сердца!";   , 
  title = "Не может быть";    и 
  icn = MessageBoxIcon.Error;     . 
Но при любом исходе переменные msg, title и icn получают значения и после выполнения условной конструкции выполняется команда
  MessageBox.Show(msg, title, MessageBoxButtons.OK, icn);   , 
которой отображается еще одно окно с сообщением. Параметры данного окна (текст сообщения, заголовок и пиктограмма) зависят от того, какую кнопку пользователь нажал в предыдущем окне. На рисунке 2 показано окно, которое отображается в случае, если пользователь в первом окне нажал кнопку Да.


Рис.2. Такое окно появляется, если пользователь нажал кнопку Да

    Если пользователь нажмет в первом окне кнопку Нет, то появится окно, показанное на рисунке 3.


Рис.3. Такое окно появляется, если пользователь нажмет кнопку Нет


Напомним, что тип пиктограммы в окне определяется константой (Asterisk, Error, Exclamation, Hand, Information, None, Question, Stop и Warning) из перечисления MessageBoxIcon. Количество и название кнопок в диалоговом окне определяется константой (AbortRetryIgnore, OK, OKCancel, RetryCancel, YesNo и YesNoCancel) из перечисления MessageBoxButtons.

    На следующем шаге мы рассмотрим использование пространства имен.




Предыдущий шаг Содержание Следующий шаг