2009-11-10 18 views
8

जब मैं प्रिंट पूर्वावलोकन विंडो बंद करता हूं या प्रिंट पूर्वावलोकन विंडो को स्थानांतरित करता हूं तो मुझे निम्न कोड में कोई त्रुटि मिलती है। मुझे समझ में नहीं आ रहा है कि यह क्यों हो रहा है। यह g.DrawString() लाइन पर होता है। जहां तक ​​मैं कह सकता हूं कि कुछ भी नहीं सुलझाया गया है।सी # पैरामीटर मान्य त्रुटि नहीं है

protected override void OnPaint(PaintEventArgs e) 
    { 
     Graphics g = e.Graphics; 
     Brush textBrush = new SolidBrush(this.ForeColor); 

     float width = TextRenderer.MeasureText(Text, this.Font).Width; 
     float height = TextRenderer.MeasureText(Text, this.Font).Height; 

     float radius = 0f; 

     if (ClientRectangle.Width < ClientRectangle.Height) 
      radius = ClientRectangle.Width * 0.9f/2; 
     else 
      radius = ClientRectangle.Height * 0.9f/2; 

     switch (orientation) 
     { 
      case Orientation.Rotate: 
       { 
        double angle = (_rotationAngle/180) * Math.PI; 
        g.TranslateTransform(
         (ClientRectangle.Width + (float)(height * Math.Sin(angle)) - (float)(width * Math.Cos(angle)))/2, 
         (ClientRectangle.Height - (float)(height * Math.Cos(angle)) - (float)(width * Math.Sin(angle)))/2); 
        g.RotateTransform((float)_rotationAngle); 
        g.DrawString(Text, this.Font, textBrush, 0, 0); 
        g.ResetTransform(); 
       } 
       break; 
     } 
    } 

त्रुटि का पहला भाग:

at System.Drawing.Graphics.CheckErrorStatus(Int32 status) 
    at System.Drawing.Graphics.DrawString(String s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format) 
    at System.Drawing.Graphics.DrawString(String s, Font font, Brush brush, Single x, Single y) 
    at ScanPro.CustomControls.UserLabel.OnPaint(PaintEventArgs e) 

किसी भी मदद की सराहना की जाएगी।

धन्यवाद।

+0

अपवाद क्या है? – jason

+0

सिस्टम। ऑर्ग्यूमेंट अपवाद {"पैरामीटर वैध नहीं है।"} – Nathan

+0

'टेक्स्ट' में क्या है? –

उत्तर

20

मुझे पहले से ही एक ही त्रुटि का सामना करना पड़ा। कारण यह था कि वस्तुओं में से एक पहले से ही निपटान किया गया था ...

शायद फ़ॉन्ट कहीं और या ग्राफिक्स ऑब्जेक्ट का निपटारा किया जा रहा है। मुझे नहीं लगता कि ब्रश समस्याएं पैदा करेगा हालांकि यह विधि के लिए स्थानीय है और हम देखते हैं कि इसका निपटारा नहीं किया गया है।

संपादित करें:

पता करने के लिए किया जाए या नहीं एक ग्राफिक्स वस्तु निपटान किया जाता है आसान है: यह के सभी गुण एक अपवाद फेंक है। हालांकि फ़ॉन्ट के लिए यह उतना आसान नहीं है, क्योंकि सभी गुण अभी भी काम करते हैं। एक तरीका यह है कि मैंने यह जांचने के लिए पाया कि फ़ॉन्ट का निपटारा किया गया है या नहीं, इसे क्लोन करने का प्रयास करना है (आप इसे देखने के लिए वॉच विंडो में font.Clone() जोड़ सकते हैं)। अगर क्लोन काम करता है, तो फ़ॉन्ट का निपटारा नहीं किया जाता है। अन्यथा यह एक अपवाद फेंक देगा।

+0

हालांकि मुझे कुछ भी डिस्पोजेड के रूप में नहीं दिख रहा है। यह सिर्फ भ्रमित है क्योंकि प्रिंट प्रिंट करने के लिए जो कुछ भी मैं आकर्षित करता हूं उसे अपनी कक्षा से खींचा जा रहा है, इसलिए मुझे समझ में नहीं आ रहा है कि यह फ़ॉर्म को छू रहा है। – Nathan

+1

मेरे संपादन की जांच करें, एक डिस्पोजेड फ़ॉन्ट अभी भी इसके सभी गुणों को प्रदर्शित करता है जैसे कि इसका निपटारा नहीं किया गया है। –

+0

मैंने इसे अब अपवाद फेंकने के लिए संकुचित कर दिया है। फॉन्ट। गेटहाइट()। कोई विचार? – Nathan

1

क्या आपको स्पष्ट रूप से अपने एक्स/वाई निर्देशांक फ्लोट करने की आवश्यकता है (यानी 0 के बजाय 0.0f)? मैं उस से संकलन त्रुटि की अपेक्षा करता हूं, न कि रनटाइम त्रुटि, शायद नहीं।

+0

मैंने इसे आपके द्वारा सुझाए गए कार्यों पर स्विच किया और मुझे अभी भी त्रुटि मिल रही है। – Nathan

0

मैंने ऑनपेंट के साथ इतना कुछ नहीं किया है ... जो कुछ भी आप दिखाते हैं वह आयताकारों के बारे में है। क्या आप एक आयताकार या स्ट्रिंग घूर्णन कर रहे हैं? यदि यह एक आयत है, तो यह नहीं होना चाहिए। ड्रास्ट्रिंग के बजाय DrrawRectangle?

0

यदि किसी के पास एक ही त्रुटि है, तो मुझे पता चला कि "अलग-अलग चरणों" में परिवर्तन करने से समस्या हल हो जाती है।

using (var graphics = Graphics.FromImage(destImage)) 
      { 
       using (var wrapMode = new ImageAttributes()) 
       { 


        wrapMode.SetWrapMode(WrapMode.TileFlipXY); 
        graphics.CompositingMode = CompositingMode.SourceCopy; 
        graphics.CompositingQuality = CompositingQuality.HighQuality; 
        graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 
        graphics.SmoothingMode = SmoothingMode.HighQuality; 
        graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; 
        graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode); 

       }    
      } 

      using (var graphics = Graphics.FromImage(destImage)) 
      { 
       var font = new Font(new FontFamily("Arial"), 16, FontStyle.Regular, GraphicsUnit.Pixel); 
       var brush = new SolidBrush(Color.White); 
       graphics.DrawString("text to add", font, brush, 10F, 10F); 
       font.Dispose(); 
       brush.Dispose(); 
      } 
संबंधित मुद्दे