Как проверить нажата ли кнопка?
Как проверить, нажата ли кнопка? Пробовал так, но условия не срабатывают.
![]()
Если вы хотите стилизовать кнопку при нажатии на неё, то добавьте в стиль кнопки триггер, срабатывающий при IsMouseCaptured == true или IsPressed == true . Имейте в виду, что стандартный стиль кнопки не очень хорошо поддерживает изменение фонового цвета, поэтому кнопка будет выглядеть не так красиво, как хотелось бы.
Ваша проверка в событии Click не срабатывает, потому что событие приходит после того, как вы отпустите кнопку.
![]()
OnLeftMouseDown можно отловить воспользовавшись методом AddHandler.
button.AddHandler(Button.MouseLeftButtonDownEvent, обработчик, true);
Кнопка проглатывает события мышки внутри себя, это позволяет всеравно эго отлавливать.
Может быть по тому, что событие button click (нажатие кнопки) происходит после того как она «разожмётся» и соответственно пишет, что в тот промежуток времени она не была нажата. и вообще зачем, нажимая кнопку узнавать, нажата ли она? можешь например в свойство tag чтото записывать при какам либо действии, а потом просто проверять его, и делать дальше что либо.
Как проверить, нажата ли кнопка окна C ++
Как я могу проверить, нажата ли кнопка?
Я использую EnumChildWindows() для перечисления дочерних окон данного окна, и одно из дочерних окон является кнопкой, я хочу проверить, нажата ли эта конкретная кнопка.
Мой код, пока не знаю:
Вы хотите что-то делать, когда пользователь нажимает кнопку, или вы просто хотите проверить нажатое состояние? Проверка на BST_PUSHED не очень распространенная практика. Если пользователь нажимает быстро, BST_PUSHED будет установлен только на очень короткий период времени. Обычно приложения обрабатывают нажатия кнопок, вместо этого прослушивая сообщение WM_COMMAND в своем оконном процессе. Может помочь дополнительная информация о вашем сценарии: это окно в вашем процессе или в другом процессе? — BrendanMcK
2 ответы
Вы можете отправить BM_GETSTATE сообщение на кнопку управления, если она нажата, результатом будет BST_PUSHED.
ответ дан 25 апр.
Вам нужно внедрить DLL в пространство процесса, перехватить цикл оконных сообщений (как вы использовали для передачи кода подкласса окна в собственном коде Win32 API C, Window Proc) (способен для Google) и прослушать фактические сообщения.
Все это для меня устаревшие вещи, и я боюсь, что последние версии Windows (надеюсь) сделали это немного сложнее.
Тем не менее, если вы можете доверить приложению правильный уровень разрешений, вы все равно сможете это сделать.
ответ дан 25 апр.
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками c++ winapi api or задайте свой вопрос.
Как проверить нажата ли кнопка c
К событиям клавиатуры можно отнести следующие события:
Возникает при нажатии клавиши
Возникает при нажатии клавиши
Возникает при освобождении клавиши
Возникает при освобождении клавиши
Возникает при получении элементом текстового ввода (генерируется не только клавиатурой, но и стилусом)
Возникает при получении элементом текстового ввода
Большинство событий клавиатуры (KeyUp/PreviewKeyUp, KeyDown/PreviewKeyDown) принимает в качестве аргумента объект KeyEventArgs, у которого можно отметить следующие свойства:
Key позволяет получить нажатую или отпущенную клавишу
SystemKey позволяет узнать, нажата ли системная клавиша, например, Alt
KeyboardDevice получает объект KeyboardDevice, представляющее устройство клавиатуры
IsRepeat указывает, что клавиша удерживается в нажатом положении
IsUp и IsDown указывает, была ли клавиша нажата или отпущена
IsToggled указывает, была ли клавиша включена — относится только к включаемым клавишам Caps Lock, Scroll Lock, Num Lock
Например, обработаем событие KeyDown для текстового поля и выведем данные о нажатой клавише в текстовый блок:
А в файле кода пропишем обработчик TextBox_KeyDown :
Здесь в текстовый блок добавляется текстовое представление нажатой клавиши в текстовом поле:

Правда, в данном случае реальную пользу от текстового представления мы можем получить только для алфавитно-цифровых клавиш, в то время как при нажатии специальных клавиш или кавычек будут добавляться их полные текстовые представления, например, для кавычек — OemQuotes.
Если нам надо отловить нажатие какой-то опредленной клавиши, то мы можем ее проверить через перечисление Key :
Объект KeyboardDevice позволяет нам получить ряд дополнительных данных о собыиях клавиатуры через ряд свойств и методов:
Modifiers позволяет узнать, какая клавиша была нажата вместе с основной (Ctrl, Shift, Alt)
IsKeyDown() определяет, была ли нажата определенная клавиша во время события
IsKeyUp() позволяет узнать, была ли отжата определенная клавиша во время события
IsKeyToggled() позволяет узнать, была ли во время события включена клавиша Caps Lock, Scroll Lock или Num Lock
GetKeyStates() возвращает одно из значений перечисления KeyStates, которое указывает на состояние клавиши
Пример использования KeyEventArgs при одновременном нажатии двух клавиш Shift и F1:
События TextInput/PreviewTextInput в качестве параметра принимают объект TextCompositionEventArgs . Из его свойств стоит отметить, пожалуй, только свойство Text , которое получает введенный текст, именно текст, а не текстовое представление клавиши. Для этого добавим к текстовому полю обработчик:
И определим обработчик в файле кода:
Причем в данном случае я обрабатываю именно событие PreviewTextInput, а не TextInput, так как элемент TextBox подавляет событие TextInput, и вместо него генерирует событие TextChanged. Для большинства других элементов управления, например, кнопок, событие TextInput прекрасно срабатывает.
Валидация текстового ввода
События открывают нам большой простор для валидации текстового ввода. Нередко при вводе используются те или иные ограничения: нельзя вводить цифровые символы или, наоборот, можно только цифровые и т.д. Посмотрим, как мы можем провети валидацию ввода. К примеру, возьмем ввод номера телефона. Сначала зададим обработку двух событий в xaml:
И определим в файле кода обработчики:
Для валидации ввода нам надо использовать обработчики для двух событий — PreviewKeyDown и PreviewTextInput. Дело в том, что нажатия не всех клавиш PreviewTextInput обрабатывает. Например, нажатие на клавишу пробела не обрабтывается. Поэтому также применяется обработка и PreviewKeyDown.