搜了半天C#的很多,转换到VB.NET总不对,好不容易找到这篇,就不翻译了,很容易搞定
NND,virtualmode真不是一般的强大啊,速度简直太快了
' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Sch?den
' wird nicht gehaftet.
' Um Fehler oder Fragen zu kl?ren, nutzen Sie bitte unser Forum.
' Ansonsten viel Spa? und Erfolg mit diesem Source!
' Projektversion: Visual Studio 2005
'
' Referenzen:
' - System
' - System.Data
' - System.Deployment
' - System.Drawing
' - System.Windows.Forms
' - System.Xml
'
' Imports:
' - Microsoft.VisualBasic
' - System
' - System.Collections
' - System.Collections.Generic
' - System.Data
' - System.Drawing
' - System.Diagnostics
' - System.Windows.Forms
'
' ##############################################################################
' ################################# Form1.vb ###################################
' ##############################################################################
Option Strict On
Public Class Form1
Private Structure Zahlen
Public Zahl As Integer
Public Wurzel As Double
Public Log10 As Double
Public Sub New(ByVal Zahl As Integer)
Me.Zahl = Zahl
Me.Wurzel = Math.Sqrt(Zahl)
Me.Log10 = Math.Log10(Zahl)
End Sub
End Structure
Private EinPaarZahlen As New List(Of Zahlen)
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
' Generiert ein paar Zahlen, welche im ListView-Control angezeigt werden
For i As Integer = 1 To 1000000
EinPaarZahlen.Add(New Zahlen(i))
Next i
End Sub
'''
''' Aktiviert den virtuellen Modues des ListView-Controls
'''
'''
Private Sub btnHinzufuegenVirtuell_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnHinzufuegenVirtuell.Click
' Virtual-Mode anschalten
' Vor diesem Schritt ist es wichtig, dass das ListView keine "per Hand"
' hinzugefügten Elemente enth?lt, ansonsten erh?lt man eine
' Exception
lsvBeispiel.VirtualMode = True
' Das ListView erwartet in der Eigenschaft VirtualListSize die Anzahl
' der Elemente, die es anzeigen soll
lsvBeispiel.VirtualListSize = EinPaarZahlen.Count
btnHinzufuegenNormal.Enabled = False
btnHinzufuegenVirtuell.Enabled = False
End Sub
'''
''' Fügt die Elemente auf "normale" Art- und Weise in das
''' ListView ein.
'''
'''
Private Sub btnHinzufuegenNormal_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnHinzufuegenNormal.Click
Me.Cursor = Cursors.WaitCursor
' Verhindert, dass das Control sich w?hrend dem Hinzufügen der Eintr?ge
' immer wieder neu zeichnet
lsvBeispiel.BeginUpdate()
For Each Zahl As Zahlen In EinPaarZahlen
lsvBeispiel.Items.Add(New ListViewItem( _
New String() { _
Zahl.Zahl.ToString("########0.####"), _
Zahl.Wurzel.ToString("########0.####"), _
Zahl.Log10.ToString("########0.####")}))
Next
lsvBeispiel.EndUpdate()
btnHinzufuegenNormal.Enabled = False
btnHinzufuegenVirtuell.Enabled = False
Me.Cursor = Cursors.Default
End Sub
Private Sub btnListeLeeren_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnListeLeeren.Click
' Auch das Entfernen einer gro?en Menge "normaler" Eintr?ge
' kostet eine Menge Zeit
Me.Cursor = Cursors.WaitCursor
lsvBeispiel.Items.Clear()
Me.Cursor = Cursors.Default
' VirtualMode ausschalten
lsvBeispiel.VirtualListSize = 0
lsvBeispiel.VirtualMode = False
btnHinzufuegenNormal.Enabled = True
btnHinzufuegenVirtuell.Enabled = True
End Sub
'''
''' Wird aufgerufen, wenn das ListView den Eintrag mit dem Index
''' e.ItemIndex ben?tigt
'''
Private Sub lsvBeispiel_RetrieveVirtualItem(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.RetrieveVirtualItemEventArgs) _
Handles lsvBeispiel.RetrieveVirtualItem
' Holt die Zahl aus unserer Liste, die das ListView-Control ben?tigt.
Dim Zahl As Zahlen = EinPaarZahlen(e.ItemIndex)
Dim lviZahl As New ListViewItem( _
New String() { _
Zahl.Zahl.ToString("########0.####"), _
Zahl.Wurzel.ToString("########0.####"), _
Zahl.Log10.ToString("########0.####")})
' Das ListView-Control erwartet wenn das Ereignis abgearbeitet ist in
' e.Item das ListViewItem, welches es angefordert hat
e.Item = lviZahl
End Sub
End Class