для чего нужны диалоговые окна
О кнопках, диалогах и кнопке «Применить»
Диалоговые окна
Как часто вы попадаете в ситуацию, когда по привычке нажали на кнопку, ожидая получить один результат, а вместо этого получаете прямо противоположный? Или, скажем, «подвисали» над через чур заумным диалогом подтверждения выхода? А может встречались с вопросами из серии «Не сохранять?» и кнопки «Да», «Нет», «Отмена»? Виной этому является непонимание разработчиками «неписанного кодекса дизайна» — простых правил, которые никто не придумывал, но так уж сложилось. Данная проблема распространена в мире свободного ПО и почти отсутствует в продуктах крупных компаний, интерфейсы программ которых строго стандартизированы и тщательно продумываются. Давайте рассмотрим несколько примеров.
Модальные окна и кнопка «Применить»
Та же проблема встречается и в окнах настроек. Вот правильное окно (о-па, опять MS):
Microsoft Word
Две кнопки: «ОК» и «Отмена». И «Отмена» справа. Так было есть и будет. И это правильно, потому что все к этому привыкли. Если пользователь чего-то там наменяет и вдруг передумает сохранять изменения, он неглядя жмакнет на правую нижнюю клавишу, потому что он привык там видеть отмену (и она в продуктах MS там и есть). Совсем другое дело Linux. Тут нет жестких правил и стандартов, тут каждый делает как хочет.
Rhytmbox
Интересно, не правда ли? Хотя предыдущее окно имеет нормальное расположение кнопок. Чем руководствовались разработчики — одному ежу известно. Оставим эти промахи на совести авторов, а для себя сделаем вывод: самая правая кнопка — отмена (если это свой не особый случай).
Microsoft Windows 
Еще один интересный вариант — кнопка «Применить». Ах, какие у меня с ней воспоминания… Перед нажатием «ОК» на полном автоматизме нажимается «Применить». Не понятно зачем, но все же 🙂
Пережиток прошлого, от которого Microsoft почему-то не хочет отказываться. Предназначена она для сохранения и применения изменений без закрытия диалогового окна. Изменили настроечку — будьте добры нажать «Применить». Сделано так было из-за того, что во времена Windows 95 компьютеры были слабенькие и применение настроек «на лету» вызывало некислые подзадумывания ПК. Сейчас же, во времена дохрена-ядерных машин и «офисных» лошадок с четырьмя гигами мозгов на борту, такая система просто излишня.
Ubuntu Linux
В Gnome, например, используется система применения настроек «на лету», т.е. тыкнул мышкой в картинку и она тут же стала обоями рабочего стола. Не надо нажимать «Применить»/«Сохранить». Есть только одна кнопка — «Закрыть». И больше ничего не нужно в некритичных диалогах.
Отсюда вывод: пользы от кнопки «Применить» мало, поэтому ее использование востребовано.
Вот, в принципе, и все на эту тему. Делайте, господа, хорошие, удобные интерфейсы. Да возрадуются ваши пользователи!
Общие сведения о диалоговых окнах
Изолированные приложения обычно имеют главное окно, в котором отображаются основные данные, по которым приложение работает, и предоставляет функциональные возможности для обработки этих данных с помощью пользовательский интерфейс таких механизмов, как строки меню, панели инструментов и строки состояния. Нетривиальное приложение может также отображать дополнительные окна для следующих целей:
отображения определенных сведений для пользователей;
сбора сведений от пользователей;
сбора и отображения сведений.
Эти типы окон называются диалоговыми окнами, и существует два типа: модальные и немодальные.
Windows Presentation Foundation (WPF) позволяет создавать несколько типов диалоговых окон, включая окна сообщений, общие диалоговые окна и пользовательские диалоговые окна. В этом разделе обсуждаются все, а в образце диалогового окна приведены соответствующие примеры.
Окна сообщений
Окно сообщения является диалоговым, которое можно использовать для вывода текстовой информации и разрешения пользователям принимать решения с помощью кнопок. На следующем рисунке показано окно сообщения, в котором отображается текстовая информация, задается вопрос и предоставляются три кнопки для ответа на этот вопрос.
Чтобы создать окно сообщения, используйте MessageBox класс. MessageBox позволяет настроить текст, заголовок, значок и кнопки в окне сообщения, используя код, подобный приведенному ниже.
Чтобы отобразить окно сообщения, вызовите static Show метод, как показано в следующем коде.
Когда коду, который показывает окно сообщения, нужно определить и обработать решение пользователя (какая кнопка была нажата), он может проверить результат окна сообщения, как показано в следующем коде.
Хотя MessageBox может предложить простое взаимодействие с пользователем диалогового окна, преимущество использования MessageBox — это единственный тип окна, который может быть отображен приложениями, выполняемыми в песочнице безопасности частичного доверия (см. раздел Безопасность), например в приложениях браузера XAML (XBAP).
Большинство диалоговых окон отображают и собирают более сложные данные, чем результат окна сообщения, в том числе текст, выбранные варианты (флажки), взаимоисключающий выбор (переключатели) и списки выбора (списки, поля со списком, поля с раскрывающимся списком). для этого Windows Presentation Foundation (WPF) предоставляет несколько общих диалоговых окон и позволяет создавать собственные диалоговые окна, хотя использование либо ограничено приложениями, работающими с полным доверием.
Общие диалоговые окна
в Windows реализовано множество многократно используемых диалоговых окон, которые являются общими для всех приложений, включая диалоговые окна для открытия файлов, сохранения файлов и печати. Поскольку эти диалоговые окна реализованы операционной системой, они могут совместно использоваться всеми приложениями, работающими в операционной системе, что помогает поддерживать единообразие пользовательского интерфейса; если пользователи знакомы с диалоговым окном, предоставляемым операционной системой в одном приложении, им не нужно учиться пользоваться этим диалоговым окном в других приложениях. Поскольку эти диалоговые окна доступны для всех приложений, и они помогают обеспечить единообразное взаимодействие с пользователем, они называются общими диалоговыми окнами.
Windows Presentation Foundation (WPF) инкапсулирует общие диалоговые окна открытия файла, сохранения файлов и печати и предоставляет их в качестве управляемых классов для использования в автономных приложениях. В этом разделе приводится краткий обзор каждого типа диалоговых окон.
Диалоговое окно открытия файла
Диалоговое окно открытия файлов, показанное на следующем рисунке, используется функциональностью открытия файла для получения имени открываемого файла.
Общее диалоговое окно открытия файла реализуется как OpenFileDialog класс и находится в Microsoft.Win32 пространстве имен. Следующий код показывает, как создавать, настраивать и отображать такое окно, а также как обрабатывать результат.
OpenFileDialog может использоваться для безопасного извлечения имен файлов приложениями, работающими с частичным доверием (см. раздел Безопасность).
диалоговое окно сохранения файлов
Диалоговое окно сохранения файлов, показанное на следующем рисунке, используется функциональностью сохранения файла для получения имени сохраняемого файла.
Диалоговое окно «Общие файлы сохранения» реализуется как SaveFileDialog класс и находится в Microsoft.Win32 пространстве имен. Следующий код показывает, как создавать, настраивать и отображать такое окно, а также как обрабатывать результат.
Диалоговое окно печати, показанное на следующем рисунке, используется функциональными возможностями печати для выбора и настройки принтера, на котором пользователь хочет печатать данные.
Общее диалоговое окно печати реализуется как PrintDialog класс и находится в System.Windows.Controls пространстве имен. Следующий код показывает, как создавать, настраивать и отображать такое окно.
Настраиваемые диалоговые окна
Хотя общие диалоговые окна полезны и должны использоваться, когда это возможно, они не поддерживают требований диалоговых окон отдельного домена. В этих случаях необходимо создавать собственные диалоговые окна. Как мы увидим, диалоговое окно является окном со специальным поведением. Window реализует эти поведения и, следовательно, используется Window для создания настраиваемых модальных и немодальных диалоговых окон.
Создание модального настраиваемого диалогового окна
В этом разделе показано, как использовать Window для создания типичной реализации модального диалогового окна с помощью Margins диалогового окна в качестве примера (см. Пример диалогового окна). Это Margins диалоговое окно показано на следующем рисунке.
Настройка модального диалогового окна
Пользовательский интерфейс для типичного диалогового окна включает следующее.
Различные элементы управления, которые необходимы для сбора нужных данных.
Кнопка Закрыть в заголовке окна.
Системное меню для сворачивания, развертывания, восстановления и закрытия диалогового окна.
Расположение выше и в центре окна, открывшего диалоговое окно.
Возможность изменять размер, если это возможно, чтобы не допустить слишком маленького диалогового окна, а также предоставить пользователю полезный размер по умолчанию. Для этого необходимо задать значения по умолчанию и минимальные размеры.
Следующий код демонстрирует такую конфигурацию.
Пользовательский интерфейс для диалогового окна также распространяется в строку меню окна, открывающего диалоговое окно. Если пункт меню вызывает функцию, которая перед продолжением выполнения требует взаимодействия с пользователем посредством диалогового окна, то в названии этого пункта меню будет многоточие в заголовке, как показано ниже.
Если пункт меню вызывает функцию, которая отображает диалоговое окно, не требующее взаимодействия с пользователем, например диалоговое окно «О программе», многоточие не требуется.
Открытие модального диалогового окна
Диалоговое окно обычно отображается в результате выбора пользователем пункта меню для выполнения доменной функции, такой как установка полей документа в текстовом процессоре. Отображение диалогового окна похоже на отображение обычного окна, хотя требуется дополнительная настройка для диалогового окна. Весь процесс создания, настройки и открытия диалогового окна показан в следующем коде.
Здесь код передает в диалоговое окно сведения по умолчанию (текущие поля). Он также задает Window.Owner свойство со ссылкой на окно, в котором отображается диалоговое окно. в общем случае необходимо всегда задавать владельца для диалогового окна, чтобы обеспечить поведение окна, которое является общим для всех диалоговых окон (дополнительные сведения см. в разделе обзор Windows WPF ).
Необходимо указать владельца для поддержки автоматизации ПОЛЬЗОВАТЕЛЬСКОГО интерфейса для диалоговых окон (см. Обзор модели автоматизации пользовательскогоинтерфейса).
После настройки диалогового окна он отображается как модальный путем вызова ShowDialog метода.
Проверка предоставленных пользователем данных
Если открывается диалоговое окно и пользователь предоставляет требуемые данные, диалоговое окно отвечает за проверку допустимости предоставленных данных по следующим причинам.
С точки зрения безопасности следует проверять все входные данные.
С точки зрения конкретного домена проверка данных предотвращает обработку в коде ошибочных данных, которые могут вызывать исключения.
С точки зрения взаимодействия с пользователем диалоговое окно может помочь пользователям, показывая, какие введенные ими данные являются недопустимыми.
С точки зрения производительности проверка данных в многоуровневом приложении может уменьшить количество циклов обработки между уровнями клиента и приложения, особенно в том случае, если в приложение входят веб-службы или серверные базы данных.
Чтобы сопоставить это правило проверки со связанным элементом управления, используется следующая разметка.
После того как правило проверки будет связано, WPF автоматически применит его при входе данных в привязанный элемент управления. Если элемент управления содержит недопустимые данные, WPF отобразит красную рамку вокруг недопустимого элемента управления, как показано на следующем рисунке.
Если диалоговое окно является допустимым, оно может быть безопасно закрыто и выполнен возврат. В рамках процесса возврата необходимо возвращать результат в вызывающую функцию.
Установка результата модального диалогового окна
Диалоговое окно автоматически возвращается, false когда пользователь нажимает кнопку Закрыть в строке заголовка или выбирает пункт меню Закрыть в системном меню.
Обработка данных, возвращаемых из модального диалогового окна
Если параметр DialogResult задается в диалоговом окне, то функция, которая открыла ее, может получить результат диалогового окна, проверив DialogResult свойство при ShowDialog возврате.
После ShowDialog возврата диалоговое окно нельзя открыть повторно. Вместо этого придется создать новый экземпляр.
Создание немодального настраиваемого диалогового окна
Немодальное диалоговое окно, например диалоговое окно поиска, показанное на следующем рисунке, в основном имеет такой же внешний вид, как и модальное диалоговое окно.
Однако поведение несколько отличается, как показано в следующих разделах.
Открытие немодального диалогового окна
Немодальное диалоговое окно открывается путем вызова Show метода.
Обработка данных, возвращенных из немодального диалогового окна
В этом примере объект FindDialogBox может вернуть один или несколько результатов поиска в главное окно в зависимости от искомого текста без какой бы то ни было определенной частоты. Как и в случае с модальным диалоговым окном, немодальное диалоговое окно может возвращать результаты с помощью свойств. Однако окну, которому принадлежит данное диалоговое окно, нужно знать, когда следует проверять эти свойства. Один из способов сделать это — реализовать для диалогового окна событие, которое возникает всякий раз, когда текст найден. FindDialogBox реализует TextFoundEvent для этой цели, для которой сначала требуется делегат.
Следовательно, Find может вызвать событие при обнаружении результата поиска.
Затем окну-владельцу нужно зарегистрировать и обработать это событие.
Закрытие немодального диалогового окна
Поскольку DialogResult не нужно задавать, немодальное диалоговое окно можно закрыть с помощью механизмов, предоставляемых системой, включая следующие:
Нажатие кнопки Закрыть в строке заголовка.
Нажатие клавиш ALT+F4.
Для чего нужны диалоговые окна
B.10.2. Диалоговые окна и операционные системы.
Диалоговое окно является отдельным ресурсом приложения: оно обычно не создается средствами приложения, а загружается в готовом виде по требованию приложения, которое отводит ему на период работы ресурсы компьютера (оперативную и видеопамять), а после закрытия диалоговое окно сообщает приложению о результате своей работы.
Большинство диалоговых окон являются модальными, то есть невозможно продолжить работу с приложением, не закончив работу с диалоговым окном. При этом в другие приложения чаще всего можно переключиться!
B.10.3. Окна сообщений.
К модальным окнам следует отнести окна сообщений операционных систем (messagge box), являющиеся как бы простейшими диалоговыми окнами операционной системы. Как правило, окно-сообщение представляет собой прямоугольник с пиктограммой, содержащий, кроме нее, текст сообщения, и одну или несколько кнопок. Пиктограмма указывает, к какому классу следует отнести данное сообщение (информация, запрос, предупреждение), а кнопками выбирают ту или иную команду в ответ на заданное сообщение.
Кнопка Отмена (Cancel) вызывает отмену действия, вызвавшего появление этого окна-сообщения. При ее нажатии приложение возвращается к исходным параметрам, а окно пропадает.
B.10.4. Основные кнопки диалогового окна.
Как правило, в любом диалоговом окне всегда содержаться следующие кнопки.
Кнопка «OK» («Готово»). Предназначена для закрытия диалогового окна с внесенными в него изменениями.
Кнопка «Cancel» («Отмена»). Предназначена для выхода из окна без сохранения введенных изменений. За ней закреплена клавиша Esc на клавиатуре.
Кнопка «Help» («Помощь», «Подсказка») Выдает справку о диалоговом окне и его элементах управления.
B.10.5. «Закладка» в диалоговом окне.
В продуктах фирмы Microsoft закладки используются только в диалоговых окнах, тогда как в операционной системе OS/2 Warp они практически заменили такой элемент графического интерфейса, как меню.
В операционной системе SGI IRIX закладки используются редко; чтобы уместить в диалоговом окне все элементы управления, диалоговые окна, как и перекрывающиеся, имеют полосу прокрутки.
B.10.6. Выбор элементов управления в диалоговом окне.
Чтобы активизировать какой-либо элемент в диалоговом окне, надо просто выбрать его мышью. После этого работа с ним осуществляется, как описано выше для каждого органа управления. Для перехода к другому элементу надо вновь выбрать его мышью. При выборе кнопки мышью происходит не только ее активизация, но и выполнение связанной с ней команды.
Как и в меню, некоторые символы текста элементов в диалоговом окне выделены (цветом или подчеркиванием). Нажатие клавиш на клавиатуре, соответствующих данному символу, позволяет быстро выбрать и изменить значение этих органов управления.
После установки опций нужным образом необходимо нажать кнопку Готово (Ok) или нажать клавишу Enter.
B.10.7. Примеры диалоговых окон
Для примера рассмотрим диалоговые окна «Открытие документа», «Сохранение документа», «Найти и Заменить» пакета Microsoft Office 97, как наиболее часто используемые.
B.10.7.1. Пример окна «ОТКРЫТИЕ ДОКУМЕНТА».
Рис. B.11. Окно «Открытие документа».
В заголовке окна написано его назначение (текст «Открытие документа»). Справа в прямоугольнике заголовка находятся кнопка со знаком вопроса (аналог кнопки «Помощь» в старых версиях пакета) и кнопка закрытия окна (дублирует кнопку «Отмена»).
Сразу же под заголовком в верхней строке рабочего поля находятся (слева направо):
а) Комбинированный список с указанием текущей папки (обычно это папка «Мои документы»). При открытии этого списка появляются все вышележащие папки и устройства, на которые можно перейти, выбрав их мышью.
б) Кнопка перехода на один уровень вверх по дереву папок. Например: если папка «Мои документы» находилась в папке «MS Office», то нажатие на эту кнопку выведет список файлов и папок, находящихся в папке MS Office. Среди них будет и папка «Мои документы»
д) Кнопка «Свойства» позволяет просмотреть свойства выбранного файла.
е) Четыре кнопки, задающие режимы отображения списка файлов.
Ниже в рабочей области окна идет собственно список файлов и папок, режим отображения которых определяется указанными выше четырьмя кнопками. Отметим, что в этом списке выделенный элемент (файл или папку) можно тут же переименовать.
Справа от окна списка находятся: кнопка Готово для открытия выбранного (или выбранных) файлов, кнопка Отмена для выхода из окна без открытия файла, и кнопка Отбор. вызывающие диалоговое окно для поиска файлов (описание смотри в документации по MS Office 97).
Далее под окном списка находятся:
ж) Строка редактирования с комбинированным списком, задающее имя файла. Обычно его содержимое соответствует выделенному элементу из списка отображаемых файлов. Но если здесь изменить имя, ввести шаблон имени или что-либо подобное, а затем написать клавишу Найти, содержимое списка изменится.
и) Строка редактирования «текст/свойство». Здесь задается одно из ключевых слов, которое должно обязательно находиться в тексте. Обычно оно пустое.
B.10.7.2. Пример окна «СОХРАНЕНИЕ ДОКУМЕНТА».
Рис. B.12. Окно «Сохранение документа»
Для сохранения вновь созданного документа в первый раз, а также для сохранения текущего документа MSOffice под другим именем используется диалоговое окно сохранения документа. С его помощью можно указать имя и тип сохраняемого документа, а также выбрать папку для его записи.
Это диалоговое окно имеет в Microsoft Office 97 следующий вид: в прямоугольнике заголовка написано «Сохранение документа». Там же, справа от заголовка, содержатся две кнопки: со знаком вопроса и перекрестием. Их назначение и работа с ними совпадает с назначением и работой тех же кнопок в диалоговом окне «Открытие документа». Сразу ниже строки заголовка находятся:
а) комбинированный список, указывающий текущую папку, в которую будет сохраняться документ (см. пункт а) выше).
б) кнопка перехода в родительскую папку (см. выше п. б))
в) Кнопка перехода в папку «Избранное» (см. выше п. г))
г) Кнопка создания новой папки внутри текущей. После нажатия этой кнопки в списке файлов и папок появляется новая папка без имени. Имя новой папки предлагается ввести в списке файлов и папок сразу после ее создания. Повторный выбор этой папки клавишей мыши или нажатие клавиши Enter приведет к фиксации имени этой новой, пустой папки.
д) Далее идут четыре кнопки, задающие режимы отображения элементов списка, как и в диалоговом окне открытия документа. Здесь нет режима просмотра документа, поскольку внешний вид сохраняемого документа показан в дочернем окне.
В следующей строке расположено окно-список файлов и папок, удовлетворяющих данному типу и шаблону выводимых файлов. Для выбора имени сохраняемого файла из уже имеющихся, необходимо дважды щелкнуть мышью на имени выбранного документа. Появится окно запроса, в котором необходимо подтверждение на перезапись файла и в котором предупреждается, что старый файл будет навсегда потерян. Если этого делать не следует, надо отказаться от перезаписи, и управление опять передается диалоговому окну. Если же нужно сохранить документ в другой папке (не указанной в качестве рабочей, а вложенную в нее), надо просто открыть эту папку. При этом будет показываться его содержимое.
Справа от окна-списка расположены кнопки «Сохранить», «Отмена» и «Параметры». Кнопки «Сохранить» сохраняет файл с выбранным именем, типом и параметрами. Кнопка «Отмена» закрывает диалоговое окно, не сохраняя файла. Кнопка «Параметры» вызывает другое диалоговое окно, задающее опции сохраняемого документа. Важнейшими из них являются:
1) Всегда делать резервные копии. Иногда бывает, что в документ вводятся большие изменения, а они оказались ошибочными. В этом случае можно загрузить резервную копию.
3) Документ можно защитить паролем для предотвращения несанкционированного доступа. Пароли устанавливаются отдельно на чтение и запись файла.
ж) комбинированный список «Тип файла». При его выборе появится список расширений файлов, определяющий тип хранения данных. В окне-списке файлов будут отображаться только файлы с типом, указанном в этой строке. При указании имени файла его тип (то есть расширение) обычно добавляется к нему автоматически.
Других элементов у этого диалогового окна нет.
B.10.7.3. Приемы работы с диалоговыми окнами «НАЙТИ», «ЗАМЕНИТЬ» и «ПЕРЕЙТИ К. «.
Иногда необходимо найти слово или группу символов в тексте. Для настройки параметров поиска служит специальное диалоговое окно. Для поиска и одновременной замены символов на другие используется диалоговое окно «Заменить».
В Word 97 для этих целей служит диалоговое окно «Найти и заменить» с закладками Найти, Заменить и Перейти.
В других системах для этого служат отдельные диалоговые окна.
Рис. B.13. Окно «Найти» в Microsoft Word 97
В окне «Найти» предлагается ввести группу символов, которые необходимо найти. Эти символы набираются в строке редактирования, совмещенным с комбинированным списком. Можно либо вводить нужные символы, либо с помощью комбинированного списка выбрать ранее введенные символы. Справа от этой строки расположены кнопки «Найти далее», осуществляющая поиск символа, «Отмена» отменяющая поиск и «Больше», устанавливающая параметры поиска. Эти параметры следующие: поиск вниз по тексту или вверх по тексту, учитывается или нет регистр символов, условия поиска (ищутся ли совпадающие группы символов, целое слово или т.н. регулярные выражения). Если установлена опция «регулярное выражение», то возможен поиск по шаблону (как поиск файлов по шаблону имени).
Рис. B.14. Окно «Заменить» в Microsoft Word 97.
Диалоговое окно «Заменить» содержит строку ввода символов, которые нужно найти (аналогично окну «Найти»). Строку ввода для символов, которыми нужно заменить найденные символы.
Правее расположены переключатели «и»:
а) учет регистра (делает различие между строчными и прописными буквами)
б) Только слово целиком
в) Подстановочные знаки (шаблоны)
С помощью диалоговых окон можно найти и заменить не только символы, но и формат их представления (группы, стиль, абзацный отступ и т.д.) Для этого в Word 97 служат кнопки «Снять форматирование», «Формат» и «Специальный» внизу окна диалога: описание работы смотри по контекстной справке.
Рис. B.15. Окно «Перейти в Microsoft Word 97.
Закладка «Перейти к. » в диалоговом окне предназначена для быстрого перехода в нужное место внутри документа. Слева расположено окно список, в котором указаны элементы, относительно которых следует искать новую позицию. Так можно перейти на указанную страницу, в указанный раздел, к указанному рисунку и т.п. В центре расположена строка редактирования, в которой указываются номер элемента, к которому необходимо перейти. Справа расположены кнопки; «Следующий», которая вызывает команду поиска элемента вниз по тексту, «Предыдущий», осуществляющая переход к подходящему элементу вверх по тексту, и кнопка «Закрыть», закрывающее это диалоговое окно.
B.10.8. Резюме.
Итак, мы познакомились со всеми элементами графического интерфейса. Вы научились распознавать элементы графического интерфейса и работать с ними. В последней главе Вы познакомились с диалоговыми окнами и закладками. Теперь Вас не должно привести в смущение ни одно диалоговое окно.












