Как сделать кнопку выход в c

Добавил пользователь Валентин П.
Обновлено: 04.10.2024

В KeyPreview на мой Windows формы свойства установлено значение true. Что я делаю не так?

У меня есть кнопка выхода на winform, которую я хочу использовать, чтобы закрыть программу. Я добавил имя кнопки в свойство FormClosed, найденное в разделе События свойств winforms. Я думал, что это все, что мне нужно сделать, но когда я нажимаю кнопку, она не закрывается. Я посмотрел на код, и.

Это всегда будет работать, независимо от правильного назначения обработчика событий, KeyPreview , CancelButton и т. Д:

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

Предполагая, что у вас есть кнопка "Cancel", установка свойства CancelButton формы (либо в конструкторе, либо в коде) должна позаботиться об этом автоматически. Просто поместите код для закрытия в событие Click кнопки.

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

После отладки я обнаружил, что один из элементов управления из моей формы переопределяет метод ProcessCmdKey с помощью этого кода:

. и это мешало моей форме получить ключ ESC (обратите внимание на return true )., поэтому убедитесь, что никакие дочерние элементы управления не принимают ваш ввод.

Вы устанавливаете KeyPreview в значение true в параметрах формы, а затем добавляете к нему событие нажатия клавиши. В событии нажатия клавиши вы вводите следующее:

Вам нужно добавить это в событие "KeyUp".

Вы также можете вызвать какую-либо другую форму.

E.g. вызовите кнопку отмены, если вы отредактируете свойство формы CancelButton и установите кнопку Отмена.

В коде вы можете нажать кнопку Отмена следующим образом, чтобы закрыть форму:

Под кнопкой побега вы подразумеваете ключ побега? Судя по вашему коду, я думаю, что это то, что вы хотите. Вы также можете попробовать Application.Exit(), но Close должен работать. У вас есть рабочий поток? Если выполняется не фоновый поток, это может сохранить приложение открытым.

Похожие вопросы:

У меня есть простое приложение для формы Windows, которое использует OpenFileDialog и SaveFileDialog . Форма имеет кнопку закрытия, которая при нажатии вызывает следующий код: private void.

Я работаю с приложением формы windows в Visual studio 2015. Теперь мое требование состоит в том, чтобы закрыть несколько форм windows при нажатии кнопки. Примечание: Я сослался на приведенные ниже.

Я работаю на приложение Windows формами и я хочу, чтобы удалить кнопку закрыть сверху. Я знаю о опции ControlBox , но я хочу предоставить кнопку справки. Есть ли способ сделать так, чтобы кнопка.

У меня есть кнопка выхода на winform, которую я хочу использовать, чтобы закрыть программу. Я добавил имя кнопки в свойство FormClosed, найденное в разделе События свойств winforms. Я думал, что это.

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

Я пытаюсь реализовать кнопку выхода, но я не могу использовать connect() способ сделать это. На самом деле, моя кнопка не издает никаких сигналов, насколько я знаю, но я не могу найти проблему.
Вот часть моего кода, который использует connect() метод:

MyMainWindow это друг класс MyMenu а также exit это частный QPushButton , Теперь мне нужна помощь для решения этой проблемы.

Решение

Вы можете использовать как ниже, непосредственно

Нет необходимости создавать новый метод exit_button_clicked() как SLOT

Другие решения

SLOT это макрос, который на самом деле принимает строку, а не c ++ — допустимое выражение.

SLOT(this->exit_button_clicked()) не будет привязан к правильному слоту. Вам нужно написать SLOT(exit_button_clicked()) вместо. Автозаполнение Qt Creator может предложить допустимые слоты для выбранных объектов.

Рекомендуемая альтернатива заключается в использовании новый синтаксис . Вы можете использовать его в Qt 5, если ваш компилятор поддерживает C ++ 11. Преимущество этого синтаксиса — проверка сигналов, слотов и их аргументов во время компиляции.

Если menu->exit является закрытым, вы не можете получить к нему доступ из другого класса, если он не объявлен как friend class , Вам может понадобиться создать публичный геттер в MyMenu учебный класс.

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

Очень приятно, когда фактический синтаксис что-то делает так близко к вашему ожиданию 🙂

Доброго времени суток! В этом уроке я коротко расскажу о таких элементах графического интерфейса, как кнопки. Кнопка (button), пожалуй самый распространенный элемент графического интерфейса. Так что, изучение элементов я начну именно с кнопок.

Кнопка в панели элементов Visual Studio

Кнопка в панели элементов Visual Studio

Можете создать новый (или открыть существующий) проект приложения с графическим интерфейсом в Visual Studio и перетащить на главную форму кнопку. Чтобы проверять на практике, что я сейчас буду рассказывать. А начну я с основных свойство кнопки.

Основные свойства

Name — задает уникальное имя для кнопки (специфическое свойство, необходимо, для работы с кнопкой из кода).

Image — позволяет задать изображение для кнопки.

ImageAlign — позволяет задать выравнивание изображению на кнопке.

Enabled — разрешает или запрещает доступ к элементу, если указать значение true, то кнопка будет доступна для пользователя (он сможет нажимать на неё), значение false — наоборот, запрещает доступ.

MaximumSize — позволяет задать размер кнопке. Работает аналогично свойство MaximumSize у формы.

MinimumSize — позволяет задать размер кнопке. Работает аналогично свойство MinimumSize у формы.

Size — позволяет задать размер кнопке. Работает аналогично свойство Size у формы.

Text — позволяет задать надпись на кнопке.

TextAlign — позволяет задать выравнивание текста, например, по центу, или в левом верхнем углу кнопки.

Может иметь одно из значений, перечисленных в таблице ниже.

Значение Краткое описание
TopLeft Верхний левый угол
TopCenter Сверху и по центру
TopRight Правый верхний угол
MiddleLeft Посередине слева
MiddleCenter Посередине по центру
MiddleRight Посередине справа
BottomLeft Левый нижний угол
BottomCenter Снизу по центру
BottomRight Правый нижний угол

Visible — позволят скрыть кнопку, если установлено в false. Для отображения кнопки снова, нужно установить этому свойству значение true.

Основные события

Click — возникает, при щелчке мышью на кнопке, либо при нажатии на клавишу Enter на клавиатуре.

MouseClick — возникает, при щелчке мышью (в обработчик события, передается дополнительная информация).

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


Первоначально, создайте новый проект, указав в качестве шаблона Windows Form Application и назовите second_application. Затем нажмите OK.

Перед нами откроется код функции обработчика:


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

Новый код функции с комментариями:

Теперь можно откомпилировать приложение и проверить работоспособность кнопки.

Часто панель управления (Toolbar) дублирует элементы меню для быстрого к ним доступа.

Нам снова нужно перейти к окну Toolbox (Панель инструментов) и развороту Menus & Toolbars. В этот раз мы выберем элемент ToolStrip (рис. 5).
Рисунок 5. Окно Toolbox.
Перетащите элемент управления на окно и вы увидите, как вдоль его верхней границы разместиться панель ToolBar (рис. 6).
Рисунок 6. Добавленный элемент Toolbar.
Мы изменим положение привязки нашего ToolBar’a. Для этого щелкнем по нему правой кнопкой и в открывшемся контекстном меню выберем пункт Свойства. Откроется окно свойств: здесь мы изменим привязку на левую часть окна, внеся изменения в параметр Dock, как показано на рисунке 7.
Рисунок 7. Привязка панели инструментов к левой стороне.
Теперь увеличим размеры кнопок на Toolbar'e. Для этого сначала необходимо в его свойствах установить параметр AutoSize равным false. Теперь мы можем изменить размеры самих кнопок: установим параметры Size - Width равным 44. Поле станет шире (рис. 8).
Рисунок 8. Установка размеров изображений, размещаемых на кнопках создаваемого Toolbar.
Теперь добавим 3 кнопки на наш ToolBar. Для этого щелкните по нему и в раскрывающемся списке элементов, которые мы можем добавить, выберите элемент button (рис. 9).
Рисунок 9. Добавление кнопок на панель элементов (Toolbar).
Повторите операцию, чтобы кнопок на панели стало две. Теперь поочередно выберите каждую кнопку и в ее свойствах установите AutoSize равный false. После это перейдите к полю Size и установите высоту равную 42. Теперь кнопки примут квадратный вид.

Мы будем использовать 3 следующих изображения:


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

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


Изображение для кнопки 2.


Изображение для кнопки 3.

(. ) Обратите внимание, что у данных изображений прозрачный фон.

2 кнопки будут дублировать меню с функциями загрузки изображений, 1-я кнопка будет предназначена для вызова окна, с отображением картинки, которую мы загрузили.

Теперь для установки изображений необходимо перейти в свойства картинки, после чего мы установим значение параметра ImageScaling равным none, чтобы изображение не масштабировалось. Теперь в параметре Image мы можем выбрать изображение для загрузки, как показано на рисунке 11.
Рисунок 11. Установка изображений на кнопки.
В процессе выбора откроется окно, показанное на рисунке 12.
Рисунок 12. Импорт рисунка для установки на кнопке.
Теперь щелкните на кнопке Import и выберите необходимый рисунок. Аналогично повторите с другими рисунками. В результате вы получите 3 красивые кнопки, как показано на рисунке 13.
Рисунок 13. Пример созданной панели инструментов.
Для того чтобы создать обработчики нажатий на кнопки этого ToolBox'а, достаточно совершить двойной щелчок мыши на каждом из них – MS Visual Studio автоматически сгенерирует код обработчик события и заготовки функций.

В будущем мы добавим вызов необходимых нам функций из этого обработчика.

Чтобы пользователь мог выбирать файл для загрузки через стандартное в Windows окно загрузки файлов, мы выполним следующие действия.
Перейдите к окну ToolBox (Панель элементов).
Теперь перетащите элемент управления OpenFileDialog (рис. 15) на форму.
Рисунок 15. Добавление элемента OpenFileDialog.
Местоположение, куда вы перетащите элемент, неважно: он добавится в поле под окном, к другим специфическим объектам (рис. 16).
Рисунок 16. Элемент OpenFileDialog, расположенный под редактируемой формой.
Как видно из рисунка 16, к дополнительным элементам, уже установленным на наше окно (меню и ToolBox), добавился еще и элемент OpenFileDialog1.
Теперь мы реализуем код открытия окна выбора файла, с необходимыми нам параметрами.

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


Теперь напишем следующую функцию LoadImage.

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

Добавление и вызов дополнительного диалогового окна

Для этого перейдите к окну Solution Explorer (Обозреватель решений), после чего щелкните на названии проекта правой кнопкой мыши и в открывшемся контекстном меню выберите Add->Form, как показано на рисунке 18.
Рисунок 18. Добавление в проект нового диалогового окна.
В открывшемся окне введите названия класса, который будет отвечать за генерацию нашего вспомогательного окна – Preview.cs (рис. 19).
Рисунок 19. Установка названия создаваемой формы для нового диалогового окна.
Теперь измените размер окна так, как показано на рисунке 20. Затем на форме разместите элемент panel. Внутри элемента panel разместите элемент pictureBox, как показано на рисунке 20.
Рисунок 20. Размещение элементов panel и picturebox на созданном диалоговом окне.
Данное окно будет получать при загрузке в качестве параметра ссылку на наше загруженное изображение. Затем оно будет устанавливать границы элемента pictureBox равными размерам полученного изображения, после чего устанавливать его в элемент pictureBox.

Перейдите к свойствам элемента panel и установите значение параметра AutoScroll равное true. Теперь, в том случае, если размер изображения будет превышать размер элемента panel1, будут появляться вертикальная и горизонтальная полоса прокрутки, с помощью которых можно будет просмотреть изображение.

Теперь рассмотрим исходный код, необходимый для реализации данных возможностей.

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

Он будет выглядеть следующим образом:


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

Перейдите к окну Preview, после чего сделайте двойной щелчок левой клавшей мыши на нем (НЕ на размещенных на нем объектах).

Откроется для редактирования функция:


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


Теперь отредактируем код функции Preview_Load. Он будет выглядеть следующим образом:


В заключении, самостоятельно добавьте обработчик нажатия кнопки закрыть. Функция закрытия будет выглядеть следующим образом:

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

Читайте также: