Dialogs

advertisement
Высокоуровневые методы
информатики и
программирования
Лекция 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
Download