/ / एक रिच टेक्स्ट बॉक्स में हाइलाइटिंग बहुत लंबा है - सी #, विनफॉर्म, रिचटेक्बॉक्स, हाइलाइटिंग

एक RichTextBox में हाइलाइटिंग बहुत लंबा ले रहा है - सी #, Winforms, 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);
}

उत्तर:

उत्तर № 1 के लिए 1

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


उत्तर № 2 के लिए 1

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

आप RGB मानों के साथ खेल सकते हैं, या यहाँ एक महान स्रोत है आरटीएफ नियंत्रण के भीतर अलग-अलग चीजें कैसे करें। इस फ़ंक्शन को अपने कोड में पॉप करें और देखें कि यह कितना अच्छा काम करता है। मैं इसका उपयोग 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 = @"{rtf1ansideff0{fonttbl{f0fnilfcharset0 Courier New;}}
{colortbl ;red255green255blue0;}viewkind4uc1pard";
s += sText;
s += @"par}";
richTextBox.Rtf = s;
}

जवाब के लिए 0 № 3

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

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