PDA

View Full Version : جستجو در یک لیست



nicevahid
یک شنبه 05 آذر 1391, 12:19 عصر
سلام. میخواستم یک لیستی با قابلیت جستجو بسازم که شبیه contact موبایل باشه . یعنی با نوشتن یک حرف ، یک لیستی از کلمات که شامل این حرف هستند نمایش داده بشه. تا اینجا تو طرح اطلاعات دارم که با هر keydown یک بار یک تابع فراخوانی بشه ولی مشکل اینجاست که با نوشتن کل کلمه اون رکورد مورد نظر پیدا میشه ولی به صورت حرفی نیست. این راه رو هم امتحان کردم که هر بار که کاربر در حال وارد کرد متن هست حروف رو به صورت جدا در یک فایل خارجی ذخیره کنم ولی موقع جستجو اون رو پیدا میکنه و بقیه فیلد های مرتبط با اون رو دیگه نشون نمیده . کلا شبیه contact موبایل ها دیگه . ممنون میشم راهنماییم کنید .

_behnam_
یک شنبه 05 آذر 1391, 13:31 عصر
لیستی که استفاده میکنید چی هست؟
بانک اطلاعاتی ؟

nicevahid
یک شنبه 05 آذر 1391, 15:02 عصر
ببینید یک فایل خارجی با فرمت txt ایجاد کردم و اطلاعات در اون نگه داشتم . مثلا : سه فیلد هست به نام های ، نام ، شماره ، ایدی . بعد از وارد کردن در یک جدول نشون میده . یک سرچ ساختم که در صورتی که کل کلمه رو بنویسم اطلاعات کامل رو پیدا میکنه . میخوام حالا این به صورتی که گفتم باشه . فعلا بحثم رو این برنامه نیست . کلا میخوام بدونم چجوری میشه از یک رشته به صورت جدا جدا استفاده کرد. حالا اگر بازم کافی نبود بگید توضیح بدم.

program2vb
یک شنبه 05 آذر 1391, 18:16 عصر
ببینید یک فایل خارجی با فرمت txt ایجاد کردم و اطلاعات در اون نگه داشتم . مثلا : سه فیلد هست به نام های ، نام ، شماره ، ایدی . بعد از وارد کردن در یک جدول نشون میده . یک سرچ ساختم که در صورتی که کل کلمه رو بنویسم اطلاعات کامل رو پیدا میکنه . میخوام حالا این به صورتی که گفتم باشه . فعلا بحثم رو این برنامه نیست . کلا میخوام بدونم چجوری میشه از یک رشته به صورت جدا جدا استفاده کرد. حالا اگر بازم کافی نبود بگید توضیح بدم.

سلام منظورتون اینه میخواین از فایل جستجو کنین ؟

یا چی ؟ بیشتر توضیح بدین ؟

nicevahid
یک شنبه 05 آذر 1391, 18:49 عصر
اصلا بذارین یه جور دیگه بگم. دیکشنری های موبایل رو که حتما دیدین. وقتی a رو میزنین یه لیست میاد که اولش a هست بعدش ab میزنین لیست به کلماتی که اولشون ab هست تبدیل میشه و به همین صورت در باقی نرم افزار های موبایل و در حالت کلی دفترچه تلفن موبایل ها اینجورین دیگه. میخوام بدونم تو vb هم میشه اینکار رو کرد ؟؟ یعنی از جستجو مربوط به تک تک اجزاء یک رشته باشه . مثلا وقتی شما ب نوشتین یه لیست بیاد که اولش با ب شروع میشه . من شیوه اینکه لیست با اضافه و یا کاهش یک حرف تغییر کنه رو میدونم فقط برای پیدا کردن کلمه مورد نظر کل کلمه مورد نظر رو بنویسم . میخوام با نوشتن چند حرف از اون کلمه ، اون کلمه پیدا بشه.

_behnam_
دوشنبه 06 آذر 1391, 22:22 عصر
ساده ترین روش اینه.
یک لیست باکس به اسم lbNames و یک تکست باکس به اسم txtSearch روی فرم قرار بدید

Dim arryList(1000) As String
Sub addList()
Dim i, j As Integer
Dim strNames As String
For i = 0 To 99 Step 1
strNames = vbNullString
For j = 1 To 6
strNames = strNames & LCase(Chr(getRndChar))
Next j
arryList(i) = strNames
Next i
End Sub
Function getRndChar()
Dim rndNumber As Integer
Randomize Timer
Do While rndNumber <= 65 Or rndNumber >= 122
rndNumber = Int(Rnd * 122)
DoEvents
Loop
getRndChar = rndNumber
End Function

Private Sub Form_Load()
addList
End Sub

Private Sub txtSearch_Change()
Dim i As Integer
lbNames.Clear
For i = 0 To 99 Step 1
DoEvents
If Mid(arryList(i), 1, Len(txtSearch.Text)) = txtSearch.Text Then
lbNames.AddItem arryList(i)
End If
Next
End Sub

_behnam_
دوشنبه 06 آذر 1391, 22:25 عصر
رویداد txtSearch_change فقط اینکارو انجام میده بقیه متدها واسه ساخت لیست آرایه مورد استفاده قرار گرفتند

امین مستانی
سه شنبه 07 آذر 1391, 14:18 عصر
سلام

نمونه زیر هم برای Combo Box هست.

SHD.NET
سه شنبه 07 آذر 1391, 17:18 عصر
راحت ترین راه استفاده از این کده . مثلا شما توی یه لیست باکس یه سری نام داری . میخوای با تایپ هر حرف اونا فیلتر بشن و نتایج برات لیست بشه.
a=0
for i= 0 to list1.listcount-1
a=a+1
list1.listindex=a
if left(list1.text,len(text1.text))=text1.text then
list2.additem(list1.text)
end if
next i

:چشمک:\\\موفق باشید///:چشمک:

nicevahid
جمعه 10 آذر 1391, 11:20 صبح
ممنون از همه دوستان . این روش که فرمودید برای حرف اول خیلی عالی جواب میده . حالا اگه بخوام مثل ویندوز 7 حرف اگر وسط کلمه هم بود رو پیدا کنه هم میشه ؟؟ اخه یه برنامه که با VB نوشته شده بود رو دیدم . برنامه نویسش میگفت برای ( تو کد ها نه . توی خود برنامه ) % رو بزن این سرچ رو انجام میده . مگه میشه رشته ها رو هم از طریق MOD از هم جدا کرد ؟؟

nicevahid
شنبه 11 آذر 1391, 11:12 صبح
سلام دوباره به همگی . راهشو یافتم (باریکلا خودم !:تشویق:!! ) . گفتم اینجا بگم اگر کسی مثل من تو این موضوع گیر کرده . برای این کار شما باید تک تک حروف یک رشته رو مورد بررسی قرار بدین . دستور زیر رو در نظر بگیرین


n$ = txt.Text
Mid$(n$, Len(n$), 1) = " "
d$ = RTrim$(n$)

در اینجا تک تک حروفتون پر پر میشن :لبخند:. البته یادتون باشه که رشته مورد نظرتون رو در یک متغیر دیگه برزین تا یه وقت اصل کاری دچار طوفان (یا توفان !!! :لبخند:) زدگی نشه . بهر حال شما باید همون طور که دوستان در بالا گفتن این دستورات رو در یک حلقه قرار بدین که هر بار حرفی رو که در سرچ باکس گذاشتین رو چک کنه . در این صورت کله کلمه رو میگرده . قبول دارم یکمی که نه ، خیلی سرعت برنامه رو میگره ، مخصوصا اگه برنامه بزرگ باشه ولی خب هرکه طاووس خواهد جور هندوستان کشد :متفکر:. اگه میخوان توی یک بانک اطلاعاتی هم همینکار رو بکیند من از این روش استفاده میکنم . یکمی چپل چلاغ هست:گیج: ولی خب راحت ترینه . من که معمولا با اکسس میسازم . قبل از وارد کردن فیلد های یک رکورد شما باید فیلد های هم نوع مثل اسم رو در یک فایل خارجی قرار بدین و نام خانوادگی رو در یک فایل خارجی و هربار که میخواین سرچ کنین تک تک اینا رو بگردین و یک متغیر بولین بذارین که سره هرکدوم پیدا شد از همون نوع از بانک اطلاعاتی داده بگیره . البته میتونید اینکار رو هم بکنید که کاربر مشخص کنه دنباله چیه ولی خب صورت خوشی نداره .:افسرده: به نظر من اگر کاربر شماره هم وارد کنه باید بتونه کله اطلاعات مربوط به اون رو بدست بیاره . عینهو 118 دیگه :چشمک:!!! حالا اگر راه بهتری پیدا کردم بازم میگم ولی ممنون از دوستان که بیس این طرح رو تو ذهنم انداختند.
متشکر از همگی -{@

_behnam_
شنبه 11 آذر 1391, 17:20 عصر
دستور Like دستور استاندارد است
بهتر است از آن بجای Mid در اینجور مواققع استفاده شود

http://msdn.microsoft.com/en-us/library/swf8kaxw.aspx

nicevahid
شنبه 11 آذر 1391, 18:52 عصر
یکمی بیشتر توضیح میدی ؟ سر در نیاوردم . حوصله خوندن اون همه صفحه رو هم ندارم :لبخند: