2011-08-27 11 views
6

शीर्षक यह सब कहते हैं। मेरे पास एक पैनल है जो एक सफेद बोर्ड के रूप में कार्य करता है। माउस चाल पर माउस ट्रैक खींचें .. ठीक काम करता है, लेकिन यदि माउस पैनल के किनारों को छोड़ देता है, तो माउस को इवेंट और माउस डाउन इवेंट को कॉल करना है यदि माउस या पैनल पैनल में प्रवेश करता है बाएँ बटन क्लिक किया जाता हैसी # माउसलेव और माउसेंटर इवेंट आग नहीं है अगर माउस बटन पर क्लिक किया जाता है

private void panel2_MouseLeave(object sender, EventArgs e) 
    { 
     if (mousedraw == true) 
     { 
      panel2_MouseUp(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 0, MousePosition.X, MousePosition.Y, 0)); 
     } 
    } 

    private void panel2_MouseEnter(object sender, EventArgs e) 
    { 
     if (mousedraw == true) 
     { 
      panel2_MouseDown(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 0, MousePosition.X, MousePosition.Y, 0)); 
     } 
    } 

mousedraw एक bool जानना चाहते हैं कि बाएं बटन क्लिक किया जाता है है।

समस्या है: अगर माउस बटन दबाए है

छुट्टी और प्रवेश की घटनाओं सक्रिय नहीं होगा।

+0

यह नियंत्रण बेस क्लास के लिए एक साइड इफेक्ट है जो कैप्चर प्रॉपर्टी को माउस डाउन इवेंट पर सही पर सेट करता है। यह * फिक्सिंग की आवश्यकता नहीं है, नियंत्रण के बाहर ड्राइंग बाउंड्स वैसे भी दिखाई नहीं देता है। –

उत्तर

7

mouseenter और mouseleave जबकि एक बटन दबाने आग नहीं है। हालांकि, जब बटन को अंततः रिलीज़ किया जाता है, तो बटन दबाए जाने पर माउस माउस पैनल में या बाहर स्थानांतरित हो जाता है, तो उपयुक्त माउस एंटर या माउस लेव इवेंट आग लगती है। जब तक बटन दबाया जाता है, तब तक माउसमोव इवेंट पैनल की सीमाओं के बाहर भी आग लगाना जारी रखेगा। यह माउस को ड्रैगिंग जारी रखने की अनुमति देता है या जो भी नियंत्रण सीमा के बाहर गुजरता है, और जिस तरह से अधिकांश विंडोज अनुप्रयोग काम करते हैं।

यदि आप अपने व्यवहार में इस व्यवहार का उपयोग कर सकते हैं, तो यह एक अधिक "मानक" उपयोगकर्ता इंटरफ़ेस होगा।

यदि माउस को पैनल छोड़ने पर आपको निश्चित रूप से माउसअप को आग लगाना होगा, तो आप माउसमोव इवेंट में माउस स्थान देख सकते हैं और जब भी यह पैनल के बाहर होता है तो माउसअप को कॉल करें और बटन दबाया जाता है। MouseMove हैंडलर में आप स्थान के लिए e.X और e.Y का उपयोग कर सकते हैं, और बटन स्थिति के लिए ई। बटन।

जब माउसबटन को नियंत्रण के बाहर दबाया जाता है और अंदर ले जाया जाता है, तो पैनल के पास माउस पर कोई अधिकार क्षेत्र नहीं होता है, क्योंकि माउस को फॉर्म में स्थानांतरित किया जाता है या बटन दबाए जाने पर जो भी नियंत्रण होता है। तो जब माउस बटन को पैनल के बाहर दबाया जाता है और फिर पैनल के अंदर ले जाया जाता है तो आपको माउसडाउन को आग लगने में परेशानी हो सकती है।

+0

धन्यवाद, यह जानकारीपूर्ण और सहायक था, अब मैं देखता हूं कि जिस समाधान की तलाश है, उतना आसान नहीं है जितना मैंने सोचा था, अगर (कब) मैं इसे संभालता हूं, मैं यहां दूसरों के लिए टिप्पणी करने और लाभ लेने के लिए समाधान पोस्ट करूंगा। – Osama

-1

मैं, लगता है donnt [mousedraw] अच्छी तरह से

click = mouseDown + mouseUp 

तो कर सकता है

When mouseDown : mousedraw = false; 

When mouseUp : mousedraw = true; 
+0

शायद मैंने पर्याप्त समझाया नहीं है, या मैं आपको समझ नहीं पा रहा हूं। [mousedraw] एक बूल है जो माउस डाउन या माउस अप ईवेंट हिट होने पर बदल जाता है, इसलिए माउस में मैंने mousedraw को सही पर सेट किया है, और माउस पर मैं इसे गलत पर सेट करता हूं। – Osama

+0

मुझे यह नहीं पता कि इसका उपयोग कैसे किया जाना चाहिए, शायद आपको कुछ स्पष्टीकरण जोड़ना चाहिए – Breeze