C # Winforms: программно отображать состояние наведения кнопки - PullRequest
2 голосов
/ 26 марта 2011

Я отображаю цифровую клавиатуру на winform для ввода кода.я отображаю nummpad с кнопками ... Пользователи будут использовать только клавиатуры numpad для ввода кода \ пароля \?но, конечно же, вы можете использовать мышь ...

enter image description here

Если мы нажимаем кнопку мыши, мы получаем эффект синими оттенками для отображения состояний зависания и спада ..

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

Ответы [ 2 ]

2 голосов
/ 26 марта 2011

Невозможно смоделировать это поведение, используя стандартную реализацию класса кнопки. Однако вы можете добавить подкласс для кнопки, чтобы добавить это поведение:

   public class KeyboardButton : Button
    {
        public void SimulateButtonDown()
        {
            this.OnMouseDown(new MouseEventArgs(MouseButtons.Left, 0, 1, 1, 0));
        }

        public void SimulateButtonUp()
        {
            this.OnMouseUp(new MouseEventArgs(MouseButtons.Left, 0, 1, 1, 0));
        }
    }

При вызове SimulateButtonDown кнопка переходит в (визуальное) состояние, имитирующее, что мышь нажимали (и удерживали) на кнопке. Подобные методы можно реализовать и для событий при наведении.

1 голос
/ 26 марта 2011

Не автоматический способ сделать это, но вы можете сделать это в коде: создайте класс для переноса взаимодействия с пользовательским ключом и создайте очередь этого класса. Когда пользователь нажимает клавишу, поставьте в очередь два этих объектов, сигнализирующих о нажатии вниз / вверх и информации о ключе. Затем давайте создадим в вашей форме winform timer , используя очередь. Для каждого «события» в очереди вверх или вниз, измените вид кнопки по своему усмотрению. Наличие окна таймера делает ваше анимационное сообщение дружелюбным, поэтому вы должны увидеть, как кнопка меняется. Попробуйте с таймером 100 мс. Это своего рода анимация "сделай сам".

...