Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Благодарности 9 страница






Рис. 4-46. Создаем обработчик события MunuSelect

Здесь находится список событий и обработчиков для них. Назначьте для события Select обработчик MenuSelect, щелкнув соответствующую строку списка дважды левой клавишей мыши или введя его имя с клавиатуры, как это показано на рис. 4-45. После того как Вы нажмете клавишу Enter, будет создано пустое тело обработчика события MenuSelect:

private void MenuSelect(object sender, System.EventArgs e)
{

}

На данном этапе наш обработчик будет вызываться только тогда, когда пользователь раскроет меню File. Теперь нам нужно подключить этот обработчик ко всем строкам главного меню приложения с целью обработки события Select.

Для этого Вам нужно по очереди выделить все строки меню нашего приложения, а затем для каждой строки выбрать в только что упомянутом окне Properties из списка события Select обработчик события MenuSelect (рис. 4-47).

Рис. 4-47. Выбираем из меню обработчик события MunuSelect

После этого обработчик события MenuSelect будет получать управление всякий раз, когда пользователь выбирает из меню любую строку.

Далее измените исходный текст метода MenuSelect следующим образом:

private void MenuSelect(object sender, System.EventArgs e)
{
MenuItem mi = (MenuItem)sender;
string ms;
switch(mi.Text)
{
case " & New": ms = " Новый документ"; break;
case " & Open...": ms = " Открыть документ"; break;
case " & Save": ms = " Сохранить документ"; break;
case " & Save As...": ms = " Сохранить документ"; break;
case " Page Set& up...": ms = " Параметры страницы"; break;
case " Print Pre& view...": ms = " Предварительный просмотр";
break;
case " & Print...": ms = " Печатать документ"; break;
case " Exit": ms = " Завершение работы"; break;
case " & Undo": ms = " Отменить ввод"; break;
case " & Redo": ms = " Повторить ввод"; break;
case " Cu& t": ms = " Вырезать"; break;
case " & Copy": ms = " Скопировать"; break;
case " & Paste": ms = " Вставить"; break;
case " & Delete": ms = " Удалить"; break;
case " & Select All": ms = " Выделить все"; break;
case " & Font...": ms = " Выбрать шрифт"; break;
case " C& olor...": ms = " Выбрать цвет"; break;
case " & Bold": ms = " Жирный шрифт"; break;
case " & Italic": ms = " Наклонный шрифт"; break;
case " & Underline": ms = " Подчеркивание"; break;
case " & Strikeout": ms = " Перечеркивание"; break;
case " & Left": ms = " Выравнивание по левой границе"; break;
case " & Right": ms = " Выравнивание по правой границе"; break;
case " & Center": ms = " Центровка"; break;
case " & About...": ms = " О программе"; break;
default: ms = " "; break;
}
statusBarPanel1.Text = ms;
}

Здесь мы вначале используем первый параметр метода с именем sender, через который передается ссылка на объект, вызвавший появление события. В нашем случае это будет строка меню, выбранная пользователем.

Программа преобразует эту ссылку к типу MenuItem, предназначенному для хранения такого рода ссылок, и записывает ее в переменную mi:

MenuItem mi = (MenuItem)sender;

Далее программа анализирует текст строки меню, хранящийся в свойстве mi.Text, с помощью оператора switch. В зависимости от того, какая строка меню вызвала событие, в переменную ms записывается тот или иной текст, поясняющий назначение данной строки меню.

Затем этот текст записывается в левую панель строки состояния statusBarPanel1:

statusBarPanel1.Text = ms;

Что же касается правой панели строки состояния statusBarPanel2, то в запись него выполняется обработчиком события richTextBox1_TextChanged. Измените его следующим образом:

private void richTextBox1_TextChanged(object sender,
System.EventArgs e)
{
m_DocumentChanged = true;
statusBarPanel2.Text = " Изменено";
}

Напомним, что этот обработчик получает управление, когда пользователь изменяет содержимое окна редактирования. При этом в правой панели строке состояния будет отображаться слово «Изменено» (рис. 4-48).

Рис. 4-48. Теперь строка состояния нашего приложения работает

Для того чтобы очистить правую панель строки состояния после создания нового документа, загрузки и сохранения документа, модифицируйте обработчики сообщений menuFileNew_Click, а также методы MenuFileOpen и MenuFileSaveAs, как это показано ниже:

private void menuFileNew_Click(object sender, System.EventArgs e)
{
if(m_DocumentChanged)
MenuFileSaveAs();

richTextBox1.Clear();
statusBarPanel2.Text = " ";
m_DocumentChanged = false;
}

private void MenuFileOpen()
{
if(openFileDialog1.ShowDialog() ==
System.Windows.Forms.DialogResult.OK & &
openFileDialog1.FileName.Length > 0)
{
try
{
richTextBox1.LoadFile(openFileDialog1.FileName,
RichTextBoxStreamType.RichText);
}
catch (System.ArgumentException ex)
{
richTextBox1.LoadFile(openFileDialog1.FileName,
RichTextBoxStreamType.PlainText);
}
this.Text = " Файл [" + openFileDialog1.FileName + " ]";
statusBarPanel2.Text = " ";
m_DocumentChanged = false;
}
}

private void MenuFileSaveAs()
{
if(saveFileDialog1.ShowDialog() ==
System.Windows.Forms.DialogResult.OK & &
saveFileDialog1.FileName.Length > 0)
{
richTextBox1.SaveFile(saveFileDialog1.FileName);
this.Text = " Файл [" + saveFileDialog1.FileName + " ]";
m_DocumentChanged = false;
statusBarPanel2.Text = " ";
}
}

Во все эти методы необходимо добавить следующую строку, очищающую правую панель строки состояния:

statusBarPanel2.Text = " ";

Визуальное проектирование приложений C#


А.В. Фролов, Г.В. Фролов

Глава 5. Диалоговые окна.. 2

Окно сообщений MessageBox.. 2

Перегруженные методы MessageBox.Show.. 2

Параметры метода MessageBox.Show.. 3

Возвращаемое значение. 4

Доработка меню File приложения SimpleNotepad. 4

Создание модальных окон.. 7

Замена окну MassageBox. 7

Создание новой формы.. 7

Создание обработчиков событий. 8

Отображение формы.. 8

Альтернативный способ передачи информации из формы.. 9

Диалоговое окно регистрации программы.. 10

Создание формы регистрации. 10

Поля ввода текстовой информации. 10

Флажки с зависимой фиксацией. 11

Флажки с независимой фиксацией. 11

Список ComboBox. 11

Добавление календаря. 12

Кнопки для закрытия формы.. 12

Настройка свойств формы.. 12

Программирование формы регистрации. 13

Обработка событий. 13

Передача регистрационной информации. 13

Добавление свойств. 13

Свойства для текстовых полей. 15

Свойства для флажков с зависимой фиксацией. 15

Свойства для флажков с независимой фиксацией. 16

Свойство для календаря. 17

Отображение формы регистрации. 17

Немодальные диалоговые окна.. 19

Приложение PropertyApp. 19

Форма главного окна приложения PropertyApp. 20

Немодальная форма настройки свойств. 21

Проверка данных формы... 22

Подключение компонента ErrorProvider. 22

Создание обработчика события Validating. 23

Настройка свойств компонента ErrorProvider. 25

 

Глава 5. Диалоговые окна

В предыдущей главе на примере приложения SimpleNotepad мы познакомились со многими аспектами визуального проектирования приложений с использованием системы разработки Microsoft Visual Studio.NET. В частности, мы создавали такие объекты, как диалоговые окна (диалоговые формы).

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

Диалоговые окна принято делить на модальные и немодальные окна. Когда приложение открывает на экране модальное окно, его работа будет приостановлена до тех пор, пока пользователь не закроет это окно. Что же касается немодальных окон, то они работают одновременно с главным окном открывшего их приложения.

В составе ОС Microsoft Windows имеется набор готовых модальных диалоговых окон, предназначенных для выполнения наиболее часто встречающихся операций, таких как открытие файла, выбор шрифта или цвета. В предыдущей главе мы в общих чертах рассказали о применении некоторых из этих окон. Применяя готовые диалоговые окна (так же как и другие готовые компоненты), программист может заметно сократить время разработки своего приложения.

Окно сообщений MessageBox

Во 2 главе нашей книги мы рассказывали Вам о том, как создать простейшее модальное окно сообщений на базе класса MessageBox, входящего в библиотеку классов Microsoft.NET Framework. Мы использовали это окно в приложении Hello (листинг 2-1).

Для удобства мы воспроизвели внешний вид окна класса MessageBox, отображаемого приложением Hello, на рис.5-1.

Рис. 5-1. Диалоговое окно с сообщением

Для отображения диалогового окна мы использовали метод Show, передав ему через параметр текст сообщения:

MessageBox.Show(" Для Вас есть сообщение! ");

Ниже мы привели прототип использованного здесь метода Show:

public static DialogResult Show(string message);

Когда пользователь щелкает кнопку OK, метод Show возвращает значение, равное DialogResult.OK.

Перегруженные методы MessageBox.Show

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

Прототип наиболее общего варианта метода MessageBox.Show, позволяющий реализовать практически все возможности диалогового окна MessageBox, приведен ниже:

public static DialogResult Show(
string message, // текст сообщения
string caption, // заголовок окна
MessageBoxButtons btns, // кнопки, расположенные в окне
MessageBoxIcon icon, // значок, расположенный в окне
MessageBoxDefaultButton defButton, // кнопка по умолчанию
MessageBoxOptions opt // дополнительные параметры
);

Параметры метода MessageBox.Show

Рассмотрим назначение отдельных параметров метода MessageBox.Show.

Параметр caption позволяет задать текст заголовка диалогового окна MessageBox.

С помощью параметра btns Вы можете указать, какие кнопки необходимо расположить в окне диалогового окна. Этот параметр задается константами из перечисления MessageBoxButtons (табл. 5-1).

Таблица 5-1. Перечисление MessageBoxButtons

Константа Кнопки, отображаемые в окне MessageBox
OK OK
OKCancel OK, Cancel
YesNo Yes, No
YesNoCancel Yes, No, Cancel
RetryCancel Retry, Cancel
AbortRetryIgnore Abort, Retry, Ignore

 

Параметр icon метода MessageBox.Show позволяет выбрать один из нескольких значков для расположения в левой части диалогового окна. Он задается в виде константы перечисления MessageBoxIcon (табл. 5-2).

Таблица 5-2. Перечисление MessageBoxIcon

Константа Значок
Asterisk
Error
Exclamation
Hand
Information
None Значок не отображается
Question
Stop
Warning

 

Как видите, для диалогового окна MessageBox можно выбирать один из четырех значков. Если же эти значки Вам не подходят, придется отказаться от использования диалогового окна MessageBox и создавать свое собственное модальное диалоговое окно.

Параметр defButton метода MessageBox.Show предназначен для выбора кнопки, которая получит фокус сразу после отображения диалогового окна. Этот параметр должен иметь одно из значений перечисления MessageBoxDefaultButton (табл. 5-3).

Таблица 5-3. Перечисление MessageBoxDefaultButton

Константа Номер кнопки, получающей фокус ввода по умолчанию
Button1  
Button2  
Button3  

 

Если в диалоговом окне отображаются кнопки Yes, No и Cancel, то они будут пронумерованы последовательно: кнопка Yes получит номер 1 (константа Button1), кнопка No — номер 2 (константа Button2), а кнопка Cancel — номер 3 (константа Button3).

И, наконец, последний параметр opt метода MessageBox.Show позволяет задать дополнительные параметры. Эти параметры должны иметь значения из перечисления MessageBoxOptions (табл. 5-4).

Таблица 5-4. Перечисление MessageBoxOptions

Константа Описание
DefaultDesktopOnly Окно с сообщением отображается только на рабочем столе, выбранном по умолчанию (в системах с несколькими рабочими столами)
RightAlign Текст сообщения выравнивается по правому краю диалогового окна
RtlReading Текст отображается справа налево
ServiceNotification Окно отображается на активном рабочем столе, даже если к системе не подключился ни один пользователь. Данный параметр предназначен для приложений, работающих как сервисы ОС Microsoft Windows

Возвращаемое значение

Если в окне диалогового окна MessageBox имеется несколько кнопок, то для того чтобы определить, какую кнопку щелкнул пользователь, программа должна проанализировать значение, возвращенное методом MessageBox.Show.

Метод MessageBox.Show может вернуть одно из нескольких значений перечисления DialogResult (табл. 5-5).

Таблица 5-5. Перечисление DialogResult

Константа Кнопка, при щелчке которой возвращается эта константа
Abort Abort
Cancel Cancel
Ignore Ignore
No No
None Модальное диалоговое окно продолжает работать
OK OK
Retry Retry
Yes Yes

Доработка меню File приложения SimpleNotepad

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

Сделаем так, чтобы при попытке создать или загрузить новый документ, когда старый документ не был сохранен, программа запрашивала пользователя о необходимости сохранения старого документа (рис. 5-2).

Рис. 5-2. Запрос на сохранение документа

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

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

И, наконец, кнопка Cancel позволит отказаться от создания или загрузки нового документа и вернуться к редактированию старого документа.

Для реализации этих усовершенствований необходимо внести изменения в методы MenuFileNew, MenuFileOpen и menuFileExit_Click.

Вот новый исходный текст метода MenuFileNew:

/// < summary>
/// Создание нового файла
/// < /summary>
private void MenuFileNew()
{
if(m_DocumentChanged)
{
DialogResult result = MessageBox.Show(
" Документ изменен. \nСохранить изменения? ",
" Сохранение документа", MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);

switch(result)
{
case DialogResult.Yes:
{
MenuFileSaveAs();
break;
}
case DialogResult.Cancel:
{
return;
}
}
}

richTextBox1.Clear();
statusBarPanel2.Text = " ";
m_DocumentChanged = false;
}

Напомним, что при изменении содержимого окна редактирования в переменную m_DocumentChanged записывается значение true. В этом случае метод MenuFileNew вызовет метод MessageBox.Show для отображения на экране окна Сохранение документа, показанного на рис. 5-2.

Далее метод MenuFileNew проанализирует значение, возвращенное методом MessageBox.Show. Это значение зависит от того, какую кнопку щелкнул пользователь. Соответственно, метод MenuFileNew предпримет различные действия.

Если пользователь щелкнул кнопку Yes, метод MessageBox.Show возвращает значение DialogResult.Yes. В этом случае метод MenuFileNew приглашает пользователя сохранить старый документ, вызывая для этого метод MenuFileSaveAs.

В том случае, когда пользователь отказался от сохранения старого документа, метод MenuFileNew очищает окно редактора richTextBox1 и убирает строку сообщения об изменении документа из правой панели строки состояния нашего приложения.

И, наконец, если пользователь щелкнул кнопку Cancel, метод MenuFileNew возвращает управление, не предпринимая никаких действий.

Аналогичным образом доработаны методы MenuFileOpen и menuFileExit_Click:

/// < summary>
/// Открытие существующего файла
/// < /summary>
private void MenuFileOpen()
{
if(m_DocumentChanged)
{
DialogResult result = MessageBox.Show(
" Документ изменен. \nСохранить изменения? ",
" Сохранение документа", MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);

switch(result)
{
case DialogResult.Yes:
{
MenuFileSaveAs();
break;
}
case DialogResult.Cancel:
{
return;
}
}
}

if(openFileDialog1.ShowDialog() ==
System.Windows.Forms.DialogResult.OK & &
openFileDialog1.FileName.Length > 0)
{
try
{
richTextBox1.LoadFile(openFileDialog1.FileName,
RichTextBoxStreamType.RichText);
}
catch (System.ArgumentException ex)
{
richTextBox1.LoadFile(openFileDialog1.FileName,
RichTextBoxStreamType.PlainText);
}
this.Text = " Файл [" + openFileDialog1.FileName + " ]";
statusBarPanel2.Text = " ";
m_DocumentChanged = false;
}
}

private void menuFileExit_Click(object sender, System.EventArgs e)
{
if(m_DocumentChanged)
{
DialogResult result = MessageBox.Show(
" Документ изменен. \nСохранить изменения? ",
" Сохранение документа", MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);

switch(result)
{
case DialogResult.Yes:
{
MenuFileSaveAs();
break;
}
case DialogResult.Cancel:
{
return;
}
}
}
this.Close();
}

Мы оставляем Вам эти методы для самостоятельного изучения.

Создание модальных окон

Как мы уже говорили, помимо только что рассмотренного модального диалогового окна класса MessageBox программисту доступны стандартные модальные диалоговые окна, предназначенные для выполнения основных операций. Такие окна мы использовали в предыдущей главе для приложения SimpleNotepad.

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

Замена окну MassageBox

Хотя в приложении SimpleNotepad мы уже создавали собственное модальное окно About SimpleNotepad для отображения информации о программе (рис. 4-33), это окно не возвращало никаких значений. Теперь мы создадим диалоговое окно, заменяющее окно MessageBox и предназначенное для выдачи запроса пользователю о необходимости сохранения документа в приложении SimpleNotepad. Т.е. мы заменим стандартное окно Сохранение документа, показанное на рис. 5-2, своим собственным модальным диалоговым окном.

Создание новой формы

Прежде всего, добавьте в проект новую форму. Для этого щелкните правой клавишей мыши строку названия проекта SimpleNotepad в окне Solution Explorer. Затем выберите из меню Add строку Add Windows Form (рис. 4-30). На экране появится окно Add New Item, показанное на рис. 4-31. В правой части этого окна, содержащей значки шаблонов, будет выделен шаблон Windows Form.

Введите в поле Name строку SaveDocumentNeededForm.cs, а затем щелкните кнопку Open. В результате к проекту будет добавлена новая форма, а также новый класс SaveDocumentNeededForm.

Отредактируйте эту форму, добавив в нее графическое изображение, текст с предупреждением о необходимости сохранения документа, а также кнопки Да, Нет и Отменить (рис. 5-3).

Рис. 5-3. Форма Сохранение документа

Чтобы форма вела себя как стандартное модальное диалоговое окно ОС Microsoft Windows, необходимо настроить некоторые ее свойства. Проведите настройку в соответствии с табл. 5-6.

Таблица 5-6. Настройка свойств формы SaveDocumentNeededForm

Свойство Значение
FormBorderStyle FixedDialog
StartPosition CenterParent
ControlBox false
MinimizeBox false
MaximizeBox false
ShowInTaskbar false
Text About SimpleNotepad
CancelButton buttonCancel
AcceptButton buttonYes

 

Почти все эти настройки мы уже использовали для диалогового окна About SimpleNotepad (рис. 4-32). Это окно мы создавали в предыдущей главе для отображения информации о приложении SimpleNotepad.

Здесь добавилась только две настройки — мы присвоили свойству CancelButton идентификатор кнопки Отменить, а свойтсву AcceptButton — идентификатор кнопки Да.

В результате наше диалоговое окно можно будет закрыть при помощи клавиши Esc. Кроме того, нажатие клавиши Enter на клавиатуре будет эквивалентно щелчку мышью кнопки Да. Настройте эти свойства подобным образом и для упомянутого выше диалогового окна About SimpleNotepad.

Заметим, что свойству CancelButton можно присвоить не только идентификатор кнопки, но и также идентификатор любого объекта, реализующего интерфейс IButtonControl, в частности, элемент управления LinkLabel.

При добавлении в форму кнопок, а также других элементов управления и компонентов, дизайнер форм автоматически создает для них идентификаторы.

В предыдущей главе для удобства работы с исходным текстом приложения мы меняли идентификаторы строк меню. Сейчас мы поменяем идентификаторы кнопок.

Для этого отредактируйте свойство кнопок Name. Установите значение этого свойства для кнопки Да, равным buttonYes, а для кнопок Нет и Отменить — равным buttonNo и buttonCancel, соответственно.

Создание обработчиков событий

Далее создайте для всех кнопок обработчики событий, а затем измените их следующим образом:

private void buttonYes_Click(object sender, System.EventArgs e)
{
DialogResult = DialogResult.Yes;
}

private void buttonNo_Click(object sender, System.EventArgs e)
{
DialogResult = DialogResult.No;
}

private void buttonCancel_Click(object sender, System.EventArgs e)
{
DialogResult = DialogResult.Cancel;
}

Действия, выполняемые этими обработчиками событий, на первый взгляд не очевидны. Расскажем о том, что же здесь происходит.

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

Отображение формы

Итак, мы добавили к проекту приложения SimpleNotepad новую форму и настроили ее должным образом. Теперь измените исходный текст методов MenuFileNew, MenuFileOpen и menuFileExit_Click.

Ниже мы привели новый исходный текст метода MenuFileNew:

private void MenuFileNew()
{
if(m_DocumentChanged)
{
SaveDocumentNeededForm dialog = new SaveDocumentNeededForm();
DialogResult result = dialog.ShowDialog();

switch(result)
{
case DialogResult.Yes:
{
MenuFileSaveAs();
break;
}
case DialogResult.Cancel:
{
return;
}
}
}

richTextBox1.Clear();
statusBarPanel2.Text = " ";
m_DocumentChanged = false;
}

По сравнению с предыдущим вариантом этого метода мы заменили вызов метода MessageBox.Show следующими строками, отображающими на экране диалоговое окно Сохранение документа, показанное на рис. 5-3:

SaveDocumentNeededForm dialog = new SaveDocumentNeededForm();
DialogResult result = dialog.ShowDialog();

Обратите внимание, что значение, возвращенное методом dialog.ShowDialog, сохраняется в переменной result и используется в дальнейшем для определения кнопки, которую щелкнул пользователь в окне Сохранение документа.

Метод dialog.ShowDialog вернет то самое значение, которое обработчик событий нажатой кнопки записал в свойство DialogResult формы SaveDocumentNeededForm.

Аналогичные изменения Вам нужно внести в исходный текст методов MenuFileOpen и menuFileExit_Click.

Альтернативный способ передачи информации из формы

Мы только что рассмотрели способ передачи в вызывающую программу информации о том, какой кнопкой пользователь завершил работу диалогового окна, основанный на создании обработчиков событий. Однако существует и еще один, более простой способ.

Удалите из исходного текста формы SaveDocumentNeededForm обработчики событий от кнопок, добавленные на предыдущем этапе. О том, как это правильно делать, мы рассказали в разделе «Удаление обработчика событий» 3 главы.

Далее отредактируйте свойство DialogResult кнопок Да, Нет и Отменить (рис. 5-4).

Рис. 5-4. Настройка свойства DialogResult для кнопки Да

Присвойте свойству DialogResult кнопке Да значение Yes, выбрав это значение из списка, показанного на рис. 5-4. Этому же самому свойству кнопок Нет и Отменить присвойте, соответственно, значения No и Cancel.

Когда пользователь щелкает одну из наших кнопок, значение свойства DialogResult щелкнутой кнопки будет присвоено свойству DialogResult диалогового окна, в котором эта кнопка расположена. В нашем случае это окно SaveDocumentNeededForm.

Заметим, что большинство кнопок, располагаемых в модальных диалоговых окнах, создается для того, чтобы закрыть это окно. В зависимости от того, какая кнопка была для этого использована, вызывающая программа предпринимает те или иные действия. Благодаря тому, что в классе Button, на базе которого создаются кнопки, предусмотрено свойство DialogResult, обработка событий от этих кнопок сильно упрощается. Фактически для этого Вам не нужно писать вручную ни одной строчки кода.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.