2011-12-16 17 views
44

मैं multi-lineTextBox पर टेक्स्ट की एक पंक्ति कैसे जोड़ सकता हूं?मल्टीलाइन टेक्स्टबॉक्स में कोई लाइन कैसे जोड़ें?

उदा। स्यूडोकोड;

textBox1.Clear(); 
textBox1.Lines.Add("1000+"); 
textBox1.Lines.Add("750-999"); 
textBox1.Lines.Add("400-749"); 
...snip... 
textBox1.Lines.Add("40-59"); 

या

textBox1.Lines.Append("brown"); 
textBox1.Lines.Append("brwn"); 
textBox1.Lines.Append("brn"); 
textBox1.Lines.Append("brow"); 
textBox1.Lines.Append("br"); 
textBox1.Lines.Append("brw"); 
textBox1.Lines.Append("brwm"); 
textBox1.Lines.Append("bron"); 
textBox1.Lines.Append("bwn"); 
textBox1.Lines.Append("brnw"); 
textBox1.Lines.Append("bren"); 
textBox1.Lines.Append("broe"); 
textBox1.Lines.Append("bewn"); 

केवल तरीकों कि TextBox.Lines औजार (है कि मैं देख सकते हैं) कर रहे हैं:

  • क्लोन
  • CopyTo
  • बराबर
  • GetType
  • GetHashCode
  • GetEnumerator
  • प्रारंभ
  • GetLowerBound
  • GetUpperBound
  • GetLength
  • GetLongLength
  • getValue
  • setValue
  • ToString

enter image description here

+1

क्या आप एपेंड (एनवीरोमेंट न्यूलाइन) का उपयोग नहीं कर सकते ?? – jclozano

+1

टेक्स्टबॉक्स। लाइन्स टेक्स्ट का केवल पढ़ने का प्रतिनिधित्व है। कृपया http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.lines.aspx पर रेफर करें। – Casperah

+0

@ कैस्परह ओह, यह समझाने में मदद करता है कि इसका उपयोग करने के लिए इसका उपयोग क्यों नहीं किया जा सकता है - माइक्रोसॉफ्ट एक धीमी कोड पथ –

उत्तर

90

@ कैस्परह ने इंगित किया कि मैं इसके बारे में गलत सोच रहा हूं। TextBox लाइनें हैं, इसमें टेक्स्ट है। अनुरोध किया गया है कि उस पाठ को सीआरएलएफ पर लाइनों में विभाजित किया जा सकता है - लेकिन लाइनों की कोई धारणा नहीं है।

प्रश्न यह है कि WinForms मुझे क्या करने की बजाय, मैं जो चाहता हूं उसे पूरा करने का तरीका है।

अन्य दी वेरिएंट एक सूक्ष्म बग है:

  • textBox1.AppendText("Hello" + Environment.NewLine);
  • textBox1.AppendText("Hello" + "\r\n");
  • textBox1.Text += "Hello\r\n"
  • textbox1.Text += System.Environment.NewLine + "brown";

वे या तो संलग्न या जब एक (हो सकता है) एक नई पंक्ति पहले जोड़ें नहीं आवश्यकता होगी।

तो, विस्तार सहायक:

public static class WinFormsExtensions 
{ 
    public static void AppendLine(this TextBox source, string value) 
    { 
     if (source.Text.Length==0) 
     source.Text = value; 
     else 
     source.AppendText("\r\n"+value); 
    } 
} 

तो अब:

textBox1.Clear(); 
textBox1.AppendLine("red"); 
textBox1.AppendLine("green"); 
textBox1.AppendLine("blue"); 

और

textBox1.AppendLine(String.Format("Processing file {0}", filename)); 

नोट: किसी भी कोड सार्वजनिक डोमेन में जारी किया गया है। कोई विशेषता आवश्यक है।

+0

नोट: स्ट्रिंग.फॉर्मैट ("\ r \ n") * काम नहीं करेगा। – ouflak

13

एक नई लाइन पर पाठ डाल करने के लिए स्ट्रिंग के लिए एक \r\n जोड़ें।

textBox1.Text += ("brown\r\n"); 
textBox1.Text += ("brwn"); 

यह अलग-अलग लाइनों पर दो प्रविष्टियों का उत्पादन करेगा।

+4

यह काम नहीं करेगा, 'टेक्स्टबॉक्स' नियंत्रण ठीक से \ n' को संभाल नहीं पाएगा, आपको इसके लिए '\ r \ n' का उपयोग करना होगा, कृपया अपने आप को जांचें – Vamsi

+0

अच्छी कॉल @VamsiKrishna –

+0

या 'पर्यावरण। न्यूलाइन' – Jack

0

बस अपने टेक्स्ट में एक लाइन ब्रेक डालें।

आप एक विधि के रूप में लाइनें नहीं जोड़ते हैं। मल्टीलाइन बस लाइन ब्रेक के उपयोग का समर्थन करता है।

15

मैं System.Environment.NewLine या एक StringBuilder

साथ जाना होगा तो फिर तुम इस तरह एक स्ट्रिंग बिल्डर के साथ लाइनों जोड़ सकते हैं:

StringBuilder sb = new StringBuilder(); 
sb.AppendLine("brown"); 
sb.AppendLine("brwn"); 

textbox1.Text += sb.ToString(); 

या न्यू लाइन इस तरह:

textbox1.Text += System.Environment.NewLine + "brown"; 
+0

शायद यह sb.AppendLine ("ब्राउन") होना चाहिए था ... – Casperah

+0

हाँ अच्छा बिंदु! – Matt

+0

अच्छा उत्तर, लेकिन कन्स्ट्रक्टर का नाम कक्षा के नाम के समान है - स्ट्रिंगबिल्डर (डी लापता) :) –

5

इस प्रयास करें

textBox1.Text += "SomeText\r\n" 

तुम भी कोशिश कर सकते हैं

textBox1.Text += "SomeText" + Environment.NewLine; 

कहाँ \r गाड़ी वापसी है और \n नई लाइन

3

है आप सीधे पाठ बॉक्स के AppendText विधि का उपयोग करने के लिए है।यदि आप Text प्रॉपर्टी का उपयोग करने का प्रयास करते हैं, तो टेक्स्ट लाइन नीचे स्क्रॉल नहीं होगी क्योंकि नई लाइन संलग्न की गई है।

textBox1.AppendText("Hello" + Environment.NewLine); 
3

टेक्स्टबॉक्स की "लाइन्स" संपत्ति तारों की एक सरणी है। परिभाषा के अनुसार, आप मौजूदा string[] पर तत्व जोड़ नहीं सकते हैं, जैसे कि आप List<string> पर जा सकते हैं। उद्देश्य के लिए बस कोई विधि उपलब्ध नहीं है। आपको वर्तमान पंक्ति संदर्भ के आधार पर एक नया string[] बनाना होगा, और इसे लाइनों को असाइन करना होगा।

एक छोटे से Linq (.NET 3.5 या बाद में) का उपयोग करना:

textBox1.Lines = textBox.Lines.Concat(new[]{"Some Text"}).ToArray(); 

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

var myLines = new List<string>(); 

myLines.Add("brown"); 
myLines.Add("brwn"); 
myLines.Add("brn"); 
myLines.Add("brow"); 
myLines.Add("br"); 
myLines.Add("brw"); 
... 

textBox1.Lines = myLines.ToArray(); 

फिर भी, क्योंकि लाइन्स सरणी एक गणना की संपत्ति है, इस पर्दे के पीछे अनावश्यक रूपांतरण का एक बहुत शामिल है।

0

यदि आप जानते हैं कि आप कितनी लाइनें चाहते हैं, तो कई सदस्यों (जैसे myStringArray) के साथ स्ट्रिंग की एक सरणी बनाएं। फिर मेरा लिस्टबॉक्स का उपयोग करें।रेखाएं = myStringArray;

1

Environment.NewLine या \r\n जोड़ने से मेरे टेक्स्टबॉक्स के साथ शुरुआत में मेरे लिए काम नहीं कर रहा था। मैंने पाया कि मैं टेक्स्टबॉक्स के व्यवहार गुणों में जाने के लिए भूल गया था और मल्टीलाइन "संपत्ति" "" लाइनों को जोड़ने के लिए "" पर सेट करें! मैंने सोचा कि मैं इस चेतावनी को जोड़ूंगा क्योंकि उत्तर में किसी और ने जवाब नहीं दिया है, और मैंने सोचा था कि बॉक्स बस ऑटो-विस्तार करने जा रहा था और भूल गया था कि मुझे वास्तव में काम करने के लिए Mulitline संपत्ति सेट करने की आवश्यकता है। मुझे पता है कि यह एक हड्डी की चीज की तरह है (जो कि शुक्रवार दोपहर के अंत में हमारे साथ होती है), लेकिन इससे किसी को यह जांचने में मदद मिल सकती है। इसके अलावा, उपस्थिति अनुभाग में "स्क्रॉलबार" संपत्ति है जिसे मुझे "दोनों" पर सेट करने की आवश्यकता होती है, दोनों क्षैतिज और ऊर्ध्वाधर सलाखों को प्राप्त करने के लिए ताकि टेक्स्ट वास्तव में स्क्रॉल किया जा सके और पूरी तरह से देखा जा सके। तो यहां जवाब Environment.NewLine या \r\n को .Text में जोड़कर केवल एक कोड नहीं है, बल्कि यह भी सुनिश्चित करें कि आपका बॉक्स सही गुणों के साथ ठीक से स्थापित हो।

0

उपरोक्त विधियां मेरे लिए काम नहीं करतीं।

Exception : 'System.InvalidOperationException' in System.Windows.Forms.dll 

बाहर कर देता है मैं अपने नियंत्रण पर Invoke कॉल करने के लिए की जरूरत है: मैं निम्न अपवाद मिला है। उत्तर here देखें।

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