.net - विंडोज फॉर्म एप्लिकेशन के लिए डिफ़ॉल्ट फ़ॉन्ट




winforms user-interface (6)

हर बार जब मैं अपने आवेदन में एक नया रूप बनाता हूं, तो यह डिफ़ॉल्ट रूप से "माइक्रोसॉफ्ट सैन्स सेरिफ़, 8.25pt" फ़ॉन्ट का उपयोग करता है। मैं इसे बदल नहीं रहा क्योंकि मुझे पता है कि इस मामले में मेरा फॉर्म सिस्टम के लिए जो भी डिफ़ॉल्ट फ़ॉन्ट है उसे उठा लेना चाहिए । हालांकि, जब मैं अपना आवेदन चलाता हूं, तो इस्तेमाल किया जाने वाला फ़ॉन्ट अभी भी कुछ भी है लेकिन सेगो यूआई (मेरे विंडोज़ विस्टा ओएस में मेरा डिफ़ॉल्ट सिस्टम फ़ॉन्ट)।

ऐसा क्यों होता है? मैं कैसे सुनिश्चित कर सकता हूं कि मेरा एप्लिकेशन एक सामान्य विंडोज अनुप्रयोग की तरह दिखता है?


आप प्रपत्र निर्माता (ओं) में InitializeComponent () से पहले जोड़ सकते हैं:

this.Font = SystemFonts.MessageBoxFont;

यह विंडोज एक्सपी और विंडोज विस्टा के साथ काम करने लगता है।


इसे आज़माएं, एक फॉर्म पर क्लिक करें और फ़ॉन्ट आकार बदलें उदाहरण के लिए मैंने फॉर्म का फ़ॉन्ट आकार 12pt में बदल दिया है और फिर फॉर्म में ड्रैग टेक्स्ट बॉक्स द्वारा परीक्षण किया है। आप देखेंगे, टेक्स्टबॉक्स आकार भी 12pt में बदल दिया गया है। मुझे अभी यह समाधान दुर्घटना से मिला है।


फॉर्म में डिफ़ॉल्ट फ़ॉन्ट के बारे में बात करते हुए इस ब्लॉग एंट्री को देखें, जिससे आप जिस समस्या का सामना कर रहे हैं और माइक्रोसॉफ्ट की प्रतिक्रिया के साथ कनेक्ट कनेक्ट बग की ओर जाता है। संक्षेप में ऐसा लगता है कि फ़ॉर्म को (सही) डिफ़ॉल्ट विंडोज फ़ॉन्ट नहीं मिला है (जिसे आपने बदल दिया है)।


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

        foreach (Control ctr in this.Controls)
        {
            ctr.Font = SystemFonts.IconTitleFont;

            // controls in groupboxes are not child of main form
            if (ctr.HasChildren)
            {
                foreach (Control childControl in ctr.Controls)
                {
                    childControl.Font = SystemFonts.IconTitleFont;
                }
            }        
        }

हां, यह GetStockObject(DEFAULT_GUI_FONT) द्वारा लौटाए गए फ़ॉन्ट का उपयोग करता है। एमएस सैन्स सेरिफ कौन सा है। एक पुराना फ़ॉन्ट, ज्यादातर मशीनों से लंबे समय तक चला गया। फ़ॉन्ट मैपर इसका अनुवाद करता है, कोई आश्चर्य नहीं, माइक्रोसॉफ्ट सैन्स सेरिफ़।

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


Control.DefaultFont केवल पढ़ने के लिए है; एक हैकी ओवरराइट करना था प्रतिबिंब का उपयोग करना है।

Type settingsType = typeof(Control);
var defaultFontField = settingsType.GetField("defaultFont", BindingFlags.Static | BindingFlags.NonPublic);
defaultFontField.SetValue(null, new Font("Segoe UI", 8.25F));

इस कोड पर नजर रखने के लिए यूटी रखना सुनिश्चित करें, फ्रेमवर्क कार्यान्वयन में बदलाव होने पर आपकी सुरक्षा के लिए कोई एपीआई अनुबंध नहीं है।

फॉर्म डिज़ाइनर के बारे में भी जागरूक रहें जो अधिकतर समय .designer कक्षाओं में फ़ॉन्ट verbatim डालेंगे।





appearance