2009-06-17 9 views
10

मैं अपने टेक्स्ट बेसलाइनों द्वारा Label और NumericUpDown को संरेखित करने का प्रयास कर रहा हूं। मैं इसे डिजाइनर के बजाय कोड में कर रहा हूं। मैं टेक्स्ट बेसलाइन की स्थिति कैसे प्राप्त करूं?मुझे लेबल में टेक्स्ट बेसलाइन की स्थिति और न्यूमेरिक अपडाउन कैसे प्राप्त हो सकता है?

उत्तर

13

// निर्देशांक (pt.X, pt.Y) में आधारभूत के साथ पाठ रेंडर करने के लिए:

Font myFont = Label1.Font; 
FontFamily ff = myFont.FontFamily; 

float lineSpace = ff.GetLineSpacing(myFont.Style); 
float ascent = ff.GetCellAscent(myFont.Style); 
float baseline = myFont.GetHeight(ev.Graphics) * ascent/lineSpace; 

PointF renderPt = new PointF(pt.X, pt.Y - baseline)); 
ev.Graphics.DrawString("Render this string", myFont, textBrush, renderPt); 
2

लेबल नियंत्रण के लिए, आप पाठ के नीचे इस तरह की स्थिति को प्राप्त कर सकते हैं:

.TextAlign मान लिया जाये कि TopLeft या TopCenter या Topright, लेबल नियंत्रण में पाठ के तल पर सेट किया जाता कर सकते हैं इस विधि से मिलें:

dim btmOfText as single 
btmOfText = Label1.Font.GetHeight + Label1.Top 

.GetHeight विधि लेबल द्वारा उपयोग किए जाने वाले वर्तमान फ़ॉन्ट के पिक्सेल में ऊंचाई को वापस लाती है।
यदि .TextAlign मध्य या नीचे है, तो आपको थोड़ा और जटिल गणना करने की आवश्यकता है।

यह वही विधि न्यूमेरिक अपडाउन नियंत्रण के साथ भी काम करेगी।

+0

GetHeight फ़ॉन्ट का आधारभूत की स्थिति है, लेकिन के शीर्ष की स्थिति वापस नहीं करता है अगली पंक्ति इस तरह से विंडोज फोंट खराब हो जाते हैं। यहां कोई आसान जवाब नहीं है। – dar7yl

+0

मैंने देखा कि स्टीवबॉब अपने जवाब की मेरी कमजोरता से नाखुश था, और मेरी कई पोस्टों को कम करके बदला गया है। मैं यहां उच्च सड़क ले रहा हूं और इसे पूरी तरह से युद्ध में नहीं बढ़ा रहा हूं। – dar7yl

+0

@ dar7yl ... उम्म ... तुम कौन हो? मुझे लगता है कि आपके पास मेरी पोस्ट पर टिप्पणियां हैं, लेकिन मुझे आखिरी समझ में नहीं आता? – Stewbob

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