2009-07-27 18 views
6

में माउसहेल इवेंट को आग नहीं लगा सकता है सबसे पहले, मूसहेल इवेंट विजुअल स्टूडियो 2008 के इवेंट फलक में सूचीबद्ध नहीं है जो बहुत परेशान है।सी # विंडोज फॉर्म

मैं सही प्रारूप पाया हालांकि ऑनलाइन, और मेरे कोड में यह लिखा:

private void Form1_MouseWheel(object sender, MouseEventArgs e) 
    { 
     Debug.WriteLine("Foo"); 
    } 

... जहाँ से मैं कोई जवाब नहीं जब माउसव्हील घुमाया जाता है हो रही है।

मैं इसे अपने कोड के मुख्य वर्ग क्षेत्र में कर रहा हूं, और डिजाइनर में केवल एक ही रूप/खिड़की/जो कुछ भी माउस फोकस नहीं खो रहा है।

namespace BlahBlah 
{ 
    public partial class Form1 : Form 
    { 

और इसके विपरीत, मैं सही माउसव्हील एक ऊपर इस विधि है और यह ठीक काम करता है:

private void Form1_MouseClick(object sender, MouseEventArgs e) 
    { 
     Debug.WriteLine("Foo"); 
    } 

तो मुझे लगता है कि करने के लिए किया था, मुझे लगता है मैं सही ढंग से कोड नहीं जोड़ने कर रहा हूँ सोच रहा हूँ फॉर्म के लिए (उर्फ: सभी स्टफ जो दृश्य स्टूडियो मेरे लिए करेंगे यदि मैंने डिज़ाइनर के ईवेंट पैनल के माध्यम से यह ईवेंट जोड़ा)। लेकिन मैं गलत हो सकता था या बस कुछ मूर्खतापूर्ण त्रुटि कर रहा था।

क्या माउस व्हील घुमाए जाने पर आप मुझे किसी प्रकार की प्रतिक्रिया प्राप्त करने में मदद कर सकते हैं? धन्यवाद!

उत्तर

11

मूसहेल घटना की स्थापना की जरूरत है।

Form1 के निर्माता को यह जोड़ना (InitalizeComponents() के बाद;)

this.MouseWheel+= new MouseEventHandler(Form1_MouseWheel); 
+0

यही है, बहुत धन्यवाद! साइडक्वेशन: मेरे पास मेरे माउसमोव विधि के लिए भी एक है (यह .MouseMove + = Form1_MouseMove;), लेकिन माउसक्लिक के लिए नहीं। इसे एक की आवश्यकता क्यों नहीं है? – cksubs

+1

अच्छा ... क्या यह माउस क्लिक पर प्रतिक्रिया करता है? अगर इसे माउस क्लिक पर प्रतिक्रिया करने की आवश्यकता नहीं है, तो उसे एक की आवश्यकता नहीं होगी। कुछ नियंत्रण स्वचालित रूप से माउस क्लिक ईवेंट (स्क्रॉलिंग और व्हाट्नॉट के लिए) से जुड़े होते हैं। यह उस पर निर्भर करता है जो आप पूरा करने की कोशिश कर रहे हैं। – Kurisu

+0

मेरा मतलब है कि मेरे माउसक्लिक विधि कन्स्ट्रक्टर में ".... + = ...." सामान की आवश्यकता के बिना काम करता है (माउस-क्लिक पर आग लगती है)। यही कारण है कि मैं माउसहेल के लिए ऐसा कुछ जोड़ने के बारे में भूल गया, माउसक्लिक ने ठीक काम किया। – cksubs

1

मुझे नहीं पता कि उस विशेष घटना की सदस्यता कैसे लें, लेकिन आप इसके बजाय फ़ॉर्म पर उचित विधि को ओवरराइड कर सकते हैं।

6

मैं एक टिप्पणी के साथ जवाब के लिए पर्याप्त प्रतिष्ठा नहीं है, लेकिन अपनी तरफ सवाल का जवाब है कि प्रतिनिधियों की जरूरत है सेटअप हो। हालांकि जब आप गुण फलक में डबल क्लिक करके इसे बनाते हैं तो कोड स्वचालित रूप से जेनरेट किया जाता है और * .designer.cs फ़ाइल में InitializeComponent विधि में रखा जाता है।

+1

हां, designer.cs फ़ाइल में एक नज़र डालें और क्षेत्रों में देखें, आप देखेंगे कि कोड जेन ने आपके लिए इन घटनाओं को तारों के तारों का थोड़ा सा काम कैसे किया है। –

1

इस मामले में OnMouseWheel सदस्य फ़ंक्शन को ओवरराइड करने के बजाय इस मामले में सबसे अच्छा है। उदाहरण के लिए:

public class MyFrm : Form 
{ 
    protected override void OnMouseWheel(MouseEventArgs e) 
    { 
     /*Handle the mouse wheel here*/ 
     base.OnMouseWheel(e); 
    } 
} 
+0

यह बेहतर क्यों है? –

+1

@ जोनॉफअल्ट ट्रेडस इसमें बेहतर प्रदर्शन और अधिक लचीलापन है (आप ईवेंट के सब्सक्राइब किए गए किसी भी प्रतिनिधि से पहले अपना काम कर सकते हैं)। http://stackoverflow.com/questions/159317/when-should-you-override-onevent-as-opposed-to-subscribing-to-the-event-when-inh –

संबंधित मुद्दे