यहां थोड़ा सा सरल संस्करण है जो टाइमर पर भरोसा नहीं करता है। जब भी आप यह जांचना चाहते हैं कि माउस घुमा रहा है या नहीं, तो वर्तमान समय की तुलना करने के लिए बस अंतिम माउस चाल का समय रिकॉर्ड करें।
private DateTime mouseMoveTime = DateTime.Now;
private Point mouseMoveLoc = new Point();
private bool IsHovering()
{
return (mouseMoveTime.AddMilliseconds(SystemInformation.MouseHoverTime)).CompareTo(DateTime.Now) < 0;
}
private void myControl_MouseMove(object sender, MouseEventArgs e)
{
// update mouse position and time of last move
if (Math.Abs(e.X - mouseMoveLoc.X) > SystemInformation.MouseHoverSize.Width ||
Math.Abs(e.Y - mouseMoveLoc.Y) > SystemInformation.MouseHoverSize.Height)
{
mouseMoveLoc = new Point(e.X, e.Y);
mouseMoveTime = DateTime.Now;
}
}
या वास्तव में एक छोटा संस्करण जिसमें दूरी सहिष्णुता नहीं है।
private DateTime mouseMoveTime = DateTime.Now;
private bool IsHovering()
{
return (mouseMoveTime.AddMilliseconds(SystemInformation.MouseHoverTime)).CompareTo(DateTime.Now) < 0;
}
private void myControl_MouseMove(object sender, MouseEventArgs e)
{
mouseMoveTime = DateTime.Now;
}
बस का उपयोग करते हैं (IsHovering()) ... जब तुम अगर माउस को ले जाता है की जाँच की जरूरत है।
एक बात मैंने देखी है हालांकि यह है कि जब आप खींच रहे हों तो माउसमोव को निकाल दिया नहीं जाता है। हालांकि आप इसे पाने के लिए अपने ड्रैग इवेंट में माउसमोवटाइम/लोक अपडेट कोड कॉपी कर सकते हैं।
स्रोत
2016-03-10 14:31:44
क्या आप स्पष्टीकरण दे सकते हैं? क्या आप हर बार x/y निर्देशांक बदलते समय एक ईवेंट चाहते हैं जब यह आपके नियंत्रण पर होवर हो रहा हो? –
जब भी माउस चलना बंद कर देता है तो मैं एक ईवेंट प्राप्त करना चाहता हूं। मैं MouseMove ईवेंट को भी हुक करता हूं, लेकिन मुझे यह जानने की ज़रूरत है कि माउस कब चल रहा है। क्या MouseHover ईवेंट का उपयोग करने से ऐसा करने का कोई और तरीका है? –