(0) exportieren Drucken
Alle erweitern

ListView.VirtualMode-Eigenschaft

Aktualisiert: November 2007

Ruft einen Wert ab, der angibt, ob Sie eigene Datenverwaltungsvorgänge für das ListView-Steuerelement bereitgestellt haben, oder legt diesen Wert fest.

Namespace:  System.Windows.Forms
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)

public bool VirtualMode { get; set; }
/** @property */
public boolean get_VirtualMode()
/** @property */
public  void set_VirtualMode(boolean value)

public function get VirtualMode () : boolean
public function set VirtualMode (value : boolean)

Eigenschaftenwert

Typ: System.Boolean
true, wenn ListView Datenverwaltungsvorgänge verwendet, die Sie bereitstellen; andernfalls false. Der Standardwert ist false.

AusnahmeBedingung
InvalidOperationException

VirtualMode ist auf true festgelegt, und eine der folgenden Voraussetzungen ist erfüllt:

Durch Festlegen der VirtualMode-Eigenschaft auf true wird ListView in den virtuellen Modus gesetzt. Im virtuellen Modus wird die normale Items-Auflistung nicht verwendet. Stattdessen werden ListViewItem-Objekte dynamisch bei Bedarf für die ListView erstellt.

Der virtuelle Modus kann in vielen Fällen nützlich sein. Wenn ein ListView-Objekt mit einer sehr großen Auflistung gefüllt werden muss, die sich bereits im Speicher befindet, kann das Erstellen eines ListViewItem-Objekts für jeden Eintrag sehr aufwändig sein. Im virtuellen Modus werden nur die erforderlichen Elemente erstellt. In anderen Fällen müssen die Werte der ListViewItem-Objekte eventuell häufig neu berechnet werden. Dies würde in Bezug auf die gesamte Auflistung zu inakzeptablen Leistungseinbußen führen. Im virtuellen Modus werden nur die erforderlichen Elemente neu berechnet.

Um den virtuellen Modus verwenden zu können, müssen Sie das RetrieveVirtualItem-Ereignis behandeln, das jedes Mal dann ausgelöst wird, wenn die ListView ein neues Element benötigt. Dieser Ereignishandler muss das ListViewItem-Objekt am angegebenen Index erstellen. Außerdem muss die VirtualListSize-Eigenschaft auf die Größe der virtuellen Liste festgelegt werden.

Durch Behandeln des SearchForVirtualItem-Ereignisses kann eine Suche im virtuellen Modus durchgeführt werden. Wenn dieses Ereignis nicht behandelt wird, geben die FindItemWithText-Methode und die FindNearestItem-Methode null zurück.

Sie können das CacheVirtualItems-Ereignis behandeln, um einen Cache der ListViewItem-Objekte zu verwalten. Falls die Berechnung oder Suche beim Erstellen eines ListViewItem-Objekts sehr aufwändig ist, kann die Leistung durch die Verwaltung eines Caches verbessert werden.

Wenn die View-Eigenschaft auf Tile festgelegt ist, wird der Wert automatisch auf LargeIcon geändert, wenn VirtualMode auf true festgelegt wird.

Im virtuellen Modus ist die Items-Auflistung deaktiviert. Der Versuch, darauf zuzugreifen, löst eine InvalidOperationException aus. Dasselbe gilt für die CheckedItems-Auflistung und die SelectedItems-Auflistung. Wenn Sie die ausgewählten oder überprüften Elemente abrufen möchten, verwenden Sie stattdessen die SelectedIndices-Auflistung bzw. die CheckedIndices-Auflistung.

In diesem Beispiel wird eine einfache ListView erstellt, die die ersten zehntausend Quadratzahlen enthält. Die Suche wird unterstützt, und zur Leistungsverbesserung wird ein Cache verwendet.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Text;
using System.Windows.Forms;

public class Form1 : Form
{
    private ListViewItem[] myCache; //array to cache items for the virtual list
    private int firstItem; //stores the index of the first item in the cache

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    public Form1()
    {
        //Create a simple ListView.
        ListView listView1 = new ListView();
        listView1.View = View.SmallIcon;
        listView1.VirtualMode = true;
        listView1.VirtualListSize = 10000;

        //Hook up handlers for VirtualMode events.
        listView1.RetrieveVirtualItem += new RetrieveVirtualItemEventHandler(listView1_RetrieveVirtualItem);
        listView1.CacheVirtualItems += new CacheVirtualItemsEventHandler(listView1_CacheVirtualItems);
        listView1.SearchForVirtualItem += new SearchForVirtualItemEventHandler(listView1_SearchForVirtualItem);

        //Add ListView to the form.
        this.Controls.Add(listView1);

        //Search for a particular virtual item.
        //Notice that we never manually populate the collection!
        //If you leave out the SearchForVirtualItem handler, this will return null.
        ListViewItem lvi = listView1.FindItemWithText("111111");

        //Select the item found and scroll it into view.
        if (lvi != null)
        {
            listView1.SelectedIndices.Add(lvi.Index);
            listView1.EnsureVisible(lvi.Index);
        }
    }

    //The basic VirtualMode function.  Dynamically returns a ListViewItem
    //with the required properties; in this case, the square of the index.
    void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
    {
        //Caching is not required but improves performance on large sets.
        //To leave out caching, don't connect the CacheVirtualItems event 
        //and make sure myCache is null.

        //check to see if the requested item is currently in the cache
        if (myCache != null && e.ItemIndex >= firstItem && e.ItemIndex < firstItem + myCache.Length)
        {
            //A cache hit, so get the ListViewItem from the cache instead of making a new one.
            e.Item = myCache[e.ItemIndex - firstItem];
        }
        else
        {
            //A cache miss, so create a new ListViewItem and pass it back.
            int x = e.ItemIndex * e.ItemIndex;
            e.Item = new ListViewItem(x.ToString());
        }
    }

    //Manages the cache.  ListView calls this when it might need a 
    //cache refresh.
    void listView1_CacheVirtualItems(object sender, CacheVirtualItemsEventArgs e)
    {
        //We've gotten a request to refresh the cache.
        //First check if it's really neccesary.
        if (myCache != null && e.StartIndex >= firstItem && e.EndIndex <= firstItem + myCache.Length)
        {
            //If the newly requested cache is a subset of the old cache, 
            //no need to rebuild everything, so do nothing.
            return;
        }

        //Now we need to rebuild the cache.
        firstItem = e.StartIndex;
        int length = e.EndIndex - e.StartIndex + 1; //indexes are inclusive
        myCache = new ListViewItem[length];

        //Fill the cache with the appropriate ListViewItems.
        int x = 0;
        for (int i = 0; i < length; i++)
        {
            x = (i + firstItem) * (i + firstItem);
            myCache[i] = new ListViewItem(x.ToString());
        }

    }

    //This event handler enables search functionality, and is called
    //for every search request when in Virtual mode.
    void listView1_SearchForVirtualItem(object sender, SearchForVirtualItemEventArgs e)
    {
        //We've gotten a search request.
        //In this example, finding the item is easy since it's
        //just the square of its index.  We'll take the square root
        //and round.
        double x = 0;
        if (Double.TryParse(e.Text, out x)) //check if this is a valid search
        {
            x = Math.Sqrt(x);
            x = Math.Round(x);
            e.Index = (int)x;

        }
        //If e.Index is not set, the search returns null.
        //Note that this only handles simple searches over the entire
        //list, ignoring any other settings.  Handling Direction, StartIndex,
        //and the other properties of SearchForVirtualItemEventArgs is up
        //to this handler.
    }
}


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft