2012-02-12 10 views
5

मेरी पहली सोचा यह कुछ इस तरह होता था:टेक्स्टबॉक्स की असली ऊंचाई कैसे प्राप्त करें?

int height = textbox.lines.length * lineheight; 

लेकिन यह सिर्फ मायने रखता है "\ xd \ n" और लाइनों लिपटे जा सकता है। क्या सबकुछ दिखाई दे रहा है (अंदर पाठ की ऊंचाई) जब मुझे प्रदर्शित लाइनों या टेक्स्टबॉक्स की वास्तविक ऊंचाई की संख्या मिल सकती है?

+2

winform wpf? क्या? आप जानते हैं कि हम आपके बगल में नहीं खड़े हैं, है ना? – gdoron

+0

संभावित डुप्लिकेट [मैं System.indows.Forms.TextBox पर केवल स्क्रॉलबार कैसे दिखा सकता हूं जब टेक्स्ट फिट नहीं होता है?] (Http://stackoverflow.com/questions/73110/how-can-i-show- scrollbars-on-a-system-windows-forms-textbox-only-when-the-text-d) –

+0

हंस पासेंट, शायद आंशिक रूप से यह है, लेकिन इसके अलावा सभी उत्तरों http://stackoverflow.com/a/4147348/1205147 गलत हैं, और b8adamson द्वारा उत्तर मुझे बहुत लंबा और बोल्ड लगता है। मैं उम्मीद करता हूं कि एक अच्छा और बेहतर कामकाज है :) – Mike

उत्तर

6

मैं अगर तुम कभी एक आदर्श माप मिल जाएगा पता नहीं है, लेकिन यह करीब हो जाता है:

private int GetTextHeight(TextBox tBox) { 
    return TextRenderer.MeasureText(tBox.Text, tBox.Font, tBox.ClientSize, 
      TextFormatFlags.WordBreak | TextFormatFlags.TextBoxControl).Height; 
} 

पाठ बॉक्स नासमझ हो सकता है। मल्टी-लाइन चालू होने पर, यदि आप एक ऐसा अक्षर दबाते हैं जो शब्द को शब्द-लपेटने का कारण बनता है, तो बैकस्पेस को मारने से यह "अन-वर्ड-रैप" नहीं होता है जब तक कि मैं टेक्स्टबॉक्स का आकार बदलता हूं। यह Win7-64 पर था। मैं नहीं सोचता टेक्स्टबॉक्स नियंत्रण हमेशा ऐसा करता है।

+3

TextFormatFlags.TextBoxControl इसे थोड़ा कम मूर्ख बनाता है। –

+0

हाँ, धन्यवाद, लार्स। मैंने पहले से ही कुछ बनाया है: http://stackoverflow.com/a/4147348/1205147 – Mike

+1

बढ़िया! मैंने लाइनिक्स की संख्या के साथ संयोजन में ग्राफिक्स.मेजरटेक्स्ट का उपयोग करने की कोशिश की (मेरे मामले में कोई शब्द-लपेटना आवश्यक नहीं है)। इस विधि को प्रत्येक पंक्ति के लिए थोड़ा अधिक गणना की जाती है, इसलिए जब कई रेखाएं, मेरी विधि अतिरिक्त जगह के साथ अजीब लगती थी। आपकी विधि बिल्कुल स्पॉट पर गणना की गई है! उत्तम!! – awe

0

फ़ंक्शन GetLineFromCharIndex() आपको कोरेंट लाइन इंडेक्स देता है, भले ही पाठ लपेटा गया हो।

int lineCount = textBox1.GetLineFromCharIndex(int.MaxValue) + 1; 
int lineHeightPixel = TextRenderer.MeasureText("X", textBox1.Font).Height; 

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

  • कोई संबंधित समस्या नहीं^_^