Обнаружение щелчка в любом месте формы (включая элементы управления) в WinForms - PullRequest
0 голосов
/ 04 марта 2020

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

Предполагается, что событие Когда это происходит, запускается следующий обработчик события:

private async void userInteract(object sender, System.EventArgs e)
{
    if (progressBarFinished)
    {
        await Task.Delay(5000);
        statusIdle(); // this method hides a progress bar after 5 seconds. It is working.
    }
}

В конструкторе формы на событие подписывается следующее:

// at the moment, it is not working for when a user clicks anywhere on the form
// it is working when a specific control click event occurs, like this one
progressBar.Click += userInteract;

Подписка на MouseClick и KeyPress события самого Form были опробованы, но событие, похоже, не сработало. Только когда используются указанные c управляющие события, он работает, как указано выше.

1 Ответ

2 голосов
/ 04 марта 2020

Метод WndPro c формы обрабатывает сообщения, отправленные в форму операционной системой Windows. Это чрезвычайно важный метод, который позволяет формам перемещать, изменять размер, перерисовывать и выполнять другие критические операции.

    // Constants for decoding the Win32 message.
    protected const int WM_MOUSEACTIVATE = 0x0021;
    protected const int WM_LBUTTONDOWN = 0x201;
    protected const int WM_RBUTTONDOWN = 0x204;

    protected override void WndProc(ref Message m)
    {
        // Check the Message parameter to see if the message is WM_MOUSEACTIVATE indicating that a control was clicked.
        if (m.Msg == WM_MOUSEACTIVATE)
        {
            int wparam = m.WParam.ToInt32();

            if (wparam == WM_LBUTTONDOWN || wparam == WM_RBUTTONDOWN)
            {
                // TODO: Do something with the mouse event.
                Console.WriteLine(m);

                return;
            }
        }

        base.WndProc(ref m);
    }

Ref 1

Ref 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...