c# - Autoscale Font in a TextBox Control so that its as big as possible and still fits in text area bounds -
मुझे एक टेक्स्ट बॉक्स या कुछ प्रकार के मल्टी-लाइन लेबल नियंत्रण की आवश्यकता है जो स्वचालित रूप से इसे बड़े आकार के रूप में बनाने के लिए फ़ॉन्ट-आकार समायोजित करेगा संभव है और अभी तक पूरे संदेश को टेक्स्ट क्षेत्र की सीमा के अंदर फिट किया गया है।
मैं देखना चाहता हूं कि क्या किसी ने अपना खुद का विकास करने से पहले इस तरह उपयोगकर्ता नियंत्रण लागू किया है।
उदाहरण आवेदन: एक टेक्स्ट बॉक्स है जो विंडो के एक हिस्से पर आधा हिस्सा होगा। जब कोई संदेश आता है जिसमें लगभग 100-500 वर्ण होंगे तो वह सभी पाठ को नियंत्रण में लगाएगा और जितना संभव हो उतना बड़ा फ़ॉन्ट सेट कर देगा। एक कार्यान्वयन जो मोनो समर्थित .NET लाइब्रेरी का उपयोग करता है एक प्लस होगा।
अगर किसी को पहले से ही एक नियंत्रण लागू किया गया है ... अगर कोई जानता है कि कोई पाठ पाठ क्षेत्र में पूरी तरह से फिट हो जाता है तो कोई कैसे परीक्षण कर सकता है यदि मैं अपना नियंत्रण रोल करता हूं तो उपयोगी हो।
संपादित करें: मैंने RichTextBox को एक एक्सटेंशन लिखना समाप्त कर दिया मैं अपने कोड को शीघ्र ही एक बार पोस्ट कर दूंगा जब मैंने यह सत्यापित कर लिया है कि सभी कम्नों काम कर रहे हैं।
मेरे पास था उसी बुनियादी समस्या को हल करने के लिए ऊपर चलने वाले समाधान बहुत धीमे थे। इसलिए, मैंने इसे निम्नलिखित के साथ संशोधित किया। एक ही विचार बस पुनरावृत्त के बजाय गणना के अनुपात का उपयोग करता है शायद, बिल्कुल सटीक नहीं लेकिन, बहुत तेज़।
मेरी एक बंद की आवश्यकता के लिए, मैंने सिर्फ मेरे पाठ को धारण करने वाले लेबल पर एक ईवेंट हैंडलर फेंक दिया।
निजी शून्य PromptLabel_TextChanged (ऑब्जेक्ट प्रेषक, सिस्टम .EventArgs ई) {if (PromptLabel.Text.Length == 0) {वापसी; } फ्लोट ऊँचाई = प्रॉम्प्टलैबेल। हाइट * 0.9 9 एफ; फ्लोट चौड़ाई = प्रॉम्प्टलैबेल विड्थ * 0.9 9 एफ; PromptLabel.SuspendLayout (); फ़ॉन्ट का प्रयास करें फॉन्ट = प्रॉम्प्टलाबेल.फॉन्ट; आकार tempSize = TextRenderer.MeasureText (PromptLabel.Text, tryFont); फ्लोट की ऊँचाई रटियो = ऊंचाई / तापमान। फ्लोट चौड़ाईराइटियो = चौड़ाई / tempSize.Width; TryFont = नया फ़ॉन्ट (tryFont.FontFamily, tryFont.Size * Math.Min (widthRatio, heightRatio), tryFont.Style); PromptLabel.Font = tryFont; PromptLabel.ResumeLayout (); }
Comments
Post a Comment