Tuesday 15 April 2014

c# - Strange Label AutoSize issue on TableLayoutPanel resize -


पृष्ठभूमि:

मेरे पास एक TableLayoutPanel है जो कि UserControl में रखा गया है तब स्प्लिट कंटनेयर में रखा गया है। पंक्तियों को प्रोग्राममेटिक रूप से जोड़ा जाता है। टाइल लेआउटपैनेल एंकर शीर्ष | वाम | ठीक है, इसलिए पंक्तियों के बाद जोड़ा जाता है, इसकी ऊंचाई फिर से गणना की जाती है और यह नीचे की ओर फैलता है।

टेबल लेआउटपैनेल के अंदर, 2 कॉलम हैं। पहला स्तंभ का आकार पूर्ण है, दूसरा कॉलम का आकार स्वतः आकार है

प्रत्येक कोशिका में एक लेबल होता है दूसरे कॉलम में सभी लेबल इस प्रकार परिभाषित किए गए हैं:

  लेबल vName = new label (); VName.AutoSize = सच; VName.Anchor = AnchorStyles.Left | एंकरस्टाइल। शीर्ष | एंकर स्टाइल। राइट | AnchorStyles.Bottom; VName.Margin = नया पैडिंग (3); VName.TextAlign = सामग्रीएलिन्मेंट। मिडिललफ्ट; VName.Name = "controlName"; VName.Text = "कुछ पाठ यहाँ"; VName.DoubleClick + = नए इवेंटहाँडलर (vName_DoubleClick); VName.Dock = DockStyle.None;  समस्या:   

आमतौर पर सब कुछ ठीक है, लेबल का आकार बदलता है और सब कुछ, एक अजीब परिदृश्य के अलावा: < Ol>

  • लेबल का पाठ "डिवाइस को स्थिर करता है (33.33%)" जैसा कुछ है, टेबललॉउटपैनेल स्तंभ 2 की चौड़ाई बिल्कुल सेट है ताकि सभी पाठ को एक पंक्ति में दिखाया जा सके।
  • स्प्लिटर दूरी परिवर्तन एक पिक्सेल और यूज़र कंट्रोल का आकार बदलता है: चौड़ाई घट जाती है, लेबल को लेबल करना चाहिए और लेबल में पाठ करना चाहिए
  • लेबल का आकार बदलना नहीं है और पाठ की दूसरी पंक्ति नहीं दिखाया गया है , शायद यह भी संभव है लपेटता नहीं (एक लेबल में पाठ स्थान में बदलाव होगा यदि यह मामला होता है)
  • एक पिक्सेल से फिर से विभक्त दूरी परिवर्तन और यूजरकंट्रोल का आकार बदल दिया गया है: चौड़ाई आगे घट जाती है
  • लेबल सभी अधिकारों का आकार बदलता है और सभी पाठ दिखाए जाते हैं, लपेटा जाता है

    एक ही बात तब होती है जब TableLayoutPanel की चौड़ाई बढ़ जाती है, लेकिन हमेशा तब होती है जब एक पिक्सेल का अंतर होता है (लपेटने / )।

    इसके अलावा, लेबल्स की डॉक और / या एंकर और / या बॉर्डर स्टाइल गुणों को बदलना (मैं संभवत: सभी संभव संयोजनों की कोशिश करता है ...)

    यह तस्वीर इस मुद्दे को थोड़ा सा दिखाती है: Img src = "https://i.stack.imgur.com/kMZXF.png" alt = "छवि विवरण यहां दर्ज करें">

    जाहिरा तौर पर यह एक लेबल समस्या है: जब स्वत: आटोसिंग करना सही ढंग से पाठ को मापना नहीं था और कभी-कभी एक पिक्सल अंतर होता है मुझे एक अजीब समाधान मिल गया है, हालांकि, अगर कोई बेहतर जानता है तो कृपया मुझे उजागर करें।

    इस तरह मेरे लेबल में पाठ हर बार सही तरीके से लपेटता है और सब कुछ ठीक से स्वत: चला जाता है:

     < कोड> शून्य तालिका लेआउटपैनेल 1_चा आकार (ऑब्जेक्ट प्रेषक, इवेंटएरग्स ई) {फ्लोट एफडब्ल्यूडथ = टेबल लेआउटपैनेल 1। गेट कॉलम विड्थ्स () [1]; Foreach (टेबल लेआउटपैनेल 1 नियंत्रण कक्ष में नियंत्रण सीटीआर) {यदि (सीटीआर लेबल है & amp; amp; amp; सीटीआर.नाम.संसाधन ("vName_")) {// मार्जिन के लिए 7 आकार s = TextRenderer.MeasureText (ctr.Text, ctr फ़ॉन्ट, नया आकार ((int) fWidth - 7,1000), पाठफ़ॉर्मेटफ़्लैग.वर्टीकल केंद्र | टेक्स्टफ़ॉर्मैटफ़्लैग.लिफ्ट | टेक्स्टफ़ॉर्मैटफ़्लैग.पैडिंग | टेक्स्टफ़ॉर्मैटफ़्लैग। वर्डब्रैक); यदि (! Ctr.maximumize.Equals (s)) ctr.MaximumSize = नया आकार (s.Width, s.Height); }}}     पर क्लिक करें

  • No comments:

    Post a Comment