اخي وصديقي اذا كنت تريد كود يقوم بتلوين كلمة او مجموعة كلمات انت تختارها
فانصحك باستخدام فضاء الاسماء System.Text.RegularExpressions
فهو مخصص لعمليات اتحقق من النصوص والمدخلات والتعامل معها بشكل افضل واسرع
من طريقة استخدام الامر RichTextBox.Find بكثير
واليك هذا المشروع المثال والذي وضعت فيه اداة RichTextBox والتي استخدمها لعرض كلمات القران
وايضا اداة TEXTBOX والتي تكتب فيها الكلمة التي تريد ايجادها وتلوينها داخل نص القران في RichTextBox
يقوم الكود اولا بازالة التشكيل (الفتحة والكسرة و...) من النص الموجود في RichTextBox ان وجد
ثم يقوم بالبحث ويضع النتائج في المصفوفة matchColl والتي استخدمها لحفظ نتائج البحث
اذا وجد البرنامج النص المطلوب يقوم باضافة Match متغير المطابقة الخاص بـRegex الى المصفوفة matchColl
وبعد انتهاء البحث ووجود نتائج يمكن التنقل بينها باستخدام زرين هما التالي والسابق
حيث ان الضغط على زر التالي يقوم بايجاد النتيجة التالية لكلمة البحث في الاداة RichTextBox ويقوم بتحديدها ثم يقوم بتلوينها
وزر السابق يعيدك الى النتائج السابقة
هذا هو مجمل مايقوم الكود بعمله مع ملاحظة اني لم اضع كل علامات التشكيل
اخيرا اليك الكود
كود :
Imports System.Text.RegularExpressions
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
rtxt.LoadFile("D:\Downloads\q2.txt", RichTextBoxStreamType.PlainText)
End Sub
Dim matchColl As MatchCollection
Private Sub btnFind_Click(sender As System.Object, e As System.EventArgs) Handles btnFind.Click
'النص الذي نبحث عنه
Dim pattern As String = txtFind.Text
Dim rgx As New Regex(pattern)
'النص الذي نبحث فيه
Dim inputText As String = rtxt.Text
' ازالة التشكيل ان وجد
rtxt.Text = removeTashkeel(rtxt.Text)
' ' اضافة النتائج الى مصمفوفة
matchColl = Regex.Matches(rtxt.Text, pattern)
'عرض النتائج
lblResult.Text = "النتائج:" & matchColl.Count
End Sub
' استبدال تشكيل الاحرف
Function removeTashkeel(txt As String) As String
Dim pattern As String = "[ًٌٍَُِّْۤۡ۠]"
txt = Regex.Replace(txt, pattern, "")
Return txt
End Function
'زر الانتقال للنتيجة التالية
Dim i As Integer
Private Sub btnNext_Click(sender As System.Object, e As System.EventArgs) Handles btnNext.Click
rtxt.SelectionStart = matchColl(i).Index
rtxt.SelectionLength = txtFind.Text.Length
rtxt.SelectionColor = Color.Red
i += 1
lblResult.Text = "النتائج:" & i & "/" & matchColl.Count
End Sub
'زر الانتقال للنتيجة السابقة
Private Sub btnPrev_Click(sender As System.Object, e As System.EventArgs) Handles btnPrev.Click
rtxt.SelectionStart = matchColl(i).Index
rtxt.SelectionLength = txtFind.Text.Length
rtxt.SelectionColor = Color.Red
i -= 1
lblResult.Text = "النتائج:" & i & "/" & matchColl.Count
End Sub
End Class