Стандартные диалоги

Многодокументный интерфейс Multiple Document Interface

Многодокументный интерфейс (Multiple Document Interface, MDI) используется для приложений, которые могут в клиентской области основной формы показывать много экземпляров одного или разных типов форм, которые показывают разное содержание (документы). Например, редактор текстов, который одновременно показывает в разных дочерних окнах содержание разных документов. Однако следует понимать, что под документом понимается не только текст, но и информация любого другого типа (изображение, таблицы данных, видео и т.п.). Используемые дочерние формы не выходят за границы основной формы приложения.

Для организации MDI интерфейса следует в основной форме приложения задать свойству IsMDIContaner значение true. А для того, чтобы дочерние окна вели себя соответствующим образом (открывались в родительском окне), у них нужно присвоить свойству MdiParent ссылку на данную родительскую форму. Например, в методе основной формы можно создать метод, который будет показывать дочерние формы:

private void ShowMdiChild(Form childForm) {

childForm.MdiParent = this; // this – основная форма

childForm.Show();

}

В основной форме может быть открыто одновременно много дочерних форм. Свойство формы ActiveMdiChild ссылается на окно, с которым работает в данный момент пользователь. Используя данное свойство можно получить все данные связанные с этой формой. Дочерние формы можно упорядочивать, вызывая метод LayoutMdi(), который в качестве параметра принимает значения перечисления MdiLayout. Возможными значениями данного перечисления являются: Cascade (упорядочит каскадом), TileHorizontal (упорядочить горизонтально) и TileVertical (упорядочить вертикально).

В системе разработки Visual Studio имеется специальный вид форм, у которого уже задано не только свойство IsMDIContaner = true, но и созданы меню и инструментальная полоса для выполнения стандартных операция с дочерними формами.

 

В библиотеке FCL имеется набор стандартных модальных форм, позволяющие выполнять стандартные действия:

Ÿ OpenFileDialog – диалог выбора и открытия файла для считывания данных;

Ÿ SaveFileDialog – диалог выбора и открытия файла для записыи данных;

Ÿ PrintDialog – диалог вывода на печать;

Ÿ PrintPreviewDialog – диалог предварительный просмотр результата печати;

Ÿ ColorDialog – диалог выбора цвета;

Ÿ FontDialog – диалог выбора шрифта;

Ÿ FolderBrowserDialog – диалог работы с каталогами.

 

Все эти формы поддерживаются стандартными окнами операционной системы. Логика работы с этими формами однотипная и состоит в следующем:

Ÿ описание и создание объекта нужного класса форм;

Ÿ задание свойств данного объекта для его визуального представления и логики работы;

Ÿ вызов у данного объекта метода ShowDialog() и сравнение полученного результата со значением DialogResult.OK;

Ÿ если завершение успешное, то значения нужных свойств диалога сохраняются в переменных приложения.

 

Например, диалог OpenFileDialog имеет следующие основные свойства:

Ÿ Title – заголовок диалоговой формы;

Ÿ Filter – “описание1 | фильтр1 | описание2 | фильтр2”; например: "txt files (*.txt) | *.txt | All files (*.*) | *.*"

Ÿ FilterIndex – индекс фильтра, используемый по умолчанию;

Ÿ InitialDirectory – начальная папка для просмотра;

Ÿ FileName – имя выбранного файла (результат выбора).

 

Ниже показан пример использования диалога OpenFileDialog для считывания данных из выбранного файла:

 

string input;

OpenFileDialog oFileDlg = new OpenFileDialog();

oFileDlg.InitialDirectory = "c:\\";

oFileDlg.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";

if (oFileDlg.ShowDialog() == DialogResult.OK){

// чтение данных из выбранного файла

 

StreamReader sr = File.OpenText(oFileDlg.FileName);

input = sr.ReadToEnd();

}

 

Вид созданной диалоговой формы показан на рис. 8.5.

Кроме перечисленных стандартных диалогов также часто используется простое модальное окно сообщений (message box), которое можно показать на экране с помощью перегруженного метода Show() (12 вариантов метода) статического класса System.Windows.Forms.MessageBox. Как и обычное модальная форма, данное окно сообщений возвращает результат типа DialogResult.

 

Рис. 8.5. Диалоговое окно открытия файла.

 

Например, один из методов Show имеет следующую сигнатуру:

DialogResult Show(string, string, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton), где

Ÿ перечисление MessageBoxButtons – это комбинации кнопок на форме, таких как Ok, OkCancel, RetryCancel, Yes, No, YesNoCancel, AbortRetryIgnore.

Ÿ перечисление MessageBoxIcon – это иконка, выводимая в форме, такая как: None (нет), Hand (рука), Question (?), Exclamation (!), Asterisk (*), Stop (крест), Error (крест), Warning (!), Information (i);

Ÿ перечисление MessageBoxDefaultButton – номер кнопки, который будет выбран по умолчанию; допустимые значения: Button1, Button2, Button3.

 

Ниже приведен пример вызова окна сообщений с данным набором параметров:

MessageBox.Show("Продолжать выполнение программы?", "Редактор текста", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,

MessageBoxDefaultButton.Button2);

 

Результат выполнения данного метода показан на рис. 8.6.

Рис. 8.6. Простое диалоговое окно сообщений.