ورود

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

موفق باشید