2013-02-12 70 views
5

ठीक है, मुझे अपने प्रश्न के लिए कोई मदद नहीं मिल रही है और स्टैक ओवरफ्लो में कुछ भी नहीं लगता है, या मुझे नहीं पता था कि इसे कैसे देखना है (कृपया मुझे सही करें, अगर मैं गलत हूं और मैं बंद करूंगा यह प्रश्न)।डीबगर (वीएस प्रोफेशनल 2012) का उपयोग कर घटनाओं की सूची कैसे खोजें?

मेरे कार्यक्रम में, मैं एक Grid जो कोड में definded कुछ घटनाओं है है:

public Grid _grid = new Grid(); 
_grid.MouseLeftButtonDown += new MouseButtonEventHandler(MyMethod); 
//and a few more events... 

अब मेरी कार्यक्रम चलाने के दौरान, मैं कुछ अजीब व्यवहार है कि केवल कुछ घटनाओं से आ सकता है देखा, तो मैं सेट एक ब्रेकपॉइंट और डीबगर का उपयोग करने के लिए प्रोग्राम को रोक दिया।

क्या कोई ऐसी सूची है जहां मैं कहीं भी मिल सकता हूं जो सदस्य की सभी वर्तमान परिभाषित घटनाओं को सूचीबद्ध करता है _grid ताकि मैं जांच सकूं कि कोई अवांछित घटनाएं अभी तक नहीं हटाई गई हैं?

उत्तर

4

अद्यतन 2

दुर्भाग्य से, WPF (यानी UIElement पर) में सबसे अधिक घटनाओं मैन्युअल add/remove को लागू करने से लागू किया जाता है जिसका मतलब है कि घटना सदस्य केवल एक -= या += ऑपरेटर के बाएं हाथ की ओर हो सकता है (यानी इसे "पढ़ा नहीं जा सकता")। आंतरिक ऐसे होते हैं कि प्रत्येक घटना घटनाओं के संग्रह में "प्रतिनिधि" होती है और उस संग्रह में केवल असाइन किए गए ईवेंट के लिए तत्व होते हैं (उदाहरण के लिए यदि कोई MouseLeftButtonDownEvent += somehandler; है तो ईवेंट के संग्रह में केवल एक प्रविष्टि होगी। दुर्भाग्यवश, घटनाओं का संग्रह क्या है एक हैंडलर का प्रतिनिधित्व करने के लिए स्टोर एक आंतरिक संरचना है जिसे आपको संग्रह से पूछने के लिए तत्काल करने में सक्षम होना होगा। संग्रह (UIElement.EventHandlersStore._entries, FWIW) से पूछने के लिए आप उस संरचना (RoutedEventHandlerInfo, FWIW) के उदाहरण को तुरंत चालू करने में असमर्थ हैं। । उदाहरण के लिए यदि आप आप हैंडलर QuickWatch विंडो में जैसे एक विशेष घटना के लिए क्वेरी सकता है हो सकता है:।

grid.EventHandlersStore._entries[ 
    new RoutedEventHandlerInfo(UIElement.MouseLeftButtonDownEvent, false)] 

लेकिन, डिबगर आप एक आंतरिक निर्माता आह्वान करने के लिए अनुमति नहीं है 012,

ऐसी कोई चीज नहीं है जो केवल ईवेंट सूचीबद्ध करती है। आप डीबगर (घड़ी, क्विकवॉच इत्यादि) में किसी उदाहरण के सभी सदस्यों को देख सकते हैं और ईवेंट के पास एक अलग आइकन है। फिर आप इनमें से प्रत्येक को विस्तारित कर सकते हैं यह देखने के लिए कि ईवेंट को कौन सी विधि असाइन की गई थी। उदाहरण के लिए:

enter image description here

आप देख सकते हैं, MyEvent दिया "सौंपा" है इस विशेष उदाहरण के लिए विधि t_MyEvent

अद्यतन: आप एक से अधिक घटना एक ईवेंट हेतु निर्दिष्ट हैंडलर है, डिबगर केवल त्वरित घड़ी में घटना के शीर्ष-स्तर में पिछले सौंपा विधि दिखाई देगा। सभी असाइन किए गए तरीकों को देखने के लिए, आपको आमंत्रण सूची में ड्रिल-डाउन करने की आवश्यकता होगी। उदाहरण के लिए:

enter image description here

.. यह पता चलता है कि t_MyEvent और t_MyEvent2 दोनों MyEvent के लिए मंगलाचरण सूची में हैं। यदि आपके पास कोई हैंडलर नहीं है, तो MyEvent का मान null होगा।

+0

आपके उत्तर के लिए धन्यवाद। तो मेरे उदाहरण में, जब मैं "_grid" का विस्तार करता हूं, तो मुझे कहीं "MouseLeftButtonDown" देखने में सक्षम होना चाहिए? मैं "लोकल" में देख रहा हूं- विन्डो, लेकिन मैं कुछ भी नहीं देख सकता ... – phil13131

+0

संभवतः आपके पास इस कार्यक्रम को सौंपे गए कई प्रतिनिधि हैं, मैंने जवाब देने के लिए उत्तर अपडेट किया है ... –

+0

मेरे कार्यक्रम में मेरे पास केवल एक है विधि प्रत्येक घटना को सौंपी गई है, लेकिन उदाहरण में उपयोग की जाने वाली कुल विधियों में से कुछ 'MouseButtonEventHandler'। मैं आमंत्रण सूची की तलाश में था लेकिन इसे नहीं मिला। क्या आप कृपया WPF 'ग्रिड' के लिए अपना उदाहरण दिखाएंगे? शायद यह थोड़ा अलग है। – phil13131