2010-10-01 19 views
5

निम्न कोड एक कस्टम नियंत्रण है। विजुअल स्टूडियो डिजाइनर में इस नियंत्रण का उपयोग किसी भी ध्यान देने योग्य विवरण के बिना विजुअल स्टूडियो को CRASH का कारण बनता है।कस्टम नियंत्रण कारण Visual Studio 2008 को CRASH

मैं दृश्य स्टूडियो का उपयोग कर रहा 2008

मैं गलत यहाँ कुछ कर रही हूँ?

using System; 
using System.Text; 
using System.Windows.Forms; 
using System.Drawing; 

namespace InstalacionesSayma.GUI 
{ 
    public class CustomControlTest : Panel 
    { 
     private Label _label; 

     public CustomControlTest() 
     { 
      _label = new Label(); 
      this.Controls.Add(_label); 
     } 

     public override Font Font 
     { 
      get 
      { 
       return _label.Font; 
      } 
      set 
      { 
       _label.Font = value; 
      } 
     } 
    } 
} 
+0

मुझे यकीन नहीं है, लेकिन मैं इसे 'हटा दूंगा। कंट्रोल्स। जोड़ें (_ लेबल);' कन्स्ट्रक्टर से और इसे कहीं और डालें - यदि आपके पास * डिज़ाइन सीएस है, तो वहां सेट अप करें .. । – FrustratedWithFormsDesigner

उत्तर

2

वीएस2005 डिजाइन समय के दौरान अपवाद उठाए जाने पर डेस्कटॉप पर क्रैश होने के लिए एक नाटक था। यह आपके द्वारा पोस्ट किए गए कोड के कारण नहीं हो सकता है। मुझे संदेह है कि हम असली कोड देख रहे हैं, यह नियंत्रण कुछ भी नहीं करता है।

कन्स्ट्रक्टर और ईवेंट हैंडलर से सावधान रहें, वे एक डिज़ाइन समय भी चलाएंगे। यदि आप कुछ भी करते हैं जो गंभीर रूप से प्रोग्राम की स्थिति पर निर्भर करता है, जैसे फ़ाइलों को खोलने या डीबेस सर्वर आदि से बात करने की कोशिश करना, तो इस कोड को जांचकर ऐसे कोड को चलाने से बचें। डिज़ाइनमोड प्रॉपर्टी।

5

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

public override Font Font 
    { 
    get 
    { 
     return base.Font; 
    } 
    set 
    { 
     base.Font = value; 
     _label.Font = value; 
    } 
    } 
2

मुझे लगता है कि समस्या यह है कि डिजाइनर पैनलों और उनकी सामग्री के संबंध में काम करता है की प्रकृति की दृष्टि से अपने फ़ॉन्ट संपत्ति है। डिफ़ॉल्ट रूप से लेबल के फ़ॉन्ट को उसके कंटेनर के फ़ॉन्ट से प्राप्त होता है (आप इसे पैनल में एक नियंत्रण जोड़कर इसका परीक्षण कर सकते हैं, और उसके बाद उस पैनल में एक लेबल जोड़ सकते हैं। फिर पैनल का फ़ॉन्ट बदलें, और व्हायोला, अपना लेबल - - जब तक कि आपने इसे गैर-डिफ़ॉल्ट फ़ॉन्ट नहीं दिया है - नए कंटेनर फ़ॉन्ट के साथ अपडेट किया जाएगा)।

तो, जैसा कि यह खड़ा है, जब नियंत्रण में जोड़ा जाता है, लेबल का फ़ॉन्ट कंटेनर के फ़ॉन्ट से मेल खाने के लिए अद्यतन किया जाता है, और अंतहीन पाश शुरू हो जाता है।

ऐसा लगता है कि यह आपके लेबल को बनाए जाने पर एक स्पष्ट फ़ॉन्ट देकर इसे ठीक कर सकता है। कुछ इस तरह समस्या को हल करने के लिए लगता है:

public CustomControlTest() 
    { 
     _label = new Label(); 
     _label.Font = new Font("Ariel", 8.5f); 
     this.Controls.Add(_label); 
    } 

ईटीए: हंस के जवाब में, मैं दुर्घटना प्रदान की कोड और VS2008 का उपयोग कर पुन: पेश करने में सक्षम था, और मैं फ़ॉन्ट आरंभ से दुर्घटना से बचने के लिए कर रहा था ।

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

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