PDA

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



vahid_d_0101
سه شنبه 24 اسفند 1389, 16:07 عصر
با سلام
من یه لیست باکس دارم که داخل اسم تعدادی کتاب نوشته شده است
حالا میخوام داخل یه تکست اگه کسی نوشت " امام " هر کتابی که در هر کجایش کلمه امام داشت را داخل لیست نگه داره و مابقی را پاک کنه
فکر نکنم خود لیست باکس چیزی برای جستجو داشته باشه اگه کسی میتونه کمک کنه ممنون می شوم.:تشویق:

_behnam_
سه شنبه 24 اسفند 1389, 16:52 عصر
باید با حلقه آیتم هارو سرچ کنید
Dim Y, Z As Integer
Z = List1.ListCount
For Y = 0 To List1.ListCount - 1
Z = Z - 1
If InStr(1, List1.List(Z), "امام") = 0 Then List1.RemoveItem Z
Next Y

محسن واژدی
سه شنبه 24 اسفند 1389, 19:16 عصر
سلام
بهتر است ابتدا لیست آیتم ها را در آرایه نوشته سپس با یک حلقه در آرایه بدنبال رشته مورد نظر بگردین که در صورت یافتن کلمه، آنرا در لیست اضافه کنه
البته لازم به ذکره که هرچقدر تعداد آیتم ها بیشتر باشد حلقه نیز بیشتر طول خواهد کشید و ممکن است از بهینه بودن برنامه بکاهد، یه پیشنهاد برایتان دارم و آن هم این است که یا دستور جستجو را بجای نوشتن در رویداد change شی textbox در یک دکمه نوشته تا کاربر با نوشتن کلمه مورد نظر بر روی آن کلیک کند و جستجو آغاز شود (یعنی جستجوی دستی بجای خودکار) و یا آنرا در یک تایمر گذاشته که با یک فاصله زمانی معین (مثلا هر 200ms) چک کنه که آیا متن موجود در textbox تغییری کرده است یا خیر و در صورت تغییر کردن متن موجود یکبار جستجو انجام دهد و مجددا منتظر تغییر جدید در جعبه متن بماند که این میتواند بطور موثری مانع از اجرای غیرضروری حلقه و کندی برنامه شود
و هم میتواند بهینه تر از پیشنهاد اول باشد
بهرحال نمونه زیر را براساس روش دوم براتون نوشتم

موفق باشید
یاعلی

vahid_d_0101
چهارشنبه 25 اسفند 1389, 16:23 عصر
سلام
بهتر است ابتدا لیست آیتم ها را در آرایه نوشته سپس با یک حلقه در آرایه بدنبال رشته مورد نظر بگردین که در صورت یافتن کلمه، آنرا در لیست اضافه کنه
البته لازم به ذکره که هرچقدر تعداد آیتم ها بیشتر باشد حلقه نیز بیشتر طول خواهد کشید و ممکن است از بهینه بودن برنامه بکاهد، یه پیشنهاد برایتان دارم و آن هم این است که یا دستور جستجو را بجای نوشتن در رویداد change شی textbox در یک دکمه نوشته تا کاربر با نوشتن کلمه مورد نظر بر روی آن کلیک کند و جستجو آغاز شود (یعنی جستجوی دستی بجای خودکار) و یا آنرا در یک تایمر گذاشته که با یک فاصله زمانی معین (مثلا هر 200ms) چک کنه که آیا متن موجود در textbox تغییری کرده است یا خیر و در صورت تغییر کردن متن موجود یکبار جستجو انجام دهد و مجددا منتظر تغییر جدید در جعبه متن بماند که این میتواند بطور موثری مانع از اجرای غیرضروری حلقه و کندی برنامه شود
و هم میتواند بهینه تر از پیشنهاد اول باشد
بهرحال نمونه زیر را براساس روش دوم براتون نوشتم

موفق باشید
یاعلی

خیلی عالی بود فقط مشکلی که داره اخر لیست یه دونه ایتم خالی میاره هر کاریش کردم نتونستم پاکش کنم

یه مشکل دیگه هم اینه که وقتی فرم را می بندیم باید اون متغیره که اطلاعات داخلش هست کامل پاک بشه اگه کدی برای این کار هم هست برای بزارید

محسن واژدی
چهارشنبه 25 اسفند 1389, 16:48 عصر
سلام علیکم


خیلی عالی بود فقط مشکلی که داره اخر لیست یه دونه ایتم خالی میاره هر کاریش کردم نتونستم پاکش کنممشکلش رو برطرف کردم و مجددا" گذاشتمش داخلش پست قبلی (3#)


یه مشکل دیگه هم اینه که وقتی فرم را می بندیم باید اون متغیره که اطلاعات داخلش هست کامل پاک بشه اگه کدی برای این کار هم هست برای بزارید دقیقا" متوجه منظورتون نشدم، اگه میشه کمی بیشتر راجع بهش توضیح بدین

موفق باشید

vahid_d_0101
چهارشنبه 25 اسفند 1389, 17:18 عصر
ببین فکر کن من میخوام اولی که فرم لود میشه اون آرایه کامل پاک بشه از چه کدی باید استفاده کنم

محسن واژدی
چهارشنبه 25 اسفند 1389, 17:36 عصر
درسته
نمونه ای که بنده گذاشته ام از یک آرایه ثابت استفاده میکنه اما شما میتوانید مقدار ثابت اونو (فکر کنم 15 بود) را حذف کرده سپس در زمان اجرا از دستور Redim طول اونو تعیین کنین به عبارتی طولش رو پویا کنین
در این صورت میتوانید یک فایل که حاوی لغات مورد نظر را هر تعداد که باشید در آرایه قرار دهید

نمونه زیر رو ببینین

Dim myData$()
Private Sub Form_Load()
ReDim myData$(10)
End Sub



مشکلی بود در خدمتیم
موفق باشید