У меня есть подкласс Формы с обработчиками для MouseHover
и MouseLeave
. Когда указатель находится на фоне окна, события хорошо работают, но когда указатель переходит на управление в окне, это вызывает a MouseLeave
событие.
Должен там так или иначе иметь событие, покрывающее целое окно.
(.NET 2.0, Visual Studio 2005, Windows XP.)
Когда событие выхода мыши из фреймворка выстрелило, один из вариантов - проверить текущее положение указателя и посмотреть, не находится ли он в области формы. Я не уверен, доступен ли лучший вариант.
Правка: У нас есть похожий вопрос, который может вас заинтересовать. Как определить, находится ли мышь внутри всей формы и дочерние элементы управления в C#?
Нет хорошего способа сделать 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
//...
}
}
}
}