VB.NET listview 的虚模式

搜了半天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.   
    '''

    ''' Braucht eine halbe Ewigkeit...
    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

你可能感兴趣的:(VB.NET listview 的虚模式)