View Full Version : پاک کردن اسامی تکراری از لیست باکس
xrezax
چهارشنبه 01 تیر 1390, 21:52 عصر
بچه ها من یک لیست باکس دارم به نام List2 و یک کامند هم دارم .
می خوام وقتی روی کامند کلیک کنم تمام اسم های تکراری که توی List2 هستند پاک بشن. و برنامه یک اررور بزنه و بگه پایان.
ممنون میشم با پروژه های وی بی توضیح بدین.
راستی من تمام پروژه ها و سورس های انجمنو تست کردم به نتیجه ای نرسیدم . یا کار نمی داد یا اررور می زد.
Snoopboy
پنج شنبه 02 تیر 1390, 00:48 صبح
71481
ببین این به دردت می خوره
xrezax
پنج شنبه 02 تیر 1390, 08:23 صبح
بدردم خورد.
اما وقتی می خوام لیست توش لود کنم برنامه اررور میده
Snoopboy
پنج شنبه 02 تیر 1390, 08:46 صبح
On Error Resume Next
Dim St As String
Dim Adress As String
CD.Filter = ".Texts|*.txt"
CD.ShowOpen
Adress = CD.FileName
If Adress = "" Then
Exit Sub
End If
Open Adress For Input As #1
Do Until EOF(1)
Line Input #1, St
List1.AddItem St
List1.ListIndex = 0
Loop
Close #1
بیا اینم کد دوباره دکمه Load
فقط اسم ابزار رو خودت با برنامه خودت ست کن
xrezax
پنج شنبه 09 تیر 1390, 20:26 عصر
برنامه هنگ میکنه. تعداد چون زیاده :گریه:
xrezax
یک شنبه 12 تیر 1390, 17:50 عصر
مثالی دیگه ای نداری ؟؟؟ سورسی چیزی اگه هست بزارین دوستان.
محسن واژدی
یک شنبه 12 تیر 1390, 21:26 عصر
برنامه هنگ میکنه. تعداد چون زیاده :گریه:
سلام عليكم
چون تعداد زياد است و برنامه قفل ميشود ميتوانيد از دستور DoEvents در حلقه استفاده كنيد همچنين يك متن "Please Wait" يا يك ProgressBar و نظير اينها تا اتمام عمليات بارگذاري به منظور اطلاع رساني به كاربر جهت انتظار نمايش دهيد
موفق باشيد
xrezax
دوشنبه 13 تیر 1390, 08:41 صبح
میشه ایدیتش کنی واسم ممنونت میشم :قلب:
محسن واژدی
دوشنبه 13 تیر 1390, 09:26 صبح
کد زیر که ویرایش شده پست 4 است را جایگزین کد دکمه Load کنید:
On Error Resume Next
Dim St As String
Dim Adress As String
CD.Filter = ".Texts|*.txt"
CD.ShowOpen
Adress = CD.FileName
If Adress = "" Then
Exit Sub
End If
Open Adress For Input As #1
Me.Caption = "Loading..."
Do Until EOF(1)
Line Input #1, St
List1.AddItem St
List1.ListIndex = 0
DoEvents
Loop
Me.Caption = "Loaded"
Close #1
موفق باشید
AMIBCT
دوشنبه 13 تیر 1390, 09:38 صبح
دو تا راه هست كه ميشه سرعت رو افزايش داد
اول استفاده از دستور LockWindowUpdate به صورت زير
LockWindowUpdate( List1.hWnd )
....
LockWindowUpdate( 0 )
اين دستور در API ويندوز است و قبلش بايد تعريف تابع رو در بالاي برنامهتون قرار بديد
راه دوم هم خاموش كردن Visible ليست قبل از شروع عمليات و روشن كردن Visible بعد از پايان عمليات است
به طور كلي ListBox يه شيء مبتدي به حساب مياد
و براي مديريت تعداد زيادي رديف مناسب نيست
محسن واژدی
دوشنبه 13 تیر 1390, 12:37 عصر
دو تا راه هست كه ميشه سرعت رو افزايش داد
اول استفاده از دستور LockWindowUpdate به صورت زير
LockWindowUpdate( List1.hWnd )
....
LockWindowUpdate( 0 )
اين دستور در API ويندوز است و قبلش بايد تعريف تابع رو در بالاي برنامهتون قرار بديد
راه دوم هم خاموش كردن Visible ليست قبل از شروع عمليات و روشن كردن Visible بعد از پايان عمليات است
به طور كلي ListBox يه شيء مبتدي به حساب مياد
و براي مديريت تعداد زيادي رديف مناسب نيست
استفاده از روشی که جناب AMIBCT در پست فوق پیشنهاد کرده اند هم میتواند سریعتر و هم بهینه تر باشد
موفق باشید
xrezax
دوشنبه 13 تیر 1390, 16:00 عصر
میشه خود سورسو ایدیت شده بزارید اینجا من نگرفتم :لبخند:
محسن واژدی
دوشنبه 13 تیر 1390, 17:07 عصر
در سورس زیر این API به دستور Load اضافه شده است
برای دستورات ذخیره سازی نیز میتوانید بدین صورت عمل کنید
موفق باشید
xrezax
دوشنبه 13 تیر 1390, 21:15 عصر
اررور می زنه
به حلقه J اشکال می گیره
محسن واژدی
سه شنبه 14 تیر 1390, 10:31 صبح
اررور می زنه
به حلقه J اشکال می گیره
چه خطایی میدهد؟ همینطور داخل چه روالی است چون بنده بجز روال Load مابقی کدها را نخوانده ام
xrezax
سه شنبه 14 تیر 1390, 11:03 صبح
به همون حلقه j اررور می ده
محسن واژدی
سه شنبه 14 تیر 1390, 11:15 صبح
باید ابتدا این منتغیر را توسط دستور اعلان Dim تعریف کنید:
Dim j
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.