2012-05-21 9 views
6

मेरे पास ऑफसेट्स की एक बड़ी सूची है जिसे मुझे अपने RichTextBox में हाइलाइट करने की आवश्यकता है। हालांकि इस प्रक्रिया में बहुत अधिक समय लग रहा है। मैं निम्नलिखित कोड का उपयोग कर रहा हूं:रिचटेक्स्टबॉक्स में हाइलाइटिंग बहुत लंबा लग रहा है

foreach (int offset in offsets) 
{ 
    richTextBox.Select(offset, searchString.Length); 
    richTextBox.SelectionBackColor = Color.Yellow; 
} 

क्या ऐसा करने का एक और अधिक प्रभावी तरीका है?

अद्यतन:

इस पद्धति का उपयोग की कोशिश की, लेकिन यह कुछ भी उजागर नहीं करता है:

richTextBox.SelectionBackColor = Color.Yellow; 
foreach (int offset in offsets) 
{ 
    richTextBox.Select(offset, searchString.Length); 
} 
+0

क्षमा करें, मुझे नहीं पता था कि सवाल Winforms के बारे में था। मैं आपका प्रश्न फिर से अनुत्तरित करने के लिए अपना उत्तर हटा दूंगा। – dasblinkenlight

+0

वैसे भी धन्यवाद @dasblinkenlight – user1135357

+0

रीयल टाइम में रिचटेक्स्टबॉक्स वाक्यविन्यास हाइलाइटिंग के संभावित डुप्लिकेट - पेंटेंट को अक्षम करना] (http://stackoverflow.com/questions/3282384/richtextbox-syntax- हाइलाइटिंग-in-real-time- अक्षम करना- -repaint) –

उत्तर

0

यह कोई फर्क पड़ता है अगर आपको लूप से बाहर SelectionBackColor सेट?

रिफ्लेक्टर शो के साथ रिचटेक्स्टबॉक्स में देख रहे हैं, कि रंग सेट होने पर हर बार जब एक विंडो मैसेज नियंत्रण में भेजा जाता है। ऑफसेट की बड़ी संख्या के मामले में यह बार-बार पहले से हाइलाइट किए गए शब्दों को हाइलाइट करने का कारण बन सकता है, जिससे ओ (एन^2) व्यवहार होता है।

+0

पहले से ही कोशिश की है। यह कुछ भी हाइलाइट नहीं करता है: 'richTextBox.SelectionBackColor = Color.Yellow; foreach (ऑफसेट में int ऑफसेट) { richTextBox.Select (ऑफ़सेट, searchString.Length); } ' – user1135357

1

मैंने आपकी समस्या को गुमराह किया है और मैंने पाया कि कई रेखाएं होने पर RichTextBox बहुत धीमी हो रही है।
मेरी राय में, आपने या तो तीसरा हिस्सा नियंत्रण खरीदा है जिसे आप इसके प्रदर्शन से संतुष्ट कर सकते हैं या आपको पूरे चयन कार्य को विभाजित करने के लिए धागे की आवश्यकता हो सकती है। मुझे लगता है कि वे चीजों को तेज कर सकते हैं।
उम्मीद है कि यह मदद करता है!

+0

मुझे लगता है कि यह [नियंत्रण] (http://www.telerik.com/products/winforms/richtextbox.aspx) मेरी समस्या का समाधान करेगा – user1135357

+0

मैंने टेलीरिक और डेवएक्सप्रेस नियंत्रणों के बारे में बहुत अच्छी बातें सुनी हैं। इसलिए उन्हें अपनी समस्या का पर्दाफाश करने में संकोच न करें और देखें कि वे आपको किस समाधान की पेशकश कर सकते हैं। – HichemSeeSharp

+0

यदि आप उपर्युक्त समाधानों में से किसी एक के साथ समाप्त होते हैं, तो कृपया इसे उत्तर के रूप में चिह्नित करें। – HichemSeeSharp

1

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

आप आरजीबी मानों के साथ खेल सकते हैं, या here is a great source आरटीएफ नियंत्रण के भीतर विभिन्न चीजों को कैसे करें। इस कोड को अपने कोड में पॉप करें और देखें कि यह कितना अच्छा काम करता है। मैं SQL कोड के लिए रीयलटाइम सिंटैक्स हाइलाइटिंग प्रदान करने के लिए इसका उपयोग करता हूं।

public void HighlightText(int offset, int length) 
    { 
     String sText = richTextBox.Text.Trim(); 
     sText = sText.Insert(offset + length - 1, @" \highlight0"); 
     sText = sText.Insert(offset, @" \highlight1"); 
     String s = @"{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Courier New;}} 
      {\colortbl ;\red255\green255\blue0;}\viewkind4\uc1\pard"; 
     s += sText; 
     s += @"\par}"; 
     richTextBox.Rtf = s; 
    } 
+0

मुझे खेद है कि मुझे आपका कोड बिल्कुल समझ में नहीं आया, लेकिन मैंने अपने कोड में बस अपना कोड कॉपी और पेस्ट करने की कोशिश की और हर बार जब मैं कुछ हाइलाइट करना चाहता हूं तो इस विधि को कॉल करें लेकिन यह नहीं किया बिल्कुल काम नहीं करते हैं। चलो, आपकी मदद के लिए धन्यवाद। मैं हार मानता हूं! – user1135357

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