2011-10-13 7 views
41

क्या विंडोज फॉर्म लेबल नियंत्रण में टेक्स्ट का हिस्सा हाइलाइट/चयन करना संभव है? मैं RTFtextbox नियंत्रण के साथ यह संभव जानता हूं लेकिन उस नियंत्रण का उपयोग करना अधिक होगा क्योंकि मुझे लेबल के कई उदाहरण बनाने की आवश्यकता है।क्या विंडोज फॉर्म लेबल पर टेक्स्ट का चयन करना संभव है?

+1

क्या आप "का चयन करें" मतलब है:


आप अपनी खुद की समारोह है कि यह सब प्रक्रिया क्या करेंगे लिख सकता है? इसका मतलब है कि इस पाठ का उपयोग करने के लिए कोड द्वारा इसे चुनें? – GianT971

+1

क्षमा करें @ जॉन ... चयन करके मेरा मतलब टेक्स्ट-चयन उदा। RichTextBox में आप पूरे टेक्स्ट के एक हिस्से को चुनने/हाइलाइट करने के लिए "चयनित टेक्स्ट" आदि गुणों का उपयोग कर सकते हैं। प्रभाव माउस के साथ मैन्युअल रूप से पाठ को चुनने/हाइलाइट करने जैसा ही है। – tunafish24

+2

बस एक विचार: आप लेबल से व्युत्पन्न कक्षा बना सकते हैं जिसमें आपके पास चयनित होने के लिए पाठ की शुरुआत और अंतराल को संग्रहीत करने के लिए कुछ संपत्ति है, फिर पेंट इवेंट पर ओवरराइड करना, आप – Marco

उत्तर

67

क्या विंडोज फॉर्म लेबल पर टेक्स्ट का चयन करना संभव है? - नहीं (लेबल.पेंट विधि को ओवरराइड किए बिना कम से कम कोई आसान तरीका नहीं)

आप इस उद्देश्य के लिए आसानी से टेक्स्टबॉक्स बदल सकते हैं।

TextBox1.Text = "Hello, Select Me"; 
TextBox1.ReadOnly = true; 
TextBox1.BorderStyle = 0; 
TextBox1.BackColor = this.BackColor; 
TextBox1.TabStop = false; 

विश्वास नहीं है? यहां आपके लिए एक उदाहरण है।

enter image description here

+7

जो समस्या आप चल सकते हैं वह यह है कि यदि आप टेक्स्टबॉक्स के टेक्स्ट को गतिशील रूप से सेट कर रहे हैं तो यह पाठ को छिपाएगा यदि यह लेबल के विपरीत टेक्स्टबॉक्स से बड़ा है। –

+2

@TheMuffinMan आपको «WordWrap» संपत्ति को «true» पर सेट करना होगा। –

+1

यदि आवश्यक हो, तो आप टेक्स्टबॉक्स की ऊंचाई को बदलने में सक्षम होने के लिए मल्टीलाइन = ट्रू भी सेट कर सकते हैं। –

7

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

5

उपयोग एक TextBoxBorderStyletrue और बैककलर साथ सेट करने के लिए None और Readonly सेट करने के लिए मैच के लिए कंटेनर की कि।

3

आप किसी लेबल पर टेक्स्ट का हिस्सा हाइलाइट करने में सक्षम नहीं होंगे। हालांकि, आप एक छवि का उपयोग कर सकते हैं और इसे लेबल पर सेट कर सकते हैं। इमेज प्रॉपर्टी यदि इन लेबलों के लिए टेक्स्ट स्थिर है।

+1

पर एक सेमिट्रांस्पेक्ट आयत को चित्रित कर सकते हैं। वास्तव में कार्यान्वित करने के लिए मुश्किल है, साथ ही पाठ गतिशील है - यही कारण है कि इसमें से कुछ को हाइलाइट करने की आवश्यकता क्यों है। – tunafish24

11

तरह बाला आर उत्तर दिया:

"किसी पाठ बॉक्स का उपयोग करें BorderStyle कोई नहीं पर सेट के साथ और केवल पढ़ने के लिए कंटेनर की है कि मैच के लिए सही और बैककलर करने के लिए सेट।"।

तो पाठ स्ट्रिंग बहुत लंबी है, और TextBox की Width सभी पाठ प्रदर्शित करने के लिए पर्याप्त नहीं है, तो आप TextBox की Width संपत्ति सब यह पाठ है प्रदर्शित करने के लिए सेट कर सकते हैं।

यदि आपको Width के लिए सही संख्या पता है, तो आप इसके लिए के MeasureString विधि का उपयोग कर सकते हैं। आप इस मामले में Control (TextBox) CreateGraphics() विधि से उदाहरण प्राप्त कर सकते हैं।

पहला पैरामीटर टेक्स्टबॉक्स टेक्स्ट है, और दूसरा पैरामीटर टेक्स्टबॉक्स का फ़ॉन्ट है। यह फ़ंक्शन SizeF संरचना देता है। आपको इसकी चौड़ाई संपत्ति की आवश्यकता है, इसे (int)size.Width या (int)Math.Round(size.Width) के साथ पूर्णांक में परिवर्तित करें।

ग्राफिक्स उदाहरण के Dispose() विधि को कॉल करना न भूलें, क्योंकि आपको अब इसकी आवश्यकता नहीं होगी।

static void SetText(TextBox textBox, string str) 
{ 
    Graphics graphics = textBox.CreateGraphics(); 
    SizeF size = graphics.MeasureString(str, textBox.Font); 
    graphics.Dispose(); 
    textBox.Width = (int)Math.Round(size.Width); 
    textBox.Text = str; 
} 
+1

यदि आपके पास एक निश्चित चौड़ाई वाला टेक्स्ट बॉक्स है जिसे आप इस कोड के साथ ऊंचाई का आकार देना चाहते हैं, तो यह प्रश्न देखें: https://stackoverflow.com/questions/29299297/measure-text-height-wrapped-in-a- निर्दिष्ट-चौड़ाई – QuickDanger