Как сделать диалоговое окно на с

от admin

Как сделать диалоговое окно на с

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

Для работы добавим в проект новое окно, которое назовем PasswordWindow . Это окно будет выполнять роль модального.

Изменим интерфейс PasswordWindow:

Здесь определено текстовое поле для ввода пароля и две кнопки. Вторая кнопка с атрибутом IsCancel=»True» будет выполнять роль отмены. А первая кнопка будет подтверждать ввод.

Для подтверждения ввода и успешного выхода из модального окна определим в файле кода PasswordWindow определим обработчик первой кнопки Accept_Click:

Для успешного выхода из модального диалогового окна нам надо для свойства DialogResult установить значение true . Для второй кнопки необязательно определять обработчик, так как у нее установлен атрибут IsCancel=»True» , следовательно, ее нажатие будет эквивалентно результату this.DialogResult = false; . Этот же результат будет при закрытии диалогового окна на крестик.

Кроме того, здесь определяется свойство Password , через которое мы можем извне получить введенный пароль.

И изменим главную форму MainWindow, чтобы из нее запускать диалоговое окно. Во-первых, определим кнопку:

И определим обработчик для этой кнопки:

В итоге при нажатии на кнопку будет отображаться следующее диалоговое окно:

Модальные диалоговые окна в WPF

И в зависимости от результатов ввода будет отображаться то или иное сообщение.

C++. Пример создания и вызова диалогового окна в MS Visual Studio 2010 — C++

Пример создания диалогового окна в MS Visual Studio 2010 — C++ (MFC)

Содержание

  • Условие задачи
  • Выполнение
    • 1. Запустить MS Visual Studio 2010
    • 2. Создать проект на C++ по шаблону Dialog Based Application
    • 3. Изменение внешнего вида главной формы
    • 4. Этапы построения диалогового окна
    • 5. Формирование класса и ресурсов диалогового окна
    • 6. Окно MS Visual Studio и панель Solution Explorer
    • 7. Вызов диалогового окна класса CForm2 как ресурса
    • 8. Программирование события клика на кнопке «Form2» главного окна приложения

    Поиск на других ресурсах:

    Условие задачи

    1. Разработать диалоговое окно, которое содержит две кнопки OK и Cancel (рис. 1).

    Visual C++. Шаблон MFC Application. Форма, которую нужно создать

    Рис. 1. Форма, которую нужно создать

    2. Осуществить вызов диалогового окна из основного окна приложения. Вывести соответствующее сообщение, если в диалоговом окне нажатая одна из двух клавиш: OK и Cancel .

    Выполнение

    1. Запустить MS Visual Studio 2010
    2. Создать проект на C++ по шаблону Dialog Based Application

    Подробный пример создания проекта по шаблону Dialog Based Application описывается здесь .

    В окне создания нового проекта задать имя приложения как MFCApp . В будущем будем привязываться к этому имени.

    Папка приложения в нашем случае (не важно):

    Во время создания нового проекта в мастере выбираем Dialog Based Application . Все другие настройки оставляем по умолчанию.

    В результате будут сгенерированы два класса с именами CMFCAppApp и CMFCAppDlg .

    Окно MS Visual Studio после выполненных действий будет иметь вид как показано на рисунке 2.

    C++. Шаблон MFC Application. Форма приложения после создания Dialog Based Application

    Рис. 2. Форма приложения после создания Dialog Based Application

    3. Изменение внешнего вида главной формы

    Осуществим удаление кнопки OK . А кнопку Cancel переименуем в Exit .

    Для удаления кнопки OK нужно сначала ее выделить, а потом нажать клавишу Delete .

    Таким самым образом удаляем элемент в котором написано:

    Чтобы переименовать кнопку Cancel , сначала выделим ее, а потом в окне Properties в свойстве Caption набираем слово « Exit » (рис. 3). Таким образом, приложение уже настроено на нажатие на кнопку « Exit » таким образом, что происходит выход из приложения.

    C++. Шаблон MFC Application. Переименование имени кнопки с "Cancel" на "Exit"

    Рис. 3. Переименование имени кнопки с « Cancel » на « Exit «

    Пока что, в окне панели Properties имеем два элемента:

    • IDD_MFCAPP_DIALOG – главное окно приложения;
    • IDCANCEL – кнопка « Exit » (бывшая « Cancel «).

    Можно загрузить приложение на выполнение и протестовать его работу.

    Выносим на форму другую кнопку, не привязанную к обработчикам событий. В окне панели Properties появляется еще один элемент IDC_BUTTON1 .

    Форма приложения будет иметь вид, как показано на рисунке 4.

    Visual C++. Шаблон MFC Application. Вынесение кнопки не привязанной к обработчику событий

    Рис. 4. Вынесение кнопки не привязанной к обработчику событий

    Свойство Caption кнопки IDC_BUTTON1 изменяем на Form2 . После нажатия на этой кнопке будет вызываться диалоговое окно.

    4. Этапы построения диалогового окна

    В Visual C++ любое диалоговое окно строится в три этапа:

    • формирование ресурсов диалогового окна;
    • создание класса диалогового окна;
    • использование класса диалогового окна.
    5. Формирование класса и ресурсов диалогового окна

    В MS Visual Studio ресурсы диалогового окна автоматически создаются после создания класса окна. Таким образом, создав класс окна, мы автоматически создаем ресурс окна.

    Для работы с классами используется мастер классов Class Wizard . Чтобы вызвать Class Wizard делаем клик правой кнопкой мышки и в контекстном меню выбираем команду « Class Wizard… » (Рис. 5).

    Visual C++. Шаблон MFC Application. Вызов "Class Wizard. " для создания класса и ресурса диалогового окна

    Рис. 5. Вызов « Class Wizard… » для создания класса и ресурса диалогового окна

    В результате откроется окно, которое изображено на рисунке 6.

    Visual C++. Шаблон MFC Application. Окно "MFC Class Wizard"

    Рис. 6. Окно « MFC Class Wizard «

    Окно имеет такие поля:

    1. Поле « Project: » – имеющиеся проекты в решении ( Solution ).

    2. Поле « Class Name: » указывает имеющиеся классы в проекте. В нашем случае есть три класса с именами:

    • CMFCAppApp – класс приложения в целом;
    • CMFCAppDlg – класс диалогового окна приложения;
    • CAboutDlg – класс диалогового окна About , что было сформировано при создании проекта мастером AppWizard .

    3. Поле « Base Class: » указывает на базовый класс, из которого унаследован класс, который отображается в поле « Class Name: «.

    4. Поле « Resource: » определяет название ресурса, который отвечает классу из поля « Class Name: «.

    5. Поле « Class declaration: » определяет название файла-заголовка для класса, который отображается в поле « Class Name: «.

    6. Поле « Class implementation: » определяет название файла, в котором реализованы функции из класса, который отображается в поле « Class Name: «.

    Также окно имеет пять вкладок, которые для класса из поля « Class Name :» описывают:

    • команды из карты сообщений;
    • сообщения Windows , которые генерируются в классе и могут обрабатываться;
    • виртуальные функции;
    • внутренние переменные, описанные в классе;
    • методы, имеющиеся в классе.

    Чтобы добавить новый класс, вызовем команду « Add Class » (рис. 7).

    Visual C++. Шаблон MFC Application. Команда добавления нового класса

    Рис. 7. Команда добавления нового класса

    В результате откроется окно « MFC Add Class Wizard «, в котором устанавливаем поля в значения, как изображено на рисунке 8. Для установления полей, достаточно в поле « Class Name: » набрать текст « CForm2 «. Автоматически будут заполнены все другие поля за исключением поля « Base class: «.

    В поле «Base class:» указывается базовый класс CDialog .

    Название ресурса устанавливается как IDD_FORM2 .

    Заголовочный файл и файл реализации класса имеют названия « Form2.h » и « Form2.cpp «.

    Visual C++. MFC Applicaiton. Создание нового класса CForm2 и ресурса IDD_FORM2, которые базируются на классе CDialog

    Рис. 8. Создание нового класса CForm2 и ресурса IDD_FORM2 , которые базируются на классе CDialog

    Делаем клик на « Finish «. В предшествующем окне видно, что к трем предшествующим классам добавлен класс CForm2 .

    Снова делаем клик на « OK «.

    6. Окно MS Visual Studio и панель Solution Explorer

    После выполненных действий, окно панели Solution Explorer имеет вид, как показано на рисунке 9.

    Visual C++. Шаблон MFC Application. Окно Solution Explorer

    Рис. 9. Окно Solution Explorer

    Как видно из рисунка 9, в списке заголовочных файлов появились файлы « Form2.h » и « Form2.cpp «. Соответственно, это являются файлы заголовка и реализации для новообразованного класса CForm2 .

    7. Вызов диалогового окна класса CForm2 как ресурса

    Чтобы начать формировать новое диалоговое окно (класс CForm2 ), нужно вызвать его как ресурс. Для этого в Solution Explorer делаем двойной клик мышкой на файле « MFCApp.rc » из вкладыша Resources (рис. 10).

    Visual C++. Шаблон MFC Application. Вызов списка имен ресурсов приложения

    Рис. 10. Вызов списка имен ресурсов приложения

    Получаем список имен имеющихся ресурсов:

    • IDD_ABOUTBOX – ресурс диалогового окна About ;
    • IDD_FORM2 – ресурс новосозданного окна;
    • IDD_MFC_APP_DIALOG – ресурс главного окна приложения.

    Для вызова нужного ресурса, необходимо на нем сделать двойной клик мышкой. Делаем двойной клик на ресурсе IDD_FORM2 . В результате, откроется новосозданное диалоговое окно (рис. 11). Как видно из рисунка 11, оно похоже на начальное окно приложения типа Dialog Based Application .

    Visual C++. Шаблон MFC Applicaiton. Окно класса CForm2, который унаследован от класса CDialog

    Рис. 11. Окно класса CForm2 , который унаследован от класса CDialog

    Можно изменить размеры формы и размещение кнопок « OK » и « Cancel «.

    8. Программирование события клика на кнопке « Form2 » главного окна приложения

    Используя « Solution Explorer » и файл ресурсов « MFCApp.rc » (см. п. 7) переходим к ресурсу IDD_MFCAPP_DIALOG главного окна приложения (рис. 12).

    Visual C++. Шаблон MFC Application. Главное окно приложения

    Рис. 12. Главное окно приложения

    В окне « Properties » выделяем кнопку с идентификатором IDC_BUTTON1 . Потом переходим на вкладыш « Control Events » (рис. 13).

    Visual C++. Шаблон MFC Application. Список событий из вкладыша Control Events элемента управления IDC_BUTTON1

    Рис. 13. Список событий из вкладыша Control Events элемента управления IDC_BUTTON1

    В списке событий находим событие с названием BN_CLICKED . Потом выбираем кнопку выбора нисходящего меню и в меню выбираем « <Add> OnBnClickedButton1 » (рис. 14).

    Visual C++. Шаблон MFC Application. Выбор события BN_CLICKED и вызов обработчика события OnBnClickedButton1

    Рис. 14. Выбор события BN_CLICKED и вызов обработчика события OnBnClickedButton1

    В результате откроется окно файла « MFCAppDlg.cpp » с выделенным фрагментом кода обработчика события OnBnClickedButton1 .

    Между скобками нужно вставить свой собственный код обработки события.

    Программный код функции обработки события клика на кнопке IDC_BUTTON1 следующий:

    Теперь можно запустить приложение на выполнение и протестировать его работу.

    Диалоговые окна в С#

    Диалоговые окна в С#

    Диалоговые окна в C# — это вид окон, который используется для обеспечения диалога между программой и пользователем. Они могут передавать информацию пользователю, запрашивать у пользователя ответ или и то и другое одновременно.

    Простейшим типом диалогового окна является предупреждение, которое отображает сообщение и может потребовать от пользователя подтверждения того, что сообщение было прочитано, обычно нажатием кнопки «ОК» или принятия решения о том, следует ли продолжать действие, нажав кнопку «ОК» или «Отмена».

    Диалоговое окно также можно настроить. Такое диалоговое окно называется пользовательским диалоговым окном.

    Диалоговые окна — это специальный тип форм, размер которых нельзя изменять. Они используются для отображения сообщений пользователю. Сообщения могут быть сообщениями об ошибках, подтверждением пароля, подтверждением удаления определенной записи, утилитой поиска-замены слова и т.д. Существуют стандартные диалоговые окна для открытия и сохранения файла, выбора папки, печати документов, установки шрифта или цвета текста и т.д.

    Классическим примером диалогового окна является класс MessageBox, используемый для отображения сообщений пользователю. Метод show() данного класса предназначен для отображения окна сообщения с указанным текстом, заголовком, кнопками и значком. Существуют и другие доступные перегрузки этого метода.

    DialogResult res = MessageBox.Show("Вы действительно хотите удалить запись?", "Подтверждение удаления", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);

    if (res == DialogResult.OK) <
    MessageBox.Show("Вы подтвердили удаление!");
    >

    if (res == DialogResult.Cancel) <
    MessageBox.Show("Вы отказались удалять!");
    >

    Тип кнопок и значков можно изменить, используя соответствующие настройки, в нашем примере используются MessageBoxButtons.OKCancel, MessageBoxIcon.Information:

    Диалоговые окна бывают двух типов:

    • Модальные диалоговые окна
    • Немодальные диалоговые окна

    Диалоговое окно, которое временно останавливает работу программы так, что пользователь не может продолжить работу до тех пор, пока диалоговое окно не будет закрыто, называется модальным диалоговым окном. Приложению может потребоваться некоторая дополнительная информация, прежде чем оно сможет продолжить работать, или оно может просто попросить подтвердить, что пользователь хочет продолжить алгоритм действий. Приложение продолжает выполняться только после закрытия диалогового окна; до тех пор приложение останавливается. Например, если при сохранении файла пользователь указывает имя существующего файла отображается предупреждение о том, что файл с тем же именем существует, независимо от того, следует ли его перезаписать или сохранить с другим именем. Файл не будет сохранен, если пользователь не выберет «ОК» или «Отмена».

    Другой тип диалогового окна, который часто используется, — это немодальное диалоговое окно. Оно используется, когда запрашиваемая информация не является необходимой для продолжения работы программы, поэтому такое модальное окно можно оставить открытым, пока работа продолжается где-то в другом месте. Например, при работе в текстовом редакторе пользователь хочет найти и заменить определенное слово. Это можно сделать с помощью диалогового окна, в котором отображается соответствующая форма. При этом пользователь может продолжать работать, даже если это окно открыто.

    Разработчик может создать собственные классы диалоговых окон, наследуясь от базового класса System.Windows.Forms. Для отображения модального диалогового окна затем будет использоваться метод ShowDialog(). Немодальные диалоговые окна отображаются с помощью метода Show().

    Таким образом, диалоговые окна — это базовый компонент интерфейса любого графического приложения и в C# они создаются очень просто и призваны нести обратную связь для пользователя.

    Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    Она выглядит вот так:

    Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Как сделать диалоговое окно?

    Предположим есть окно в котором в виде таблице отображается некий список, для каждой записи есть некий набор действий, для примера пусть будут «Edit»/»Detail»/»Delete».

    При выборе пользователем пункта «Delete» необходимо показать окно с неким предупреждающим текстом, и двумя возможными действиями: «Ok»/»Cancel».

    Как бы я это сделал в winforms приложении:

    В рамках mvvm, необходимо сделать View, ModelView, т.е. у нас должно быть что то типа Main , MainViewModel , Dialog , DialogViewModel ;

    в Main — будут кнопки которые будут прибиндины к командам из ViewModel. т.е. например так могла бы выглядеть команда для «Delete»:

    Как вариант можно сделать публичное свойство в DialogViewModel с типом boolean и устанавливать его в диалоге, по нажатии на любую из кнопок (Ok/Canсel) менять его значение, в главной форме смотреть значение этого свойства. Вот только меня терзают сомнения в правильности такого подхода.

    Как сделать Диалоговое окно в wpf с использованием mvvm?

    P.S.: код писал здесь, могут быть ошибки

    Bald's user avatar

    Здесь есть два варианта действий:

    Более простой способ, но более неудобный в случае, если вы используете TDD: Вам нет необходимости создавать ViewModel и View отдельно для диалогового окна: достаточно перед удалением проверять ответ пользователя в диалоговом окне следующим образом:

    Более трудоёмкий способ, но с соблюдением всех канонов MVVM: создаёте ViewModel для вашего диалогового окна. Во ViewModel создаёте событие, например:

    Событие нужно декорировать специальным аттрибутом, который позволит транслировать его в другие ViewModel-классы, не нарушая при этом принцип high-cohesion loose-coupling. Для этого используются мессенджеры. Можете попробовать Appcelerate.EventBroker. В своих проектах я использую именно его.

    Далее — создаёте команду, которая ссылается на метод, вызывающий вышеупомянутое событие. Привязываете команду к кнопке в вашем диалоговом окне.

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

    View в этом случае создавайте, как пару Window.xaml + Window.cs, у которого есть метод ShowDialog(), что автоматически заблокирует вызывающее окно на время открытия диалогового.

    PS: первый способ не совсем правильный, потому что будет сложно тестировать результат, выбранный пользователем в MessageBox.

    Добавлено Если захотите использовать это окно в разных местах вашего приложения, создайте базовый абстрактный класс, а в унаследованных VM-классах перегрузите нужные вам свойства. Например, в некоторых случаях вам может понадобиться «дернуть» несколько событий, чтобы на подтверждение среагировало несколько ViewModel. Тут всё зависит от сложности проекта.

    Читать:
    Как обновить pip в pycharm

Related Posts