ايران ويج

نسخه‌ی کامل: یه سوال در مورد listbox و combobox
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام
یه سوال داشتم ممنون میشم راهنمایی کنید
سوالم اینه که یه listbox داریم حاوی مثلا 50 تا اسمه و یه combobox هم داریم
حالا فرض کنید تو لیست باکس اسم های
ali
mohammad
maryam
arman
هست وقتی که در combobox حزف اول افراد را تایپ کردیم مثلا (m) و وقتی که دکمه tab زا زدیم بقیه اسمش حدس زده بشه و دوباره اگر دکمه tab زدیم بره رو اسم بعدی (یعنی اینکه اسمش حدس زده بشه و تایپ بشه در combobox) توجه اسمهای که در لیست باکس هست از قبل تعریف نشده و میتونه هر اسمی باشه.
ممنون میشم دوستان راهنمایی کنن
با استفاده از API ها می تونی این کار رو انجام بدی.
API یی که بهش احتیاج داری SendMessage هستش.

با این دستور API رو تعریف می کنی:
کد:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long

حالا باید یه مقدار Constant رو تعریف کنی که می شه:
کد:
Const LB_FINDSTRING = &H18F

این دستورات رو هم توی رویداد Combo1_Change می نویسی:
کد:
List1.ListIndex = SendMessage(List1.hwnd, LB_FINDSTRING, -1, ByVal CStr(Combo1.Text))
سلام اینکارو انجام داده بودم اما وقتی اینکارو میکنی فقط اشاره میکنه به اسم تو لیست باکس انگاری روش کلیک کردی من میخوام کاری کنم که دکمه tab را فشار دادی بیاردتش تو comobox وقتی که حرف a را تایپ کردی مثال تایپ میکنیم a بعد برنامه میبینه یه اسم amin هست تو لیست باکس وقتی که بهش اشاره کرد دکمه tab را فشار یدی و بقیه اسم را واست به صورت اتومات تایپ کنه
خب، ادامه دستوراتی که توی Combo1_Change نوشتم بنویس دیگه! این که کاری نداره.
باید یه Hook بنویسی که اگه دکمه فشرده شده Tab بود، مقدار انتخاب شده از List1 رو بریزه توی Combo1
والا من یه بار نوشتم ریخت بهم نفهمیدم چی شد مشکل پیدا کردم اگر میشه اونم توضیح بده اصله کاری اونه
ممنون میشم
یه پروژه جدید باز می کنی. یه لیست باکس، یه کامبوباکس و یه تایمر به نام های List1، Combo1 و Timer1 توش می کشی
حالا عین کد زیر رو می نویسی:
کد:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Const LB_FINDSTRING = &H18F

Private Sub Combo1_Change()

List1.ListIndex = SendMessage(List1.hwnd, LB_FINDSTRING, -1, ByVal CStr(Combo1.Text))

End Sub

Private Sub Timer1_Timer()

    KeyResult = GetAsyncKeyState(9)
    If KeyResult = -32767 Then
        Combo1.Text = List1.Text
    End If

End Sub

برنامت آمادست فقط باید داخل لیست باکس رو پر کنی. می تونی از این اسم ها هم استفاده کنی:
کد:
Ali
Amir
Mahboob
Mahdis
Mahshid
Majid
Mandana
Masoud
Maziar
Mehrdad
Melisa
Mohammad
Mohsen
Mona
سلام
ممنون من نوشتمش اما یه مشکل داره همه اون کارها را میکنه اما وقتی میخوام دکمه tab بزنم اسم هم حدس میزنه ولی بصورت پر رنگ اسم انتخاب میشه و میخوام وقتی که اسم حدس زده میشه بشه جلوی همون اسم تایپ کرد.
ممنون میشم راهنمایی کنید
به اینی که دنبالش می گردی می گن AutoComplete، این یه قابلیت برای اشیایی هست که می شه توشون تایپ کرد.
AutoComplete به صورت پیش فرض توی دات نت وجود داره، توی وی بی 6 نیستش ولی. یه سرچ بکن، اگه چیزی پیدا نکردی بگو واست می نویسم
سلام
دستت نکنه جبران میکنم
شرمنده
والا زیاد دنبالش گشتم پیدا نکردم یادم رفته یه کاری میشد که بعد از اینکه دکمه tab را زدی کلمه حدس زده شد بشه جلوش تایپ کنی نمیدونم دیگه فکرم کار نمیکنه
اگر میشه واسم بنیویس چون دنبالش زیاد بودم دیگه کم کم باید برم سراغ دات نت بازم ممنون اقا فرید
تا الان هر چی کد نوشتی رو پاک کن! اون تایمر رو هم پاک کن! حالا این کدها رو بنویس:
کد:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private WTxt As String
Private S As Boolean
Const LB_FINDSTRING = &H18F

Private Sub Combo1_Change()

    KeyResult = GetAsyncKeyState(8)
    If S = False Then
        WTxt = Combo1.Text
        List1.ListIndex = SendMessage(List1.hwnd, LB_FINDSTRING, -1, ByVal CStr(Combo1.Text))
    End If
    S = True
    If List1.Text <> "" And KeyResult <> -32767 Then
        Combo1.Text = List1.Text
        Combo1.SelStart = Len(WTxt)
        Combo1.SelLength = Len(List1.Text) - Len(WTxt)
    End If
    S = False
      
End Sub
سلام فرید جان ممنون از کمکت دستت درد نکنه
اما tab کار نمیکنه اسم هم حدس میزنه اتومات تایپش میکنه اما اخرش نمیره خواستم sendkyes کنم دکمه end را تا بره اخر خط نشد بهم اچازه نداد میخوام بیبینم راهی دیگه نیست فرید جان؟
صفحه‌ها: 1 2