2016-03-26 9 views
-2

BenVB'yi kullanmak, son X miktarı öğesinin ListBox'tan kaldırılmasının daha iyi bir yolu var mı?

For i As Integer = 1 To 10 
    ListBox1.Items.RemoveAt(ListBox1.Items.Count - 1) 
Next i 

daha iyi, bir satır çözüm var mı kullanmak son 10 öğeleri kaldırmak için?

DÜZENLEME:

sorum beklemeye alınır ve biraz daha iyi ben soruyordu açıklamak istiyorum görüyoruz

. Bu kurulun kurallarına uymak için adım attığım soruya kısa ve bir noktaya değinmeyi denedim ve belki de bunu netleştiremedim. Lütfen, sadece birkaç hafta içinde VB için çok yeni olduğumu unutmayın. Bu yüzden henüz bilmediğim bir şey var.

VBA ve Excel ile bazı ihtiyaç temelli deneyimim var ve bu da bana soruyu sormamı sağladı. Excel belgesinin A sütununda bir öğe listesi olduğunu ve son 10 öğeyi listeden silmem gerektiğini varsayalım. Zaman içinde her zaman 10'dan fazla öğe olduğunu iddia ediyor ve daha az olduğu ve listede boş bir hücre olmadığını hesaba katmamız gerekmiyor. Ben kullanacağı kod olacaktır.

Aralığı ("A999999") End (xlUp) .Offset (-10, 0) .Range. ("A1: A10") Sil Shift: = xlUp

Her bir hücreden geçmeden tek bir çizgi çözümünün nasıl olduğunu görün. Sadece bir aralık verdim ve onu silmeyi söyledim. Bu yüzden bana VB'yi merak ettim ve her eşyaya döngü yapmak yerine benzer bir şey olup olmadığını merak ettim. Orada olabileceğini düşündüm ve deneyimsizliğimden dolayı aşina olmayabilirim. Temelde benim soru - ListBox1.Items.RemoveLast (10) VB var veya değil gibi basit bir şey mi? Umarım bu, bir kısmım sorusu ile nereden geldiğimi anlamama yardımcı oldu ve okuma için teşekkürler.

+1

Sadece doğru olduğu zaman ve * nasıl * yazacağını ve nasıl yazacağını bildiğiniz zaman daha iyidir. Önce doğru kodu yazın, ListBox'un 9 veya daha az öğeye sahip olması durumunda çalışmasını sağlayın. –

+0

Hans Passant, kodumda yanlış olduğunu düşündüğünüz şeyler hakkında ayrıntılı bilgi verebilir misiniz? ListBox'tan son 10 öğeyi kaldırmam için çalışıyor. Sadece daha az madde olma ihtimalini hesaba katmamış mı? Bunu hesaba katsaydım, aşağıdaki kodu kullanırdım. Size doğru görünüyor mu? 'O ListBox1.Items.Count> 10 Eğer i için Integer = 1 için 10 ListBox1.Items.RemoveAt (ListBox1.Items.Count - 1) Sonraki başka ListBox1.Items.Clear() End Eğer – tanbox

+0

@HansPassant ise yukarıdaki kodun fikri kutudaki öğeleri saymaktır. Son 10 öğeyi kaldırmaktan 10'dan fazla öğe varsa. Sayı 10'a eşit veya daha azsa, tüm Liste Kutusunu temizleyin. – tanbox

cevap

1

Bu şekilde her yapabileceğini: Tek satırlık bir çözüm istiyorsanız

Dim amountToRemove As Integer = 10 
    Dim items As IEnumerable(Of Object) = Me.ListBox1.Items.Cast(Of Object)() 

    If (items.Count < amountToRemove) Then 
     Throw New IndexOutOfRangeException(message:="...") 

    Else 
     Me.ListBox1.SuspendLayout() 
     For i As Integer = 0 To (amountToRemove - 1) 
      Me.ListBox1.Items.Remove(items.Last) 
     Next i 
     Me.ListBox1.ResumeLayout() 

    End If 

ardından adlandırmak bir satır kullanın yöntem haline mantığı koydu.

İlgili konular