मैंने सी # WinForms में एक नियंत्रण subclassed है, और मेरे OnPaint()
हैंडलर में कस्टम ड्राइंग पाठ हूँ। फॉन्ट मेरी रूप में निम्नलिखित कोड का उपयोग कर कूरियर न्यू पर सेट है:क्यों ड्रॉस्ट्रिंग सी # विनफॉर्म में अप्रत्याशित व्यवहार का प्रदर्शन कर रहा है?
FontFamily family = new FontFamily("Courier New");
this.myControl.Font = new Font(family, 10);
नियंत्रण ही में, स्ट्रिंग realText
में संग्रहीत किया जाता है, और मैं स्क्रीन पर आकर्षित करने के लिए निम्नलिखित कोड का उपयोग करें:
आप जूम इन करते हैं, तो आप देख सकते हैं उदाहरण के लिए, कि '' के रूप में पहले के बीच की जगह टी तुलना में अलग है:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawString(realText, Font, new SolidBrush(ForeColor), ClientRectangle);
}
कुछ यादृच्छिक उदाहरण के लिए लेख परिणाम इस प्रकार है लग रहा है वह दूसरे 'के रूप में' (1 पिक्सल बनाम 2 पिक्सल) के बीच की जगह। क्या किसी को पता है कि इसका क्या कारण हो सकता है, या मैं इसे कैसे होने से रोक सकता हूं? अंतर में बहुत अधिक समान अजीबता है क्योंकि मैं विभिन्न फोंट के साथ आकर्षित करता हूं, लेकिन मुझे लगता है कि वे एक ही समस्या के सभी परिणाम हैं।
आपके विचारों के लिए अग्रिम धन्यवाद।
अद्भुत, यह Win32 कोड का उपयोग किए बिना किया। धन्यवाद – Ko9
क्या कचरा कलेक्टर चलाने पर जीडीआई ऑब्जेक्ट जारी किया जाता है? –
नहीं। .NET में ब्रश और पेन ऑब्जेक्ट्स अप्रबंधित संसाधनों (जीडीआई ब्रश या कलम) के आसपास बस प्रबंधित रैपर हैं। जब कचरा कलेक्टर चलता है तो यह .NET wrapper से छुटकारा पाता है, लेकिन अंतर्निहित जीडीआई ऑब्जेक्ट नहीं। जीडीआई वस्तुओं के लिए अंगूठे का सामान्य नियम या तो उन्हें एक प्रयोग ब्लॉक में लपेटना है या स्पष्ट रूप से अपने अंतिम रूप में उनका निपटान करना है। आपको टास्क मैनेजर (जीडीआई ऑब्जेक्ट कॉलम चालू करें) का उपयोग करके इसे सत्यापित करने में सक्षम होना चाहिए और संसाधनों को रिसाव के रूप में गिनती में वृद्धि देखना चाहिए। यदि आप जीसी को कार्रवाई में लाते हैं तो भी गिनती नहीं जाएगी। –