Событие MouseHover/MouseLeave на целом всем окне

У меня есть подкласс Формы с обработчиками для MouseHover и MouseLeave. Когда указатель находится на фоне окна, события хорошо работают, но когда указатель переходит на управление в окне, это вызывает a MouseLeave событие.

Должен там так или иначе иметь событие, покрывающее целое окно.

(.NET 2.0, Visual Studio 2005, Windows XP.)

9
задан Alex Jolig 27 December 2015 в 08:55
поделиться

2 ответа

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

Правка: У нас есть похожий вопрос, который может вас заинтересовать. Как определить, находится ли мышь внутри всей формы и дочерние элементы управления в C#?

6
ответ дан 4 December 2019 в 10:32
поделиться

Нет хорошего способа сделать MouseLeave надежным для управления контейнерами. Пунтируйте эту проблему с таймером:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        timer1.Interval = 200;
        timer1.Tick += new EventHandler(timer1_Tick);
        timer1.Enabled = true;
    }

    private bool mEntered;

    void timer1_Tick(object sender, EventArgs e) {
        Point pos = this.PointToClient(Cursor.Position);
        bool entered = this.ClientRectangle.Contains(pos);
        if (entered != mEntered) {
            mEntered = entered;
            if (!entered) {
                // Do your leave stuff
                //...
            }
        }
    }
}
6
ответ дан 4 December 2019 в 10:32
поделиться
Другие вопросы по тегам:

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