المشاركات : 88
المواضيع 21
الإنتساب : Apr 2015
السمعة :
0
الشكر: 323
تم شكره 265 مرات في 41 مشاركات
11-09-16, 08:33 PM
باختصار لدى textbox كبير يكتب بداخله نص كبير
عند الضغط على زر find تفتح هذه النافذه الموجودة فى الصورة والخاصه بالبحث:
***
بالنسبة لخاصية find once تعمل جيداً لإيجاد نتيجة واحدة مطابقة
***
أما find next فعند الضغط عليها لا ينتقل للنتيجة المطابقة التالية مباشرة
وإنما يقوم بعمل select للنتيجة المطابقة الأولى حتى أضغط مره أخرى فينتقل للتالية
مثلاً عندما أبحث عن كلمة how باستخدام زر find once ويجده ويحدده كما فى الصوره:
ثم أضغط على زر find next ليجد الكلمة المقابلة يستمر البرنامج فى تحديد نفس الكلمة
ولا ينتقل للتالية حتى أضغط على find next مرة أخرى ليحدد التالية كما فى الصورة:
لم اتمكن من تعديل كود البرنامج ليحقق هذا
***
وبالنسبة لخاصية find previous و find all لم أتمكن من التطبيق فى الكود
كود نافذة البحث فى البرنامج:
كود :
Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'button called (Find Once)
Dim a As String
Dim b As String
a = TextBox1.Text
b = InStr(Form1.TextBox1.Text, a)
If b Then
Form1.TextBox1.Focus()
Form1.TextBox1.SelectionStart = b - 1
Form1.TextBox1.SelectionLength = Len(a)
Else : MsgBox("No Text Found!")
End If
End Sub
Private TargetPosition As Integer
Private Sub FindText(ByVal start_at As Integer)
Dim pos As Integer
Dim target As String = TextBox1.Text
Dim text As String = Form1.TextBox1.Text
pos = InStr(start_at, text, target)
If pos > 0 Then
' We found it.
TargetPosition = pos
Form1.TextBox1.SelectionStart = TargetPosition - 1
Form1.TextBox1.SelectionLength = Len(target)
Form1.TextBox1.Focus()
Else
' We did not find it.
MsgBox("Not found.")
Form1.TextBox1.Focus()
End If
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
'button called (Find Next)
FindText(TargetPosition + 1)
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
'button called (Find Previous)
FindText(TargetPosition - 2)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'button called (Find All)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.Close()
End Sub
End Class
المشاركات : 7,397
المواضيع 802
الإنتساب : Sep 2013
السمعة :
853
الشكر: 13167
تم شكره 18826 مرات في 4421 مشاركات
نفس سؤالي وقالوا استخدم Ritchtextbox لانها متقدمة.
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
المشاركات : 88
المواضيع 21
الإنتساب : Apr 2015
السمعة :
0
الشكر: 323
تم شكره 265 مرات في 41 مشاركات
استبدلته ب richtextbox ولكن نفس النتيجة
لأن الكود نفسه بحاجه إلى بعض التعديلات
هل من اقتراحات؟؟
المشاركات : 7,397
المواضيع 802
الإنتساب : Sep 2013
السمعة :
853
الشكر: 13167
تم شكره 18826 مرات في 4421 مشاركات
شوف سؤالي هنا والجواب هنا
دائما انظر للمواضيع المتشابهة اسفل الموضوع يساعدك بالحصول على اجابة سريعة.
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
المشاركات : 88
المواضيع 21
الإنتساب : Apr 2015
السمعة :
0
الشكر: 323
تم شكره 265 مرات في 41 مشاركات
المشكلة اخى سعود أن هذا الكود يتطلب تحويل textbox
المكتوب فيه النص الكبير المراد البحث فيه إلى richtextbox
وهذا لا يمكننى فعله لأن كود برنامجى أصبح كبير جداً ولا يمكننى تعديله
ولهذا أبحث عن كود يناسب textbox ويقوم بالمهمة
المشاركات : 7,397
المواضيع 802
الإنتساب : Sep 2013
السمعة :
853
الشكر: 13167
تم شكره 18826 مرات في 4421 مشاركات
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 67
تم شكره 6159 مرات في 1035 مشاركات
15-09-16, 02:17 AM
(آخر تعديل لهذه المشاركة : 15-09-16, 02:22 AM {2} بواسطة silverlight.)
أتمني إن الكود التالي سوف يعطيك فكرة جيدة عن كيفية البحث عن كلمة في RichTextBox
افتح مشروع و أضف الي الفورم RichTextBox و باتون ثم اكتب الكود بالشكل التالي
الكود سوف يجد لك الكلمة التي تبحث عنها
وهنا انا قمت بالبحث عن كلمة vb4arab
PHP كود :
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim s As String = "vb4arab demo, The fox knows to jump but how, how he jump?, and how he learned to jumb bla bla bla bla, vb4arab demo" RichTextBox1.Text = s End Sub
Private Function TryFindString(stringTofind As String, highlightColor As Color, matchCase As Boolean, matchWholeWord As Boolean) As Boolean
Me.RichTextBox1.SelectAll() Me.RichTextBox1.SelectionBackColor = Color.White
Dim startIndex As Integer = 0 Dim searchOption As RichTextBoxFinds = Nothing If matchCase AndAlso matchWholeWord Then searchOption = RichTextBoxFinds.MatchCase Or RichTextBoxFinds.WholeWord ElseIf matchCase Then searchOption = RichTextBoxFinds.MatchCase ElseIf matchWholeWord Then searchOption = RichTextBoxFinds.WholeWord Else searchOption = RichTextBoxFinds.None End If Dim found As Boolean = False Dim index As Integer = -1 While (Me.FindIndex(Me.RichTextBox1.Find(stringTofind, startIndex, searchOption), index)) > -1 found = True Me.RichTextBox1.SelectionBackColor = highlightColor startIndex = index + 1 End While Return found End Function
Private Function FindIndex(value As Integer, ByRef index As Integer) As Integer index = value Return value End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim search As String = "vb4arab" Dim found As Boolean = TryFindString(search, SystemColors.MenuHighlight, True, True) If Not found Then Dim errorString As String = String.Format("Can't find the word ""{0}"", try another word", search) MessageBox.Show(errorString, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End Sub
End Class
المشاركات : 88
المواضيع 21
الإنتساب : Apr 2015
السمعة :
0
الشكر: 323
تم شكره 265 مرات في 41 مشاركات
18-09-16, 02:12 AM
(آخر تعديل لهذه المشاركة : 18-09-16, 02:14 AM {2} بواسطة Doctor GME.)
أخى سعود
حاولت التعديل فيه ولم أنجح إلا فى خاصية find once
أما الباقى بحاجة إلا مساعدة على تعديل الكود
كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'button called (Find Once)
SearchText(Form1.TextBox1.Text)
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
'button called (Find Next)
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
'button called (Find Previous)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'button called (Find All)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.Close()
End Sub
Public Overloads Function SearchText(ByVal textToFind As String) As Integer
'Contains the return value of the search.
'if it returns -1, then a match was not found.
textToFind = TextBox1.Text
Dim nomatchCase As Boolean = False
Dim highlightText As Boolean = True
Dim startPosition As Integer = 0
Dim endPosition As Integer = 0
Dim i As Integer
If endPosition < 1 Then
If Not nomatchCase Then
textToFind = textToFind.ToLower
Dim temp As String = Form1.TextBox1.Text.ToLower
i = temp.IndexOf(textToFind, startPosition, Me.Text.Length)
Else
i = Form1.TextBox1.Text.IndexOf(textToFind, startPosition, Me.Text.Length)
End If
Else
If nomatchCase = False Then
textToFind = textToFind.ToLower
Dim temp As String = Form1.TextBox1.Text.ToLower
i = temp.IndexOf(textToFind, startPosition, endPosition)
Else
i = Form1.TextBox1.Text.IndexOf(textToFind, startPosition, endPosition)
End If
End If
If i > -1 Then
If highlightText Then
Form1.TextBox1.Focus()
Form1.TextBox1.SelectionStart = i
Form1.TextBox1.SelectionLength = textToFind.Length
End If
End If
'
'Returns the position the text was found at
'otherwise it will report -1, which means that the search string was not found.
Return i
End Function
End Class
(15-09-16, 02:17 AM)silverlight كتب : أتمني إن الكود التالي سوف يعطيك فكرة جيدة عن كيفية البحث عن كلمة في RichTextBox
افتح مشروع و أضف الي الفورم RichTextBox و باتون ثم اكتب الكود بالشكل التالي
الكود سوف يجد لك الكلمة التي تبحث عنها
وهنا انا قمت بالبحث عن كلمة vb4arab
PHP كود :
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim s As String = "vb4arab demo, The fox knows to jump but how, how he jump?, and how he learned to jumb bla bla bla bla, vb4arab demo" RichTextBox1.Text = s End Sub
Private Function TryFindString(stringTofind As String, highlightColor As Color, matchCase As Boolean, matchWholeWord As Boolean) As Boolean
Me.RichTextBox1.SelectAll() Me.RichTextBox1.SelectionBackColor = Color.White
Dim startIndex As Integer = 0 Dim searchOption As RichTextBoxFinds = Nothing If matchCase AndAlso matchWholeWord Then searchOption = RichTextBoxFinds.MatchCase Or RichTextBoxFinds.WholeWord ElseIf matchCase Then searchOption = RichTextBoxFinds.MatchCase ElseIf matchWholeWord Then searchOption = RichTextBoxFinds.WholeWord Else searchOption = RichTextBoxFinds.None End If Dim found As Boolean = False Dim index As Integer = -1 While (Me.FindIndex(Me.RichTextBox1.Find(stringTofind, startIndex, searchOption), index)) > -1 found = True Me.RichTextBox1.SelectionBackColor = highlightColor startIndex = index + 1 End While Return found End Function
Private Function FindIndex(value As Integer, ByRef index As Integer) As Integer index = value Return value End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim search As String = "vb4arab" Dim found As Boolean = TryFindString(search, SystemColors.MenuHighlight, True, True) If Not found Then Dim errorString As String = String.Format("Can't find the word ""{0}"", try another word", search) MessageBox.Show(errorString, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End Sub
End Class
أخى العزيز كما قلت للأخ سعود فى الردود السابقة
برنامجى به textbox ولا أستطيع تغييره ل richtextbox لأن الكود أصبح كبير جداً
ولا يمكننى تغييره فالأسهل بكثير هو تعديل كود البحث ليتماشى مع textbox
المشاركات : 1,379
المواضيع 83
الإنتساب : Sep 2012
السمعة :
217
الشكر: 10399
تم شكره 17814 مرات في 844 مشاركات
تستطيع ببساطة شديدة
احذف textbox1 مثلا
واضف RitchTextBox وغير اسمه الى Textbox1
فقط
سبحان الله والحمدلله ولا إله إلا الله والله أكبر
اللهم اغْفِرْ لِلمؤمنين والمؤمنات والمسلمين والمسلمات الأحياء منهم والأموات
المشاركات : 88
المواضيع 21
الإنتساب : Apr 2015
السمعة :
0
الشكر: 323
تم شكره 265 مرات في 41 مشاركات
لم تصلح أخى أبو عمر هذه الطريقة
الكود كما قلت به أجزاء لا تطبق إلا على textbox فقط
وبعد أداء هذه الطريقة يفشل البرنامج فى debug بسبب هذا
|