Вторник, 21.11.2017, 13:03
Приветствую Вас Гость | RSS

Лекции

Меню сайта
Форма входа
Категории раздела
ТАУ (Теория автоматического управления) [31]
лекции по ТАУ
Экология [151]
учебник
Бухгалтерский учет и налогообложение в строительстве [56]
Дементьев А.Ю. - Практическое пособие
Психология [104]
Пип
информатика [80]
с# Карли Ватсон
современные стулья [0]
новинки
Поиск
Главная » 2010 » Февраль » 11 » Использование диалоговых окон
00:35
Использование диалоговых окон
Использование диалоговых окон
В предыдущей главе мы узнали, каким образом можно реализовывать меню,
панели инструментов, SDI- и MDI-формы и т. д. Кроме того, мы знаем, как созда-
вать простые диалоговые окна, чтобы получать информацию от пользователя. Мы
также создали достаточно сложные диалоговые окна, чтобы запрашивать у пользо-
вателя более специфическую информацию. Однако для выполнения стандартных
операций, таких как открытие и сохранение файлов, вывод на печать, рекоменду-
ется использовать заранее созданный класс диалоговых окон. В этом случае не
только уменьшается объем кода, но и используются стандартные, хорошо всем
знакомые диалоговые окна Windows. В .NET Framework имеются классы, которые
позволяют использовать диалоговые окна Windows для открытия и сохранения
файлов, для вывода на принтер, а также для выбора цвета и шрифта. Их использо-
вание позволяет пользователю не изучать сложную методологию, что было бы со-
вершенно необходимым для кодирования таких функциональных возможностей
с "нуля".
В данной главе мы познакомимся с тем, каким образом можно использовать
стандартные классы диалоговых окон. Мы, в частности
• будем ИСПОЛЬЗОВатЬ КЛаССЫ OpenFileDialog И SaveFileDialog
• познакомимся с иерархией класса печати .NET и будем использовать
классы PrintDialog, PageSetupDialog И PrintPreviewDialog
дая печати и предварительного просмотра печатаемой информации
• рассмотрим использование КЛасСОВ FontDialog И ColorDialog
для изменения цвета и шрифта.
Диалоговые окна
Диалоговым называется окно, которое выводится в контексте другого окна. Мы
можем обратиться к пользователю с просьбой ввести какие-либо данные, прежде
чем продолжить выполнение программы. Общее диалоговое окно — это окно, ко-
торое часто используется для получения от пользователя наиболее распространен-
ной информации. Оно является частью операционной системы Windows.
Имеющиеся в .NET Framework классы диалоговых окон представлены на сле-
дующем рисунке. Все ОНИ — За исключением класса PrintPreviewDialog — ЯВЛЯ-
ЮТСЯ производными от абстрактного класса cominonDiaiog — базового класса,
в котором представлены методы управления общим диалоговым окном в Windows.
Использование диалоговых окоп 387
CommonDialog
FileDialog
OpenFileDialog
ColorDialog FrontDialog PageSetUpDialog PrintDialog
SaveFileDialog
Form
PrintPreviewDialog
Общие экземпляры
методов и событий
Описание
ShowDialog()
Reset()
HelpRequest
Этот метод реализуется
в производных классах для вывода
общего диалогового окна.
Каждый производный класс
диалогового окна реализует
метод Reset () для установки
значений по умолчанию для всех
свойств данного класса.
Это событие генерируется
в тот момент, когда пользователь
щелкает мышью на кнопке Help
общего диалогового окна.
В классе CommonDialog ОПИСаны мето-
ды и события (см. табл. слева), доступные
любому классу общего диалогового окна.
Все эти классы построены на основе
общего диалогового окна Windows с тем,
чтобы сделать его доступным для прило-
жений .NET. Исключением является
ОКНО PrintPreviewDialog, ПОСКОЛЬКУ ОНО
привносит свои собственные элементы
в Windows Form, предназначенные для
управления предварительным просмотром
печати, и, следовательно, реально данное
окно не является диалоговым. Классы
OpenFileDialog И SaveFileDialog ЯВЛЯ-
ЮТСЯ производными от базового абстракт-
ного класса FileDialog, который добавляет общие файловые характеристики ДДЯ
диалоговых окон при открытии и сохранении файлов.
Эти диалоговые окна могут быть использованы:
• Для предоставления пользователю возможности искать и выбирать
фаЙЛЫ ДЛЯ ОТКРЫТИЯ ИСПОЛЬЗуеТСЯ Диалоговое ОКНО OpenFileDialog,
которое может быть настроено так, чтобы открывать либо один,
либо несколько файлов.
• С помощью диалогового окна SaveFileDialog пользователь может
задавать имя сохраняемого файла и осуществлять поиск директории,
в которой этот файл должен быть сохранен.
• Диалоговое окно PrintDialog используется для выбора принтера
и задания опций, использующихся при печати.
• Диалоговое ОКНО PageSetupDialog обычно ИСПОЛЬЗуеТСЯ
для определения параметров полей страницы.
• Диалоговое ОКНО PrintPreviewDialog ПОЗВОЛЯеТ ОСущеСТВЛЯТЬ
предварительный просмотр выводимой на печать информации на экране
с предоставлением некоторых дополнительных возможностей, например
увеличение просматриваемой информации.
• Диалог FontDiaiog выдает список всех инсталлированных в Windows
шрифтов вместе со стилями и размерами, а также позволяет
осуществлять предварительный просмотр выбранного шрифта.
• Класс ColorDialog упрощает выбор необходимого цвета.
388 Глава 15
Автору приходилось встречаться с приложениями,
разработанными в одной и той же компании, в которых
не предполагалось не только повторное использование
стандартных общих диалоговых окон, но и какое-либо общее
руководство по стилю создаваемых окон. Разработка таких
диалоговых окон не приводила к получению стройного набора
функциональных возможностей, а некоторые окна и кнопки
располагались в различных местах, например, менялись
местами кнопки Cancel и ОК.
Иногда такая непоследовательность может быть
обнаружена даже в рамках одного и того же приложения.
Это препятствует нормальной работе пользователя
и увеличивает время, необходимое для выполнения задачи.
Будьте последовательны при создании и использовании диалоговых окон! Этого
можно добиться за счет применения общих диалоговых окон, а они используются
во многих приложениях, в том числе и в тех-, которые уже знакомы пользователю.
Использование диалоговых окон
ПОСКОЛЬКУ ДЛЯ Всех КЛасСОВ Диалога баЗОВЫМ КЛаССОМ ЯВЛЯетСЯ CommonDialog,
то все классы диалога могут использоваться аналогичным образом. showDiaiogO
и Reset() являются экземплярами общих методов. Метод ShowDiaiogO вызывает
защищенный экземпляр метода RunDiaiogO для вывода диалога и по окончании
работы возвращает экземпляр DiaiogResult, в котором содержится информация
о том, какие действия предпринимал пользователь в процессе диалога. С другой
стороны, метод Reset о присваивает всем свойствам диалога значения, использую-
щиеся по умолчанию.
Приведенный ниже фрагмент кода демонстрирует пример использования класса
диалога. Ниже каждый из этих шагов будет рассмотрен более подробно, а пока по-
знакомимся с общей концепцией использования диалогов.
Из данного фрагмента программы вытекает, что:
• Сначала создается новый экземпляр класса диалога.
• Затем необходимо присвоить значения некоторым свойствам,
для того чтобы разрешить/запретить использование дополнительных
возможностей и определить состояние диалога. В данном случае
свойству Title присваивается значение "Sample",
а флажку ShowReadOnly — true.
• После ЭТОГО ВЫЗЫВаеТСЯ метод ShowDiaiogO, ВЫВОДЯЩИЙ
диалоговое окно, которое переходит в режим ожидания и реагирует
на вводимую пользователем информацию.
• В тот момент, когда пользователь нажимает кнопку ОК, диалоговое окно
закрывается; проверка на нажатую кнопку ОК осуществляется путем
Сравнения результата диалога СО СВОЙСТВОМ DiaiogResult.ОК.
После этого можно получить доступ к значениям, введенным
пользователем, обратившись к значению определенных свойств.
В данном случае мы сохраняем значение свойства FileName
В переменной f ileName!
Использование диалоговых окон 389
OpenFiieDiaiog dig = new OpenFiieDiaiog();
dig.Title = "Sample";
dlg.ShowReadOnly.- true;
if (dig.ShowDiaiogO == DialogResult.OK)
string fileName = dlg.FileName;
У каждого диалогового окна есть свои собственные настраиваемые возможно-
сти, которые будут рассматриваться в последующих разделах.
Использовать диалог в приложении Windows Forms оказывается даже проще,
чем написать несколько-строк кода. Программа создания Windows Forms сама
генерирует код, ответственный за создание нового экземпляра и присваивание
значений свойствам; нужно лишь вызвать метод ShowDiaiogO, а затем запросить
измененные значения.
Диалоговые окна для работы с файлами
Диалоговые окна для работы с файлами позволяют пользователю выбрать со-
ответствующее устройство и найти в файловой системе необходимый файл. Все,
что для этого требуется,— получить от пользователя имя файла.
С помощью диалогового окна OpenFiieDiaiog можно определить имя файла,
который необходимо открыть, а используя окно SaveFileDialog — задать имя, под
которым файл должен быть сохранен. Эти классы диалога очень похожи друг на
друга, поскольку являются производными одного и того же абстрактного базового
класса, хотя у каждого из этих классов имеется ряд присущих только одному из
них свойств. В настоящем разделе мы сначала познакомимся с возможностями
диалогового окна OpenFiieDiaiog, а затем узнаем, чем отличается от него окно
SaveFileDialog. Потом создадим пример приложения, в котором будут использова-
ны оба этих диалоговых окна.
OpenFiieDiaiog
Класс OpenFiieDiaiog позволяет выбирать имя открываемого файла. Перед тем
как вызывать метод ShowDiaiogO, сначала необходимо создать новый экземпляр
класса OpenFiieDiaiog.
OpenFiieDiaiog dig = new OpenFiieDiaiog{) ; .• : •
ShowDialog{);
Выполнение программы, состоящей
из этих двух строк кода, приведет к по-
явлению на экране диалогового окна,
представленного на рисунке слева.
Перед ВЫЗОВОМ метода ShowDialog ()
есть возможность задать значения не-
которых свойств, которые будут оказы-
вать влияние на поведение и внешний
вид диалогового окна либо налагать
ограничения на файлы, которые могут
быть открыты. В последующих разде-
лах рассматриваются возможные моди-
фикации.
390 Глава 15
При применении OpenFiieDialog в консольных приложениях необходимо исполь-
зовать ссылку на модуль System.windows.Forms и включить пространство имен
System.windows.Forms. Для приложений Windows Forms, которые созданы в Visual
Studio.NET, это уже сделано программой-мастером в процессе создания.
Заголовок диалогового окна
В качестве заголовка окна OpenFiieDialog по умолчанию используется слово
Open (открытие). Заголовок диалога может быть изменен, для чего необходимо
присвоить соответствующее значение свойству Title. Слово Open не всегда явля-
ется самым лучшим вариантом названия, например для приложения, в котором не-
обходимо проанализировать файлы регистрации с целью извлечения из них
какой-либо информации или определения размера файла и которое закрывает
файл непосредственно сразу после выполнения необходимых действий. В таких
случаях файлы не остаются открытыми для пользователя, поэтому название вроде
Analize Files (анализ файлов) может оказаться более подходящим. Так, например,
в самой программе Visual Studio.NET есть несколько различных названий для диа-
логового окна открытия файла, чтобы дифференцировать типы открываемых фай-
лов: Open Project (открытие проекта), Open File (открытие файла), Open Solution
(открытие решения) и Open File from Web (открытие файла из Интернета).
Следующий фрагмент программы демонстрирует, каким образом можно при-
своить диалоговому окну новый заголовок.
OpenFiieDialog dig = new OpenFiieDialogО;
dig.Title =.*0pen File";
dig.ShowDialog();
Задание директорий
По умолчанию диалог открывает директорию, которая открывалась пользовате-
лем, когда он в последний раз запускал приложение, и выводит хранящиеся в этой
директории файлы. Это поведение может быть изменено посредством задания
СВОЙСТВа InitialDirectory. По умолчанию В качестве Значения СВОЙСТВа I n i t i a l -
Directory используется пустая строка, которая соответствует директории пользо-
вателя му Documents, выводящейся при самом первом обращении к диалоговому
окну в данном приложении. При втором обращении к диалоговому окну будет вы-
водиться та же директория, в которой находится последний открывавшийся файл.
Общее диалоговое окно Windows, которое используется окном OpenFiieDialog,
применяет реестр для хранения имени последнего открывавшегося файла.
Такое Поведение МОЖет быть Изменено присвоением СВОЙСТВа InitialDirectory
строке, содержащей имя директории, перед обращением к методу ShowDialog ().
В приложениях никогда не следует использовать строку с именем директории,
"зашитую" в программу, поскольку такая директория в системе пользователя мо-
жет отсутствовать. Для получения доступа к специальным системным папкам можно
ВОСПОЛЬЗОВатЬСЯ Статическим методом GetFolderPath () класса System. Environment.
Метод GetFolderPath () принимает параметр перечиСЛИМОГО ТИПа Environment. SpecialFolder,
в котором можно задать системную директорию, путь к которой необ-
ходимо получить.
В следующем примере в качестве начальной директории используется обычная
директория пользователя, предназначенная для хранения шаблонов:
string dir =
Environment.GetFolderPath(Environment.SpecialFolder.Templates);
dig.InitialDirectory = dir;
Использование диалоговых окоп 391
Задание фильтра для файлов
Фильтр для файлов определяет типы файлов, которые пользователь может вы-
бирать для открытия. Строка простого фильтра для файлов выглядит следующим
образом:
Text Documents (*.txt) |*.txt|All Files I*.*
file пат:
Word for Windows ("doc)
WbdowsWiite
Text Documents [\Ы]
Text Dccumem • MS-DOS' Formal f.M)
Unicode Text Docu*ften& {"My
Этот фильтр используется для вывода вхождений
в окне со списком Files of Type:. Microsoft WordPad
выводит эти вхождения (см. рис. слева).
Фильтр состоит из нескольких отделов, разделен-
ных вертикальной чертой (|). Он может состоять только
из парных строк, поэтому число отделов всегда должно
быть четным. Первая строка определяет текст, кото-
рый будет выводиться в окне со списком; вторая стро-
ка используется для задания расширений файлов,
которые будут выводиться в процессе диалога. Строке фильтра присваивается
свойство Filter, как это показано в примере программы, приведенном ниже:
dig.Filter = "Text Documents (*.txt)l*.txt|All Files!*,*";
Присваивание неверного значения свойству Filter приведет к возникновению
Исключительной Ситуации Типа System. Argument Except ion, При ЭТОМ будет ВЫДаНО
следующее сообщение об ошибке: The provided filter string is invalid (Заданная строка
фильтра является недопустимой). Пробелы перед или после строки фильтра также
являются недопустимыми.
Свойство Filterindex определяет выбор по умолчанию в окне со списком.
В случае WordPad по умолчанию используется Rich Text Format (текстовый фор-
мат с богатыми возможностями), которому соответствует расширение *.rtf, как
показано в выделенной строке на приведенном выше рисунке. Этот формат трудно
читать, поэтому для просмотра следует открыть WordPad. Если есть возможность
ВЫбОра ИЗ НеСКОЛЬКИХ ТИПОВ фаЙЛОВ, ТО МОЖНО ПрИСВОИТЬ СВОЙСТВО F i l t e r i n d e x
тому тип файла, который используется по умолчанию. Обратите внимание на то,
что Filterindex отсчитывается с 1!
Проверка допустимости
В диалоговом окне openFiieDialog могут автоматически выполняться опреде-
ленные проверки допустимости файла, до того как вы попытаетесь его открыть.
Имя файла, введенное пользователем, может быть проверено с помощью vaiidateNames
на предмет того, является ли оно допустимым в Windows именем файла.
Нажатие в диалоге кнопки ОК с недопустимым именем файла приведет к выводу
изображенного ниже сообщения, и пользователь будет лишен возможности выйти
из диалога openFiieDialog, не скорректировав имя файла. Недопустимое имя фай-
ла — это имя, в котором содержатся недопустимые символы, например \\,/ или :.
Ввод недопустимого имени файла приведет к появлению сооб-
щения об ошибке: "The above file name is invalid." (Указанное
выше имя файла недопустимо.) (см. рис. справа).
Существуют два свойства, предназначенные для осуществления
Дополнительной проверки ДОПУСТИМОСТИ,— CheckFileExists И
CheckPathExists. С ПОМОЩЬЮ CheckPathExists проверяется ДОПус-
тимость заданного пути, a CheckFileExists проверяет наличие
392 Глава 15
заданного файла. Если указанного файла не существует,
то при нажатии кнопки ОК на экран будет выведено со-
общение: "Please verify that the correct name was given."
(Пожалуйста, убедитесь в том, что задано правильное
имя файла.) (см. рис. слева).
По умолчанию все эти три свойства имеют значение
true, то есть проверка допустимости выполняется авто-
матически.
Help
Диалоговое окно OpenFiieDiaiog поддерживает использование кнопки Help, ко-
торая по умолчанию является невидимой. Присвоив свойству showHelp значение
true, можно сделать кнопку Help видимой, кроме того, это даст возможность доба-
вить обработчик событий HeipRequest, с помощью которого можно будет выводить
вспомогательную информацию пользователю.
Результаты
Метод showDiaiogO класса OpenFiieDiaiog возвращает результат в виде пере-
числимого типа DiaiogResult. В перечислимом типе DiaiogResuit определены сле-
дующие допустимые Значения: Abort, Cancel, Ignore, No, None, OK, Retry И Yes.
None — это значение, используемое по умолчанию до тех пор, пока пользователь
не закрыл диалог. Возвращаемый результат будет зависеть от того, какую кнопку
нажал пользователь. В диалоговом окне OpenFiieDiaiog могут быть возвращены
ТОЛЬКО значения DiaiogResult.OK и DiaiogResult.Cancel.
Если пользователь нажал кнопку ОК, то доступ к выбранному пользователем
имени файла можно получить посредством свойства FileName. Если пользователь
отменил диалог, то свойство FileName будет содержать пустую строку. Если значе-
ние свойства MultiSelect равно true (что означает, что пользователю предостав-
лена возможность выбирать более одного файла), то доступ ко всем выбранным
файлам можно получить с помощью свойства FileName, которое в этом случае воз-
вращает массив строк.
Небольшой фрагмент кода демонстрирует, каким образом можно извлечь не-
сколько имен фаЙЛОВ ИЗ диалога OpenFiieDiaiog:
OpenFiieDiaiog dig = new OpenFiieDiaiog();
dig.MultiSelect = true;
if (dig.ShowDiaiogO == DiaiogResult .OK)
{ . '. '/• ' ,;':
foreach (string s in dlg.FileNames)
' " • ' y ( • • : ' • . . • : , • . ; • • ; • ' : - . ' • • . ' • ' • - - : • • • • - ' . • •'• ' • • " •'•'••••••'•• • '• • " . • • ' • • • • • • . , •
Console.WriteLine(s); ;
} •
} • I . ! i i ШШШШШШШШйШШШ ШЙ • • Ш • I Ш-;
Метод ShowDiaiogO отрывает диалоговое окно. Свойству MultiSelect присваи-
вается значение true, что означает, что у пользователя имеется возможность вы-
бирать сразу несколько файлов. Нажатие кнопки ОК приводит к завершению диалога,
если все идет нормально, при этом возвращается значение DiaiogResult.ок.
С помощью оператора foreach мы проходим по всем строкам, которые находятся
в массиве строк, хранящемся в свойстве FileName, и выводим на экран каждый
выбранный файл.
Использование диалоговых окон 393
Свойства диалогового окна OpenFileDialog
На следующем рисунке показано диалоговое окно OpenFileDialog, изображен-
ное со всеми возможными свойствами, разрешающими использование соответст-
вующих элементов окна. По этому рисунку очень просто разобраться, какие
свойства оказывают влияние на какие элементы пользовательского интерфейса:
Title (Заголовок)
initialDirectory (Начальная директория)
MulUSetect (Множественный выбор)
Filename (Имя файла)
ShowHolp (Вывод помощи)
Filter, Filterlndex (Фильтр и его индекс)
ShowReadOnly, ReadOnfyChecked (Открытиефайла в режиме "только для чтения")
Практикум: создание приложения Windows
&.L'£J.?';':.'
Project Types: (ив
\Л| Visual C# Projects
Hj \ is-U'C-rt Pr ojacts
CJ Setup $rxi Deployntcnt P»фен
*] Zj Other Projects
Qj viswai Studio SokAiefts-.
Class Library Windows ;|
Control library ;:
j A project for craatirsg ^ ^>lus^on wfcb
ASP.NET Web А5РЖТ Web Web Control
Appfcabon Serviice Lbr«ry
user interface
Location:
Г Add to
Project wil
Provse..
[STAThread]
static void Main()
1. Чтобы иметь возможность
использовать диалоговые окна
открытия и сохранения файлов,
мы создадим простое приложение
Windows SimpleEditor В Окне,
представленном слева.
2. Переименуйте сгенерированную
форму ИЗ Forml.cs В SimpleForm.cs,
а КЛаСС Forml — В SimpleEditorForm.
Кроме того, следует заменить
пространство имен на Wrox.Editor.
При изменении имени класса
также необходимо изменить
реализацию метода Main (), с тем
чтобы учесть данное изменение,
поскольку изменение значения
свойства Property не влечет
за собой автоматического
изменения этого метода:
Application.Run(new SimpleEditorForm());
394 Глава 15
3. Присвойте СВОЙСТВУ Text формы Значение 'Simple.
Editor*. В качестве области, в которой будет
осуществляться чтение и внесение изменений в файл,
мы будем использовать многострочное окно, поэтому
возьмите форму Textbox с панели инструментов
и добавьте ее в программу разработки Windows Forms.
Эта форма должна быть многострочной и занимать
всю область, отведенную приложению, поэтому
соответствующим свойствам следует присвоить значения,
сведенные в таблицу справа.
Свойство
(Name)
Text
MultiLine
Dock
ScrollBars
AcceptsReturn
AcceptsTab
Значение
textBoxEdit
<пусто>
True
Fill
Both
True
True
zl
4. Затем следует добавить в приложение
MainMenu. В основном меню должно
иметься вхождение File, в котором
должны быть следующие субменю —
New, Open, Save и Save As,
как показано на рисунке слева.
Чтобы сделать код более удобным для
чтения, замените имена на приведенные
в нижеследующей таблице. Свойство Text
будет выводиться в меню. Символ &
указывает на то, что следующий за ним
Название
пункта меню
miFile
miFileNew
miFileOpen
miFileSave
miFileSaveAs
Текст
&File
&New
&Open...
&Save
Save &As...
символ будет подчеркнут, и для обращения к данному элементу
меню при использовании клавиатуры допускается одновременное
нажатие подчеркнутого символа с клавишей <Alt>.
Многоточие, присутствующее в свойстве Text вхождений
Open и Save As, означает, что у пользователя до выполнения
каких-либо действий будут запрашиваться дополнительные
данные с помощью некоторого диалога. При обращении
к меню File, New и Save все действия будут выполняться
без какого-либо дополнительного вмешательства.
Как только будет набран текст вхождения основного меню &File,
под ним будет открыто субменю, в которое можно вводить
его вхождения с помощью окна Туре Неге.
Почерпнуть дополнительную информацию о работе с меню
можно в главе 14.
5. Обработчик для вхождения меню &New должен удалять все данные,
находящиеся в текстовом окне посредством вызова метода clear о
управляющего Элемента Textbox:
private void miFileNew_Click(object sender. System.EventArgs e)
fileName = "Untitled*;
textBoxEdit.Clear();
Использование диалоговых окоп 395
6. Кроме того, переменная fileName должна получить значение "Untitied*
Необходимо объявить и инициализировать эту переменную
В классе SimpleEditorForm:
private string fileName = "Untitled";
В меню Open нам потребуется выводить диалог открытия файлов,
к созданию которого мы сейчас и приступим.
Практикум: считывание файла
Существует возможность передавать приложению simpieEditor имя файла
в качестве аргумента в момент запуска приложения. Передаваемое имя файла бу-
дет использоваться для открытия соответствующего файла и вывода его в тексто-
вом окне.
1. Внесите следующие изменения в реализацию метода MainO,
позволяющие передавать ему имя файла в качестве параметра:
[STATread]
static void Main(string[] args)
{ .... . ............. _ ... . ....
string fileName = null;
if (args.Length 1= 0)
fileName = args[0];
Application.Run(new SimpleEditorForm(fileName));
}
2. Теперь необходимо изменить реализацию конструктора
SimpleEditorForm, чтобы ПОЛуЧИТЬ ВОЗМОЖНОСТЬ
использовать строку:
public SirnpleEditorForm(string fileName)
{
//
// Необходимо для поддержки Windows Form Designer
//
InitializeComponent();
if (fileName 1= null)
{
this.fileName = fileName;
OpenFiieO;
3. Нам также потребуется реализовать метод OpenFiieO, который
будет открывать файл и заполнять текстовое окно данными,
взятыми из этого файла:
protected void OpenFiieO
try
С
using (;StreamReader reader = File.OpenText (fileName))
{
textBoxEdit.Clear();
textBoxEdit.Text = • reader, ReadToEnd.O ;
396 Глава 15
catch (IOException ex)
{ .::.,••:•., ., • .
MessageBox.Show(ex.Message,.*Simple Editor",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
В данном случае для считывания файла используются
КЛаССЫ StreamReader U File. ДЛЯ того чтобы иСПОЛЬЗОваШЬ
эти классы и не указывать каждый раз пространство имен,
в самое начало программы следует добавить
оператор using System. IO.
ISsimple Editor
File Forma*
using System.Refiedion;
using System.Runtime.CompitefS erviow;
// General Information about an assembly is controlled through the following
// set oi attributes. Change these attribute values to modify the information
// associated with an assembly.
//
[assembly: Assembly! itlefH '}]
[assembly: Assembly D escr iptbnf"')]
[assembly; AssembjyCorrfiguralron(""fl
[[ by l A b Cyfp"y"f]] ]
[dssernbly: AssembtyPfoductf Hi|]
•assembfy: As$emblyCopyright(M")3
[assemb^: AssembfyTiademaf kf" ]|
[assembly; Assembly Cultu i e('"'}]
4. Теперь можно запустить
приложение из командной
строки, передав ему имя файла.
Этот файл будет немедленно
открыт и выведен в текстовом
окне, как это показано
на рисунке слева.
Как это работает
Включив в число параметров мето-
да Main о параметр stringt], мы полу-
чаем возможность использовать любые
аргументы командной строки, задавае-
мые пользователем при запуске прило-
жения:
static void Main(string!] args)
В методе Main о нами осуществляется проверка на предмет наличия передан-
ных аргументов с помощью свойства Length. Если обнаруживается, что какие-либо
аргументы были переданы, то первый аргумент присваивается переменной fileName,
КОТОрая ИСПОЛЬЗуеТСЯ ДЛЯ Передачи еГО КОНСТруКТОру формы SimpleEditorForm:
s t r i n g fileName = n u l l ;
if (args.Length != 0)
fileName = args[0];
Application.Run(new SimpleEditorForm(fileName));
Как сказано в главе 7', в Visual Studio.NET существует также
возможность описывать параметры командной строки для
целей отладки. В Solution Explorer для этого следует просто
выбрать проект, а затем обратиться к меню Project \ Properties.
Если вы выберете Configuration Properties | Debugging в левом
дереве диалога, выведенном под раскрываемыми окнами,
то вы сможете вводить аргументы командной строки
(см. след. рис.).
В конструкторе SimpleEditorForm мы осуществляем проверку, обладает ли из-
начально переменная с именем файла каким-либо значением. Если да, то оно при-
сваивается переменной fileName, после чего для открытия файла осуществляется
ВЫЗОВ метода OpenFileO. Мы ИСПОЛЬЗуем ВЫЗОВ ОТДеЛЬНОГО Метода OpenFileO,
Использование диалоговых окон 397
|Simple£dftor Property Pag»
i
I-
ДОиМк» lAcKveCDebL,)
Q Согшоп Properties
|£3 Coftfkjurafcion Proper ties я
Advanced
1
d PJatform: |AcKv,(
. Erwbks Ai"F Debjfjgflg
( Enable ASP.WET Cubu^gJhg
• cnabb ип.'л*г«дес1 Oebeggmg
1 бпзЫе SOL Server Debugging
• Debug Ыойе
Z^a-i AppkaUon
S*d^t URL
- S'rarfcPage
tvt<'c\ s ui>s Internet ExpSors?
NET;
False
False
Project:
False
Command Line Argun«enls
«Av^Jabla y*h№ the Debug Mode (s s^: tQ^t^fc 4
OK 1
" " 3 Configuration Mo'
A/hen ryorvk^i the pfog^in.
project or зп'оррЬсаЙогк,
f
Help |
а не выполняем открытие файла и заполнение текстового окна непосредственно
в самом конструкторе класса, поскольку метод OpenFileO может быть использо-
ван и в других частях программы.
if (fileNarae 1= null}
.£-.•
this.fileName= fileName;
OpenFileO ;
В методе OpenFileO для открытия файла и получения возвращаемого класса
streamReader используется статический метод openTexto класса File. Получен-
ный класс streamReader далее используется ддя чтения файла посредством метода
ReadToEnd (), который загружает текст в виде строки и передает ее объекту Textbox.
После завершения использования класса streamReader его необходимо закрыть,
для того чтобы освободить управляемые и неуправляемые ресурсы. Этого можно
добиться с помощью оператора using, который вызывает метод Dispose о в конце
блока, а метод DisposeO, реализованный в классе streamReader, обращается к ме-
тоду close (), который осуществляет закрытие файла:
using (StreamReader reader = File.OpenText(fileName))
textBoxEdit.Clear();
textBoxEdit.Text = reader.ReadToEnd();
Поскольку выполнение операций с файлами запросто может приводить к воз-
никновению исключительных ситуаций, например, если у пользователя отсутствуют
необходимые права доступа к данному файлу или такого файла вообще не сущест-
вует, то весь код заключается внутрь блока try. В случае возникновения какой-
либо исключительной ситуации, связанной с вводом/выводом, на экран выводится
сообщение, информирующее пользователя о возникшей проблеме, но работа са-
мого приложения при этом не прерывается:
398 Глава 15
t r y
catch (IOException ex)
MessageBox.Show(ex.Message, "Simple Editor",
MessageBoxButtons.QK, MessageBoxIcon.Exclamation);
Если при запуске приложения будет
введено несуществующее имя файла, то
это приведет к появлению сообщения,
представленного на рисунке слева.
Практикум: добавление диалога открытия файлов
Теперь у нас имеется возможность считывать файлы с помощью простого ре-
дактора, передавая имя файла при запуске приложения. Но мы предпочитаем ис-
пользовать класс общего диалога — следующий класс, который мы собираемся
добавить к приложению.
1. В окне с инструментами, которое используется в Windows Forms,
можно обнаружить компонент OpenFiieDiaiog. Добавьте этот компонент
к программе разработки Windows Forms. При этом должны быть
изменены всего лишь три свойства: в качестве имени экземпляра
будет использоваться dlgopen, свойство Filter присваивается
приведенной ниже строке, а свойству Filterindex в качестве
значения присваивается 2, что приводит к выбору по умолчанию
документов Wrox:
Text Documents (*.txt)|*.txt| Wrox Documents
(*.wroxtext) l*.wroxtext I All Files I*.*.
Как это работает
При добавлении программой разработки Windows Forms компонента OpenFiie-
Diaiog в класс simpieEditorForm включается новый частный элемент:
public class SimpieEditorForm : System.Windows.Forms.Form
private System.Windows.Forms.TextBox textBoxEdit;
private System.Windows.Forms.Menultem miFile;
private System.Windows.Forms.Menultem miFileNew;
private System. Windows. Forms .Menultem miFileOpen;
private System.Windows.Forms.Menultem miFileSave;
private System.Windows.Forms.Menultem miFileSaveAs;
private System.Windows.Forms.MainMenu mainMenu;
private System.Windows.Forms.OpenFiieDiaiog dlgOpenFile;
В части кода, которая генерируется программой разработки Windows Forms,
точнее, В методе InitializeComponentO, Создается НОВЫЙ Экземпляр класса Open-
FiieDiaiog и присваиваются значения указанным свойствам. Для того чтобы уви-
деть следующий код в редакторе, необходимо сначала щелкнуть мышью на
символе +., расположенном в строке Windows Forms Designer generated code, а за-
тем на символе + , в строке private void InitializeComponentO:
Использование диалоговых окон 399
private void InitializeComponent()
{
this. textBoxEdit = new Sy stem. Windows. Forms. Text Box () ;
this. mainMenu = new System. Windows. Forms. MainMenu () ;
this.miFile = new Sy stem. Windows. Forms. Menult em () ;
this.miFileNew = new System. Windows. Forms. Menult em();
this.miFileOpen = new Sy stem. Windows. Forms. Menul t em( );
this.miFileSave = new Sys tern. Windows. Forms. Menul tem();
this.miFileSa.veAs = new System. Windows. Forms. Menul ternЦ;
this.dlgOpenFile = new System.Windows.Forms.OpenFileDiaiog{)
// dlgOpenFile
//
this.dlgOpenFile.Filter =
"Text Documents {*.txt) I *.txtI Wrox Documents
(*.wroxtext) f*.wroxtext|All Files I*.*";
this.dlgOpenFile.FilterIndex = 2;
С помощью программы разработки Windows Forms мы создали новый экземп-
ляр класса OpenFileDiaiog и определили значения свойств. Теперь нам необходи-
мо вывести диалог.
Практикум: вывод диалога OpenFileDiaiog
Добавьте обработчик событий "щелчок мышью" для вхождения меню Open,
в котором мы будем выводить диалог и считывать выбранный файл, посредством
следующего кода:
private void miFileOpen_Click(object sender, System.EventArgs e)
if (dlgOpenFile.ShowDialogO == DialogResult.OK)
fileName = dlgOpenFile.FileName;
OpenFile(); :
Как это работает
Метод ShowDialogO выводит на экран диалог открытия файла и возвращает
информацию о том, какая кнопка была нажата пользователем при выходе из него.
Именно по этой причине мы производим сравнение с DialogResult.ок в операто-
ре if. Если пользователь просто отменил диалог, мы не предпринимаем никаких
действий:
if (dlgOpenFile.ShowDialogO == DialogResult.OK)
i ' - • " 1 i ' I •'• II и ШШшЁм.
Затем мы получаем выбранное имя файла, обратившись к свойству FileName
Класса OpenFileDiaiog, И присваиваем ЭТО Значение Переменной fileName. ЭТО ТО
самое значение, которое далее используется методом OpenFiieO. Можно было бы
открыть файл и непосредственно с помощью класса OpenFileDiaiog, осуществив
вызов dlgOpenFile.OpenFiieO, который также возвращает объект stream, однако
поскольку в нашем распоряжении уже имеется метод OpenFiieO, который откры-
вает и считывает файл, то мы используем именно его:
OpenFiieO ;
400 Глава 15
Практикум: запуск простого редактора
1. Теперь есть возможность запустить
простой редактор (см. рис. справа).
На настоящий момент в нем будут
функционировать только вхождения
New и Open.... Вхождения Save
и Save As... будут реализованы
в следующем разделе.
При выборе вхождения меню File | Open
ПРОИСХОДИТ ВЫВОД диалога OpenFileDialog,
и мы получаем возможность выбрать не-
обходимый файл. Мы исходим из предпо-
ложения, что на вашем компьютере нет
_ _ _ _ _ -,. 1 .
!;
1
I
1;
ш
I
i |
Si
K ' • • • - • ' \
i d -
. - . < • . . . . • . ' j
файлов с расширением .wroxtext. Мы пока
еще не умеем сохранять файлы, поэтому
для ведения диалога с редактором вы мо-
жете использовать файл с каким-либо дру-
гим расширением, либо предварительно
скопировать произвольный текстовый файл
в файл с расширением .wroxtext. Восполь-
зуйтесь диалоговым окном, показанным на
рисунке слева.
Выбрав текстовый файл и нажав кнопку
Open, мы увидим его текст в текстовом
окне диалога.
Автор в качестве примера выбрал
расположенный на своей локальной
системе файл GlobalKnowledge.txt,
как показано на приведенном справа
рисунке.
На настоящий момент мы научились
считывать уже существующие файлы.
Теперь стоит научиться создавать но-
вые файлы и вносить изменения в уже
существующие. Для решения данной
задачи мы воспользуемся диалоговым
ОКНОМ SaveFileDialog.
Диалоговое окно
SaveFileDialog
AFobuonudte dGol inba l1 9K3n5o. wGeloldbgeal Knoweldge, Inc. is the wordls' alrgest nidependent IaT endudca htoin 1 5nite algnragtuoar,ge osf.fe rnGigolb malo Kreno thwaelndg e7s00 bel cnoduersdes IT in ed mucoaretoin th asonult oi2n0s c cooumntrbeinise vceunrdrcioural «,a udtheovilerzieredd a tnhdro upgrohpre ithtaery rgi hcotn ttemnt v *ofjtfh ni 8ten olsbviael Khannodwsel-odnge *c<alfesvserobopmed traninig amnadna gnietemraencttvi esou letoi-einasm nniigc.uld Tnihge e -cnomromlpaenynt, o aftesnse?ss mcomenptel tepro gITre sesdu tcraacotiknnipgrog raanmd nicsetrrutscfcitoarbi-fend. Tdhaess ctooommpan y(c?-el abmelnnidge]d, v ItTitua Jed ucaclsastooior)m sou l{tvoi-ntesam ^renig dlje svilee-lrpeadce vdia
e-fearning, ^пй e4earning tools or software applications.
Mission .
Gbbdl KrK>wtedge к dedicated to improving the w^y companies and individuals
earn, use, and master technology through educational solutions that empG/i?er
customers with choice, allowing them to determine wbm, where, and how they
want their IT education programs to b& designed and delveted





Категория: информатика | Просмотров: 2177 | Добавил: basic | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Календарь
«  Февраль 2010  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

krutoto.ucoz.ru
Бесплатный конструктор сайтов - uCoz