2011-07-10 16 views
5

प्रसंस्करण नहीं मैं लग दृश्य स्टूडियो में सी # में RichTextBox नियंत्रण के साथ एक बहुत ही असामान्य मुद्दा, प्रोग्रामिंग का अनुभव हो करने के लिए 2008RichTextBox नई लाइन/गाड़ी वापसी पात्रों

मैं वर्तमान में एक फ़ाइल है कि किया जा रहा है की धारा पढ़ रहा हूँ विंडोज कंसोल (आउटपुट रीडायरेक्शन के साथ) द्वारा लिखित, और मैं इसे अपने प्रोग्राम में पढ़ रहा हूं (अनिवार्य रूप से, मैं यूनिक्स दुनिया में "पूंछ" के रूप में जाना जाता हूं)।

जब बाइट्स की एक सरणी पढ़ी जाती है, तो मैं एक नई लाइन लाइन पर वापस लौटना चाहूंगा, और पढ़ना जारी रखूंगा। हालांकि, ऐसा लगता है कि मेरी आरटीबी नई लाइन या कैरिज रिटर्न पात्रों का जवाब नहीं देगी। उदाहरण के लिए, मैंने \n, \r\n, और यहां तक ​​कि Environment.NewLine स्ट्रिंग लिखे जाने के लिए भी प्रयास करने का प्रयास किया है, लेकिन कुछ भी काम नहीं कर रहा है। यह सिर्फ एक ही पंक्ति में लिखता रहता है।

यहाँ है कोड दिखाई देती है कि जो समस्या उत्पन्न कर रहे हैं:

string convertedBuffer = System.Text.Encoding.UTF8.GetString((byte[])e.UserState); 

outputBox.AppendText(convertedBuffer + "\n"); 

मैं वास्तव में एक नुकसान यहाँ पर हूँ, किसी को भी मदद कर सकते हैं?

उत्तर

5

शायद इसकी वजह से आप outputBox.Multiline संपत्ति को झूठी पर सेट करते हैं जो नियंत्रण को बहु-पंक्ति में पाठ दिखाने से रोक देगा।

संपादित करें: आप टिप्पणी में कहा

बाइट सरणी है कि भेजा जा रहा है एक है कि मैं सेट आकार का बना, 512 मैं अब बस बदल कि एक के लिए है कि वास्तव में फिट बैठता है डेटा भरा जा रहा था उस में है, और अब, अचानक, न्यू लाइन चरित्र के सभी फिर से काम करना शुरू

यहाँ क्या हुआ है:

सी # में string वर्गकी एक सरणी हैसरणी में पहले चार में पॉइंटर से शुरू होता है और विशेष "टर्मिनल" char \0 द्वारा समाप्त होता है। तो जब आप System.Text.Encoding.UTF8.GetString(buffer) पर कॉल करते हैं तो बफर आकार स्ट्रिंग आकार से बड़ा होता है तो यह स्ट्रिंग के सभी शेष वर्णों को चार सरणी में टर्मिनल चार पर सेट करेगा। वर्णों की सरणी some text\0\0\0 जैसी कुछ होगी, इसलिए मैं अनुमान अनुमान लगाता हूं कि जब आप Environment.NewLine जोड़ते हैं तो यह इसे \0 के बाद चार सरणी के अंतिम सूचकांक में जोड़ देगा और फिर चार सरणी some text\0\0\r\n होगी और नई पंक्ति के कारण टर्मिनल के बाद यह अनदेखा कर देगा।

+0

में चिंता करने की हो गया होता है कि नहीं है मेरा अनुमान भी, दुर्भाग्यवश, मल्टीलाइन मान सत्य पर सेट है। अधिक जानकारी के लिए, जब मैं टेक्स्ट प्रॉपर्टी को उस पर जोड़ने के बजाए असाइन करता हूं, ऐसा लगता है कि न्यूलाइन अक्षरों को पूरी तरह से पहचाना जाता है, क्योंकि मैं अपने कर्सर को दो लाइनों के नीचे जाने के साथ देख सकता हूं \ n \ n। हालांकि, ऊपर पोस्ट कोड के मेरे ब्लॉक में, यह अभी भी काम नहीं कर रहा है। – TGP1994

+0

@ टीजीपी 1 9 4 9: यह अजीब है। मैंने इसे चेक किया: एक नया 'फॉर्म' 'फॉर्म 1' जोड़ा और इसे अपने डिफ़ॉल्ट मानों के साथ एक नया 'richTextBox1' जोड़ें। अब कोड पर 'मल्टीटेक्स्टबॉक्स 1। ऐपेंडटेक्स्ट ("परीक्षण ..." + पर्यावरण। न्यूलाइन) जैसी मल्टी ऐड लाइन का मूल्यांकन करें; richTextBox1.AppendText ("परीक्षण ..." + पर्यावरण। न्यूलाइन); 'यह अपेक्षित के रूप में काम करेगा ... –

+0

System.Text.Encoding.UTF8 से उत्पन्न स्ट्रिंग को जोड़ने के बारे में क्या।GetString()? – TGP1994

-2

बस अलग से डाल "\ n" या Environment.NewLine इस प्रकार है:

outputBox.AppendText(convertedBuffer); 
outputBox.AppendText("\n"); 

यह मेरे लिए काम करता है ... और आप के बारे में \ 0

+0

कोशिश के लिए धन्यवाद, Jakub। :) मुझे डर है कि आप कई सालों से देर हो चुकी हैं और एक सही उत्तर छोटा है ... मेरे प्रश्न में मैं पहले से ही एक नई लाइन जोड़ रहा था। – TGP1994

+0

हाय, हाँ मैं देर से विज्ञापन था मुझे एक ही समस्या थी। दुर्भाग्यवश आप स्ट्रिंग के साथ एक साथ नई लाइन जोड़ते हैं और इससे मुझे समस्या आती है। एक बार जब मैं इसे अलग करता हूं, यह मेरे लिए काम करता है ;-) – Jakub