C # UserControl, симуляция клика - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть пользовательский элемент управления, который я должен иметь возможность программно щелкать, но кажется, что Button - единственный класс, который фактически имеет функцию PerformClick().

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

    public void PerformClick() {
        var mousePos = new Point(Width / 2, Height / 2);
        OnMouseDown(new MouseEventArgs(MouseButtons.Left, 1, mousePos.X, mousePos.Y, 0));
        Thread.Sleep(75);
        OnMouseUp(new MouseEventArgs(MouseButtons.Left, 1, mousePos.X, mousePos.Y, 0));
        OnMouseClick(new MouseEventArgs(MouseButtons.Left, 1, mousePos.X, mousePos.Y, 0));
        OnClick(EventArgs.Empty);
    }

OnMouseDown> Thread.Sleep> OnMouseUp, так что этот элемент управления может отображать анимацию щелчка при нажатии из программы.

Я хочу максимально точно смоделировать щелчок мышью как по ощущениям, так и по сравнимости. Я видел кое-что об использовании user32.dll функции mouse_event (или что-то в этом роде), которая могла бы хорошо работать, но я не мог найти, как получить абсолютное положение элементов управления для передачи в функцию. Без абсолютного положения события мыши будут отправлены в неправильное место и, скорее всего, в неправильную программу.

...