View Full Version : حذف سطرهای لیست باکس
samiasoft
شنبه 15 شهریور 1393, 10:30 صبح
سلام دوستان
آیا در یک لیست باکس میتوان سطرهای خالی را حذف کرد تا بصورت زیر در بیاید؟
http://samisoft.ir/1/images/OsGdJ.gif
همچنین چگونه میتوان سطرهای زوج را در یک لیست باکس حذف کرد؟
http://samisoft.ir/1/images/tC9y5.gif
برای سطرهای فرد هم میخواستم همین کارو کنم
ممنون میشم راهنمایی کنید.
Mori Bone
شنبه 15 شهریور 1393, 10:41 صبح
Dim i as integer
For i=0 to lst.ListCount -1
if(lst.List(i)="") lst.RemoveItem(i)
Next
'zoj
For i=0 to lst.ListCount -1 step 2
lst.RemoveItem(i)
Next
'fard
For i=1 to lst.ListCount -1 step 2
lst.RemoveItem(i)
Next
چون من خیلی وقته که با vb6 کار نکردم(حدود 1سال) و الان هم ide این زبان رو رو ندارم. خودم نوشتم. شاید کده من مشکل داشته باشه البته نه توی ساختار. خودتون اصلاحش کنید. مثلا از RemoveItem و List(i) مطمئن نیستم
samiasoft
شنبه 15 شهریور 1393, 11:43 صبح
ممنون ازت...کدها شما به درستی عمل میکنند اما بعد انجام دستور فقط اروری برای List1.RemoveItem (i) میارن.
نمیدوننم چرا اینطوری میشه....جز این چیزی برای پاک کردن سطر پیدا نکردم جایگزین کنم
samiasoft
شنبه 15 شهریور 1393, 16:47 عصر
مشکل انگار در تعریف For i = 0 To List1.ListCount - 1 هستش
به نظرتون بجای List1.ListCount - 1 باید چه مقداری رو قرار بدم؟ چون کل سطر رو نمیتوان قرار داد!!!
samiasoft
یک شنبه 16 شهریور 1393, 18:39 عصر
من این کدها رو نوشتم انکار درست هست
Private Sub Command1_Click()
For i = List1.ListCount - 1 To 0 Step -1
If List1.List(i) = "" Then List1.RemoveItem (i)
Next i
End Sub
Private Sub Command2_Click()
For i = List1.ListCount - 1 To 0 Step -2
List1.RemoveItem (i)
Next i
End Sub
Private Sub Command3_Click()
For i = List1.ListCount - 2 To 0 Step -2
List1.RemoveItem (i)
Next
End Sub
vbhamed
سه شنبه 18 شهریور 1393, 08:20 صبح
سلام
كدهاي شما يك مشكل منطقي داره
فرض كنيد سطرهاي فرد رو قراره حذف كنيد، يك حلقه گذاشتيد از 1 تا تعداد آيتم ها با استپ 2 يا برعكس
اولين بار اجرا سطر 1 حذف ميشه، دفعه بعد انتظار داريد سطر 3 حذف بشه ولي چون قبلا سطر 1 حذف شده سطر 3 جديد ميشه سطر 4 قديمي يعني در اولين اجراي حلقه سطر فرد حذف ميشه و در مرتبه بعدي اجراي حلقه سطر زوج كه اشتباهه
ضمنا وقتي يك آيتم حذف ميشه تعداد كل آيتمها يعني ListCount كم ميشه كه در حلقه به مشكل ميخوريد چون حلقه تعداد آيتمها رو دفعه اول حساب ميكنه براي همين يا بايد از حلقه Do...Loop استفاده كنيد يا براي راحتي از كنترل خطا طبق نمونه استفاده كنيد، كه البته حلقه Do بهتره
كد زير رو ببينيد، در ابتدا اعداد 0 تا 100 به ليست اضافه شده سپس اعداد فرد حذف ميشن، براي حذف اعداد زوج كافيه دومين حلقه به جاي 1 از 0 شروع بشه
براي اينكار ما از آرايه ItemData استفاده كرديم كه براي هر سطر ليست يك عنصر متناظر داره و ابتدا مواردي كه بايد حذف بشن رو 1 ميكنيم و در حلقه بعدي اونها رو حذف ميكنيم
Private Sub Form_Load()
On Error Resume Next
With List1
Dim i%
.Clear
For i = 0 To 100
.AddItem i
Next
For i = 1 To .ListCount - 1 Step 2
.ItemData(i) = 1
Next
For i = 0 To .ListCount - 1
If .ItemData(i) = 1 Then .RemoveItem i
Next
End With
End Sub
samiasoft
سه شنبه 18 شهریور 1393, 10:23 صبح
ممنون جناب حامد
اما چرا ارور invaid index میده ؟
کدتون رو به حالت زیر هم حتی نوشتم اما بعد از حذف سطرهای زوج ارور میاد
For i = 1 To List1.ListCount - 1 Step 2
List1.ItemData(i) = 1
Next
For i = 0 To List1.ListCount - 1
If List1.ItemData(i) = 1 Then List1.RemoveItem (i)
Next
vbhamed
سه شنبه 18 شهریور 1393, 12:32 عصر
سلام
دليل خطا رو در پست 6 توضيح دادم و گفتم براي رفعش يا بايد از كنترل خطا استفاده كنيد يا حلقه Do...Loop با كنترل تعداد عناصر
دستور On Error Resume Next رو بزاريد
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.