الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

البحث في عناصر القائمة المنسدلة

مغلق
بدأه ماهمه شي في 7 سبتمبر 2005 · 3 رد · 689 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخواني وجدت في برنامج مصمم بال vb6 حركة رائعة لا ادري كيف تعمل بالدوت نت

وهي ان هناك cmbobox قائمة منسدلة عند الضغط على السهم طبعا تنزل القائمة

عند كتابة حرف راء مثلا في راس القائمة تنتقل القائمة الى الكلمات التي تبدأ بهذا الحرف عن طريق النزول اتوماتاكيا

كيف نعمل هذه القائمة بالدوت نت

خاصة ان هناك قوائم فيها عشرات العناصر

مما يسهل على المستخدم الوصول بدون النزول في القائمة لفترة طويلة

#2

take this

ComboboxControl.rar

#3

السلام عليكم

بالنسبةِ للبحث في مواد القائمة المنسدلة بشكل يريح المستخدم يكون كالتالي:

نستخدم كل من الحدث الضغط على الزر Key Press و الحدث TextChanged عندما يتغير النص في القائمة

في حدث الضغط على الزر إذا كان مفتاح العودة escape هو الذي تم الضغط عليه

فهذا يعني أن المستخدم اخفق في العثور على القيمة أو المادة أو تراجع عن أخر حرف كتبه

لذلك سننقص 1 من القيمة في النص مثلاً لوكان لدينا hello ستصبح hell وذلك عن طريق الخاصية

SelectLength بإنقاص قيمة واحدة منها.

و أما إذا كان الضغط عبارة عن مفتاح ليس حرفي ولا رقمي أي control نسند القيمة True

في المتغير المنطقي ControlKey غير ذلك نسند القيمة False فيه

في حدث تغيّر النص Text Changed نشترط إذا كان النص في القائمة غير فارغ و إن المتغير المنطقي لا يساوي True

نستخدم الوظيفة FindString للبحث عن هذا القيمة الحالية في المواد المتوفرة في القائمة,

وذلك عن طريق تعريف متغير رقمي النوع باسم Match يأخذ مدى المطابقة

فإن لم يتم التطابق أرجع القيمة -1 , و إن تم التطابق ( اي القيمة موجودة ضمن مواد القائمة المنسدلة)

نضم تلك المادة بإستخدام الخاصية SelectedIndex لتذهب القائمة لتلك المادة أو القيمة.

ثم نجعل المؤشر Cursor بعد تلك القيمة بإستخدام الخاصية SelectionStart

وذلك لعملية تمكين الاختيار من بعد الكلمة أو الحرف الذي كتبهُ المستخدم إلى الكلمة أو المادة التي تم العثور عليها

وذلك عن طريق الامر التالي comb.SelectionLength = comb.Text.Length - comb.SelectionStart

هذا الامر يقوم بإسناد قيمة نهاية الاختيار من طول النص ناقص الحرف الذي كتبه المستخدم

لنفرض ان المستخدم يبحث عن الكلمة hello وكتب الحرف h سيكون الاختيار من بعد ذلك الحرف بهذا الشكل ello مضللة باللون الازرق

Imports System.EventArgs
Imports System.Exception
Imports System.Windows.Forms.ComboBox

Public Class AutoCompleteCBoxes
    'Auto Complete Combo Boxes
    Public ControlKey As Boolean = False

    Public Sub KPress(ByVal sender As Object, _
    ByVal E As KeyPressEventArgs)
        Dim comb As ComboBox = CType(sender, ComboBox)

        If Asc(E.KeyChar) = Keys.Escape Then
            'Clear the Text
            comb.SelectedIndex = -1
            comb.Text = ""
            ControlKey = True
        ElseIf Char.IsControl(E.KeyChar) Then
            ControlKey = True
        Else
            ControlKey = False
        End If
    End Sub

    Public Sub TChange(ByVal s As Object, _
    ByVal e As EventArgs)
        Dim comb As ComboBox = CType(s, ComboBox)
        If comb.Text <> "" And Not ControlKey Then

            'Search for Matching entry
            Dim MT As String = comb.Text
            Dim Match As Integer = comb.FindString(MT)

            'If the Match Entry Found Insert it
            If Match <> -1 Then
                comb.SelectedIndex = Match

                'Select the Added Text so it can be replaced
                comb.SelectionStart = MT.Length
                comb.SelectionLength = comb.Text.Length - comb.SelectionStart
            End If
        End If
    End Sub
End Class

الان لمناداة هذا القالب سيكون بهذا الشكل

  Dim AuComBox As New AutoCompleteCBoxes

    Private Sub CB_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles CB.KeyPress
        AuComBox.KPress(sender, e)
    End Sub
  Private Sub CB_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CB.TextChanged
        AuComBox.TChange(sender, e)
    End Sub

هذه النصوص البرمجية مشهورة في الكتب و صفحات الانترنت وهي ليست من عملي.

شاهد الملف المرفق

المتطلبات Visual Studio.NET و قاعدة بيانات Northwind على SQL Database

هذا والله اعلى و أعلم

السلام عليكم

ComboBoxAutoSearch.zip

في المثال يتضح المقال

#4

أشكر الاخوان على الرد السريع

وجاري التجربة

هذا الموضوع مغلق.

مواضيع مشابهة