15-12-21, 07:49 PM (آخر تعديل لهذه المشاركة : 16-12-21, 01:17 AM {2} بواسطة ابو انس.)
انا استخدم AutoComplete في تيكست بوكس وفي داتا جريد فيو ولكن المشكلة انه يجب ادخال اول حرف اريد ان يظهر لي قائمة بجميع الاسماء التي تحتوي على الحرف الذي ادخلته حتى لو كان حرف من منتصف الكلمة
سورس كود برنامج محاسبة ومبيعات احترافي - سورس كود تطبيق ارسال رصيد من الجوال B4A
16-12-21, 07:48 AM (آخر تعديل لهذه المشاركة : 16-12-21, 07:49 AM {2} بواسطة معاند الحظ.)
اخي ابو انس اعتقد ان الحل الذي تريده هو في استخدام كومبوبوكس تملآ عناصره عن طريق استخدام regex
ليبحث عن اقرب التطابقات في نص تكستبوكس او عناصر داتاجريد فيو باستخدام الادخال الذي قمت به
في المثال الذي عملته استخدمت 2 تكستبوكس الاول rtxt وهو الذي استخدم فيه الاكمال التلقائي
والثاني rtxt2 وهو يحوي النص الذي سيعرض الاكمال التلقائي مقترحات الاكمال بناء على النص الموجود فيه
<DllImport("user32.dll")> _
Private Shared Function GetCaretPos(ByRef lpPoint As Point) As Boolean
End Function
Public Function GetCorrectCaretPos() As Point
Dim pt As Point = Point.Empty
If GetCaretPos(pt) Then
Return pt
Else
Return Point.Empty
End If
End Function
Dim curWord As String
Dim spaceKeyHitCounter As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Controls.Add(autoComp)
End Sub
Private Sub rtxt_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles rtxt.KeyDown
If e.KeyCode = Keys.Space Then
If spaceKeyHitCounter < 1 Then
spaceKeyHitCounter += 1
Else
spaceKeyHitCounter = 0
curWord = ""
autoComp.Hide()
End If
ElseIf e.Modifiers = Keys.Control And e.KeyCode = Keys.V Then
My.Computer.Clipboard.Clear()
curWord = curWord.Remove(curWord.Length - 1)
rtxt.SelectionStart -= Len(curWord)
rtxt.SelectionLength = curWord.Length '- 1
rtxt.SelectedText = autoComp.Text
spaceKeyHitCounter = 0
curWord = ""
autoComp.Hide()
ElseIf e.KeyCode = Keys.Back Then
Try
curWord = curWord.Remove(curWord.Length - 1)
Catch ex As Exception
End Try
Else
If CurCharPos = 0 Then
spaceKeyHitCounter = 1
End If
If e.KeyCode = Keys.Enter Then
If CurCharPos = 0 Then
spaceKeyHitCounter = 1
End If
curWord = ""
End If
curWord += Chr(e.KeyCode)
curWord = curWord.Trim()
autoComp.Left = GetCorrectCaretPos().X
autoComp.Top = GetCorrectCaretPos().Y + autoComp.Height - 5
autoComp.Show()
autoComp.BringToFront()
End If
End Sub
Dim CurCharPos As Integer
Private Sub rtxt_TextChanged(sender As Object, e As System.EventArgs) Handles rtxt.TextChanged
CurCharPos = rtxt.GetPositionFromCharIndex(rtxt.GetFirstCharIndexFromLine(rtxt.GetLineFromCharIndex(rtxt.SelectionStart))).X
Dim col As MatchCollection = Regex.Matches(rtxt2.Text, "\b(\w+)\b", RegexOptions.IgnoreCase Or RegexOptions.IgnorePatternWhitespace)
autoComp.Items.Clear()
For Each match As Match In col
If Regex.IsMatch(match.Value, curWord, RegexOptions.IgnoreCase) Then
If Not autoComp.Items.Contains(match.Value) Then
autoComp.Items.Add(match.Value)
End If
autoComp.SelectedIndex = 0
'autoComp.SelectAll()
End If
Next
End Sub
End Class
وللعلم فان الكود مجرد محاولة مني ولا اجزم انه هو بالضبط ماتطلبه
لكنه على الاقل قد يكون نقطة بداية لما تريد
جربه اولا في مشروع اختبار لانه لابد ان تحتاج الى تعديل هنا او هناك في الكود
شكرا لك ولكن يظهر اني لم اقم بصياغة سؤالي بشكل جيد
المشكلة في autocomplete انك مضطر لكتابة الحرف الاول
مثلا لدينا اسماء المواد التالية (هارد توشبا 500 جيجا ، ساتا توشبا هارد 250جيجا )
عند كتابة كلمة هارد ستظهر المادة الاولى لانها تبدأ بكلمة هارد
انا ما رايده ببساطة ان تظهر المادة الاولى والثانية ايضا لاحتواء كليهما على كلمة هارد
طبعا ضمن قائمة منسدلة
انا احتاج ان اعمل هذا الامر في داتا جريد فيو وفي تيكست بوكس ايضا
شكرا لكم
سورس كود برنامج محاسبة ومبيعات احترافي - سورس كود تطبيق ارسال رصيد من الجوال B4A
يا اخي انا اتكلم عن اكمال تلقائي مخصص غير الموجود ضمن ادوات فيجوال بيسك
وبحسب مافهمت انك تريد ان تضهر لك كل اللاقتراحات المتشابههة
الكود في ردي السابق يقوم باضهار جميع اقتراحات الاكمال المتشابههة فهل جربته
اذا كنت جربته وكنت انا في وادي وما تريده انت غي وادي اخر فاتمنى ان ترفق المشروع او على الاقل كود الاكمال التلقائي لديك
اخي ابو انس مشروع الاخ ابراهيم جزاه الله خير يعتمد على الوضيفة AutoComplete المضمنه في ادوات فيجوال بيسك
يعني ليه نعبي في قربة مشقوقة
انت تحتاج الى وضيفة اكمال تلقائي متخصصة لكي تستطيع تجاوز التقييدات الموجودة في الوضيفة الاصلية
اسالك بصراحة
هل جربت الكود في ردي عليك ؟
لاني بصراحة ولمجرد الفضول ابغى اعرف لاني اشتغلت عليه مايقرب من ساعتين
هل جربت الحلول التي في الروابط في ردي السابق؟
السلام عليكم ورحمة الله وبركاته
اخوي الكريمين ابو انس ومعاند الحظ بارك الله بكما ولكما
يقول المثل (المكتوب باين من عنوانه)
المثال اسمه اكمال تلقائي Autocomplete ووظيفته هي ايضا كذلك بمعنى عندما نكتب اول حرف سيتم جلب كل السجلات التي تبدأ بالحرف الذي كتبناه وسيتم الاقتراح وكلما كتبنا حرف زائد تتم التصفية اي ان الامر يتم تسلسليا من الحرف الاول الى الثاني وهكذا
اما ماتريده اخي ابو انس هو عملية بحث Searsh عن الحرف الذي كتبته في كل السجلات اينما كان موقع الحرف وهذا ليس Autocomplete
حاليا ليس عندي اي فكرة او معلومة تفيد في طلبك ولكن ان توصلت الى شيئ ساورده كمثال في المنتدى
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات
وعليكم السلام ورحمة الله وبركاته
شكرا لك على مداخلتك الجميلة
ما اطلبه شاهدته في برامج اخرى تم تصميمها عن طريق اما فيجوال بيسك او سي شارب
اذن هو ممكن
اما عن قضية AutoComplete فانا ذكرت اني استخدم AutoComplete ولكني لم اقل اني اريد ان يتم الامر حصرا عن طريق AutoComplete ممكن ان يتم الامر بأي طريقة لا مشكلة لدي
سورس كود برنامج محاسبة ومبيعات احترافي - سورس كود تطبيق ارسال رصيد من الجوال B4A