मैं एक wpf RichTextBox में प्रोग्रामेटिक रूप से चयनित (रेगेक्स का उपयोग करके) टेक्स्ट स्वरूपण को कार्यान्वित करने का प्रयास कर रहा हूं। उपयोग का मामला केवल एक wpf RichTextBox है जिसमें उपयोगकर्ता टेक्स्ट टाइप करता है। हालांकि, पठनीयता में सुधार या तेजी लाने के लिए मैं कुछ स्वचालित स्वरूपण को शामिल करना चाहता हूं क्योंकि टेक्स्ट टाइप किया गया है।

निम्न कोड से टेक्स्ट का चयन कैसे करें RichTextBox और फिर इसे रंग दें? ठीक वही है जो मैं करने की कोशिश कर रहा हूं। हालांकि, जहां तक ​​​​मैं कह सकता हूं कि यह कोड WinForms RichTextBox के लिए है:

public void ColourRrbText(RichTextBox rtb)
{
    Regex regExp = new Regex(@"\b(For|Next|If|Then)\b");

    foreach (Match match in regExp.Matches(rtb.Text))
    {
        rtb.Select(match.Index, match.Length);
        rtb.SelectionColor = Color.Blue;
    }
}

मैंने इसे इस प्रकार बदलने की कोशिश की है:

public static void ColorSpecificText(RichTextBox rtb)
{
    TextRange textRange = new TextRange(rtb.Document.ContentEnd, rtb.Document.ContentEnd);

    Regex regex = new Regex(@"\b(For|Next|If|Then)\b");

    foreach (Match match in regex.Matches(textRange.Text))
    { 
        textRange.Select(match.Index, match.Length); // <--- DOESN'T WORK
        textRange.SelectionColor = Color.Blue; // <--- DOESN'T WORK
    }
}

हालांकि, मैं "match.Index, match.Length" और "SelectionColor" सिंटैक्स को किसी ऐसी चीज़ में बदलने के तरीके पर अटका हुआ हूं, जिसे WPF RichTextBox हैंडल करना जानता है। मैंने अन्य पदों की खोज की है, लेकिन अधिकांश भी WinForms RichTextBox के लिए प्रतीत होते हैं, wpf नहीं। किसी भी मार्गदर्शन की काफी सराहना की जाएगी।

0
scorpiotomse 16 अप्रैल 2020, 16:13

1 उत्तर

सबसे बढ़िया उत्तर

यह वाक्यविन्यास है:

TextRange textRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Black);
Regex regex = new Regex(@"\b(For|Next|If|Then)\b");

int i = 0;
foreach (Match match in regex.Matches(textRange.Text))
{
    var wordStartOffset = textRange.Start.GetPositionAtOffset(i + match.Index);
    var wordEndOffset = textRange.Start.GetPositionAtOffset(i + match.Index + match.Length);
    var wordRange = new TextRange(wordStartOffset, wordEndOffset);
    wordRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.LightBlue);
    i += 4; // could be something else
}

हालांकि यह आपकी रणनीति के कारण सही ढंग से हाइलाइट नहीं हो सकता है। मुझे डर है कि उचित टेक्स्टपॉइंटर बनाने के लिए स्ट्रिंग इंडेक्स पर्याप्त नहीं है। +4 का उपयोग फ़ॉर्मेटिंग ओवरहेड्स को छोड़ने के लिए किया जाता है, इसलिए यदि अन्य फ़ॉर्मेटिंग मौजूद हैं तो यह काम नहीं कर सकता है।

1
Bizhan 17 अप्रैल 2020, 01:04