Высокоуровневые методы информатики и программирования Лекция 25 Работа с диалогами План работы • • • • • Понятие диалога Простой диалог – MessageBox; Встроенные диалоги; Собственные диалоги. Однодокументные и многодокументные интерфейсы. Программа включает: • основную форму программы • дочерние окна отображения (MDI) • диалоговые окна – объекты класса Form, которые создаются и показываются при выборе пунктов меню (или элемента ToolStrip) – для получения данных от пользователя Перечисление - DialogResult 1. Вызов диалога frm.ShowDialog 2. Диалог возвращает значение перечисления DialogResult: Yes, No, Cancel, Retry, Abort, Ignore, None if(openFileDialog1.ShowDialog() == DialogResult.OK) { if((myStream = openFileDialog1.OpenFile())!= null) { // Insert code to read the stream here. myStream.Close(); } } Типы диалоговых окон • По способу создания – Библиотечные диалоги • Класс MessageBox • Общие диалоги (Common Dialogs) – Собственные диалоги • По способу работы – модальные – блокируют работу других окон – немодальные – позволяют работать с другими окнами Показ и закрытие формы Методы показа формы • В немодальном режиме - Show() • В модальном режиме - ShowDialog() Методы закрытие формы • Сохранение в памяти - Hide() • Удаление из памяти - Close() Простой диалог System.Windows.Forms.MessageBox.Show • Статический класс • Один метод Show – 12 вариантов • Основной метод – Show() • MessageBoxButtons – комбинации кнопок на форме: Ok, OkCancel, RetryCancel, Yes, No, YesNoCancel, AbortRetryIgnore Пример вызова диалога MessageBox MessageBox.Show("OK to Close", "Game Status", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2 ); Иерархия общих диалогов Классы встроенных диалогов System.Windows.Forms • OpenFileDialog – диалог открытия файла • SaveFileDialog – диалог для сохранения файла • PrintDialog – диалог вывода на печать • PrintPreviewDialog – диалог предварительный просмотр результата печати • ColorDialog – диалог выбора цвета • FontDialog – диалог выбора шрифта • FolderBrowserDialog – диалог работы с каталогами Свойства встроенного диалога OpenFileDialog • Title – заголовок диалога • Filter – “описание1 | фильтр1 | описание2 | фильтр2” Например: "txt files (*.txt) | *.txt | All files (*.*) | *.*" • FilterIndex – фильтр по умолчанию • InitialDirectory – начальная папка для ввода • AddExtension – добавлять расширение по умолчанию? • DefaultExtension – расширение по умолчанию • FileName (FileNames) – имя выбранного файла • ValidateNames – проверять автоматически существование файла? • CheckFileExist • CheckPathExist openFileDialog1.InitialDirectory = “c:\”; openFileDialog1.Filter = “txt files (*.txt) | *.txt | All files (*.*) | *.*”; openFileDialog1.FilterIndex = 2; openFileDialog1.RestoreDirectory = true; Пример вызова диалога OpenFile string str; ….. if(openFileDialog1.ShowDialog() == DialogResult.OK) { StreamReader myStream; myStream = File.OpenText(openFileDialog1.FileName); if (myStream != null) { // Здесь вставляется код для чтения данных str = myStream.ReadLine(); myStream.Close(); } } Пример вызова общего диалога private void myClick(object sender, System.EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.Filter ="txt files (*.txt) | *.txt | All files (*.*) | *.*"; openFileDialog1.FilterIndex = 1; openFileDialog1.AddExtension = true; openFileDialog1.Title = "My Open Dialog"; openFileDialog1.ValidateNames = true; DialogResult rc = openFileDialog1.ShowDialog(); if(rc == DialogResult.OK) { string s = openFileDialog1.FileName; } } Собственные диалоговые окна Создание собственного диалога • Добавить форму • Разместить элементы управления • Назначить в обработчиках событий кнопок значение свойства DialogResult • По заданному событию в основной форме создать экземпляр диалога • Вызвать на выполнение метод ShowDialog • Проанализировать результат • Сохранить полученные значения Класс DialogForm public partial class DialogForm : Form { public int x; public int y; public DialogForm() { InitializeComponent(); } private void DialogForm_Load(object sender, EventArgs e) { textBox1.Text = x.ToString(); textBox2.Text = y.ToString(); } } private void button1_Click(object sender, EventArgs e) { x = Convert.ToInt32(textBox1.Text); y = Convert.ToInt32(textBox2.Text); this.DialogResult = DialogResult.OK; } private void button2_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; } Использование собственного диалога private void myClick(object sender, System.EventArgs e) { int X = 5, Y = 10; DialogForm dlg = new DialogForm(); dlg.x = X; dlg.y = Y; DialogResult rc = dlg.ShowDialog(); if (rc == DialogResult.OK) { X = dlg.x; Y = dlg.y; MessageBox.Show("X = "+X.ToString()+";Y="+Y.ToString(), "Результат работы диалога”, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); } } Сообщение о коде завершения диалога private void buttonOK_Click(object sender, System.EventArgs e) { this.DialogResult = DialogResult.OK; } private void buttonCancel_Click(object sender, System.EventArgs e) { this.DialogResult = DialogResult.Cancel; } AcceptButton = buttonOK; //Button to receive default focus CancelButton = buttonCancel; //Fires when Esc pushed