2011-01-27 14 views
10

मेरे पास डिज़ाइनर में एक घटक प्रदर्शित करने पर problem है।"डिज़ाइन मोड" प्रीप्रोसेसर निर्देश

मैंने "खराब" कोड की पहचान की जिसे डिजाइनर पसंद नहीं करता है।

अब, समस्या यह है कि मैं केवल प्रीप्रोसेसर निर्देशों का उपयोग करके डिजाइन समय के लिए "टिप्पणी" नहीं कर सकता।

अब, मैं (VB.NET के लिए) निम्नलिखित

#If Not Debug Then 
Private Sub myWpfComponent_ItsEvent(sender, args) Handles myWpfComponent.ItsEvent 
... 
#End If 

इस कोशिश की ... काम किया, और अब यह डिजाइनर में समस्याओं के बिना प्रदर्शित किया जाता है।

अब समस्या यह है कि मुझे डर है कि को इस घटक को ठीक से डीबग करने में सक्षम नहीं है।

तो, मैं ला

#If Not DESIGN_TIME Then 
#End If 

एक समाधान के लिए खोज कर रहा हूँ वहाँ कुछ इसी तरह है?

+1

हो सकता है समस्या कोड क्या है? –

+0

@ डैनियल ए व्हाइट: "समस्या" शब्द पर लिंक देखें।Winforms Designer Wpf होस्टेड कंट्रोल पर ईवेंट को संभालने "पसंद नहीं है"। – serhio

+0

मुझे समझ में नहीं आता कि प्रीप्रोसेसर निर्देश के साथ ऐसा क्यों करना आवश्यक है। ['DesignerProperties.GetIsInDesignMode' विधि] के साथ क्या गलत है (http://msdn.microsoft.com/en-us/library/system.componentmodel.designerproperties.getisindesignmode.aspx)? –

उत्तर

9

आप प्रीप्रोसेसर के माध्यम से इसे प्राप्त नहीं कर सकते हैं। ऐसा इसलिए है क्योंकि आप VS के बाहर निष्पादन योग्य डीबग चला सकते हैं (इसे आज़माएं, डीएस द्वारा जेनरेट किए गए EXE पर डबल क्लिक करें)।

if (System.ComponentModel.LicenseManager.UsageMode == 
    System.ComponentModel.LicenseUsageMode.Designtime) 

इन वेब पृष्ठों में मदद मिलेगी और रनटाइम पर डिज़ाइन मोड के लिए जाँच के अन्य तरीकों है:

http://msdn.microsoft.com/en-us/library/c58hb4bw(vs.71).aspx

वैसे भी, वहाँ एक क्रम (आधारित Preprocessor नहीं) की संपत्ति है कि मदद कर सकता है है

http://weblogs.asp.net/fmarguerie/archive/2005/03/23/395658.aspx

+0

ओपी के "myWpfComponent_ItsEvent" के उल्लेख के आधार पर, यह एक WPF प्रश्न की तरह दिखता है। आपके द्वारा उल्लिखित संपत्ति WinForms के लिए है, डब्ल्यूपीएफ नहीं। –

+0

संदर्भित पृष्ठों में डिज़ाइन की जांच करने के अन्य तरीके हैं, दूसरा लिंक –

+0

देखें, मैं केवल एक विधि के अंदर "अगर" का उपयोग कर सकता हूं। इसके बाहर नहीं :) – serhio

4

आईडीई डिजाइनर को दिखाने के लिए आपके कोड का पुनर्निर्माण नहीं करता है। यह उस बाइनरी का उपयोग करता है जिसे आपने पहले ही बनाया है। तो एक प्रीप्रोसेसर निर्देश मदद नहीं करेगा।

चूंकि आप myWpfComponent_ItsEvent का उल्लेख करते हैं, मुझे लगता है कि यह एक WPF प्रश्न है। डब्ल्यूपीएफ में, आप GetIsInDesignMode का उपयोग करके डिज़ाइन मोड का पता लगाते हैं।

+0

हां। लेकिन मेरे कोड पर एक बार फिर एक नज़र डालें। मुझे एक संपूर्ण विधि को "अनदेखा" करने की आवश्यकता है, या वीबी में हैंडल, या सी # में ईवेंट अटैचमेंट की आवश्यकता है। मैं क्लासिक "if" ** बाहरी ** एक विधि (सभी विधि को अनदेखा करने के लिए) का उपयोग नहीं कर सकता – serhio

+1

आपको विधि के बाहर ऐसा करने की आवश्यकता क्यों है? बस 'अगर (DesignerProperties.IsInDesignMode (यह)) वापसी जोड़ें;' अपनी विधि में पहली चीज़ के रूप में। Voilà: आपकी विधि अब डिजाइन मोड में कुछ भी नहीं करता है। –

2

आपकी समस्या WinForms डिजाइनर में VB.NET में लिखे गए WPF नियंत्रण का उपयोग कर रही है। यदि ईवेंट हैंडलर समस्याएं पैदा कर रहा है, तो आप अपने हैंडलर कोड को सशर्त बनाने के लिए WithEvents और Handles के बजाय AddHandler का उपयोग कर सकते हैं। एक बार जब आप AddHandler का उपयोग कर रहे हैं तो आप @ gmagana के उत्तर में वर्णित विधियों का उपयोग करके If में हैंडलर जोड़कर लपेट सकते हैं।

हैंडल और AddHandler बीच अंतर के लिए इस उत्तर देखें:

+0

कहें, डब्ल्यूपीएफ नियंत्रण सी # में लिखा गया है, लेकिन मेजबान नियंत्रण वीबी में है :)। वैसे भी, मैंने इस समाधान के बारे में सोचा जो काम करने वाला एकमात्र प्रतीत होता है। धन्यवाद। – serhio

3

उपयोग:

if (!DesignerProperties.GetIsInDesignMode(this)) 
{ 
    //Code to not execute in design mode 
} 

ध्यान दें कि "इस" पहचानकर्ता किसी भी DependencyObject

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