Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

ListViewInsertionMark classe

 

Date de publication : novembre 2016

Utilisé pour indiquer l’emplacement cible attendu lorsqu’un élément est déplacé vers une nouvelle position dans un ListView contrôle. Cette fonctionnalité est disponible uniquement sur Windows XP et versions ultérieures.

Espace de noms:   System.Windows.Forms
Assembly:  System.Windows.Forms (dans System.Windows.Forms.dll)

System.Object
  System.Windows.Forms.ListViewInsertionMark

public sealed class ListViewInsertionMark

NomDescription
System_CAPS_pubpropertyAppearsAfterItem

Obtient ou définit une valeur indiquant si la marque d’insertion apparaît à droite de l’élément avec l’index spécifié par le Index propriété.

System_CAPS_pubpropertyBounds

Obtient le rectangle englobant de la marque d’insertion.

System_CAPS_pubpropertyColor

Obtient ou définit la couleur de la marque d’insertion.

System_CAPS_pubpropertyIndex

Obtient ou définit l’index de l’élément auprès duquel la marque d’insertion s’affiche.

NomDescription
System_CAPS_pubmethodEquals(Object)

Détermine si l'objet spécifié est identique à l'objet actuel.(Hérité de Object.)

System_CAPS_pubmethodGetHashCode()

Fait office de fonction de hachage par défaut.(Hérité de Object.)

System_CAPS_pubmethodGetType()

Obtient le Type de l'instance actuelle.(Hérité de Object.)

System_CAPS_pubmethodNearestIndex(Point)

Récupère l’index de l’élément le plus proche du point spécifié.

System_CAPS_pubmethodToString()

Retourne une chaîne qui représente l'objet actuel.(Hérité de Object.)

Vous pouvez récupérer un ListViewInsertionMark à partir de la InsertionMark propriété d’un ListView contrôle et l’utiliser pour indiquer visuellement l’emplacement cible attendu dans une opération de glisser-déplacer lorsqu’un élément est déplacé vers une nouvelle position.

Cette fonctionnalité fonctionne uniquement lorsque le ListView.AutoArrange est définie sur true et à quel moment la ListView contrôle ne trie pas automatiquement les éléments. Pour empêcher le tri automatique, la ListView.Sorting propriété doit être définie sur SortOrder.None et ListView.View propriété doit être définie sur View.LargeIcon, View.SmallIcon, ou View.Tile. En outre, la fonctionnalité de marque d’insertion ne peut pas être utilisée avec les ListView fonctionnalité de regroupement, car la fonctionnalité de regroupement trie les éléments par appartenance aux groupes.

La ListViewInsertionMark classe est généralement utilisée dans un gestionnaire pour le Control.DragOver ou Control.MouseMove événement pour mettre à jour la position de la marque d’insertion, comme un élément est glissé. Il est également utilisé dans un gestionnaire pour le Control.DragDrop ou Control.MouseUp événement à insérer un élément glissé à l’emplacement approprié.

Pour mettre à jour la position de la marque d’insertion, procédez comme suit :

  1. Dans un gestionnaire pour le Control.DragOver ou Control.MouseMove événement, utilisez le ListView.InsertionMark propriété pour accéder à la ListViewInsertionMark objet associé à le ListView contrôle.

  2. Utilisez la NearestIndex méthode pour récupérer l’index de l’élément le plus proche du pointeur de la souris.

  3. Passer la valeur d’index à la ListView.GetItemRect méthode pour récupérer le rectangle englobant de l’élément.

  4. Si le pointeur de la souris se trouve à gauche du milieu du rectangle englobant, définissez le AppearsAfterItem propriété false; Sinon, affectez-lui la valeur true.

  5. Définir le Index propriété à la valeur d’index récupérée de la NearestIndex (méthode). La marque d’insertion apparaît en regard de l’élément avec l’index spécifié, soit à gauche ou à droite, selon le AppearsAfterItem valeur de propriété. Si un élément est glissé sur lui-même, l’index est -1 et la marque d’insertion est masquée.

Pour insérer l’élément glissé à l’emplacement correct, procédez comme suit :

  1. Dans un gestionnaire pour le Control.DragDrop ou Control.MouseUp événement, utilisez le Index propriété pour déterminer l’emplacement actuel de la marque d’insertion. Stockez la valeur à utiliser ultérieurement comme index d’insertion.

  2. Si la AppearsAfterItem est définie sur true, incrémente la valeur d’index d’insertion stocké.

  3. Utilisez la ListView.ListViewItemCollection.Insert méthode pour insérer un clone de l’élément déplacé dans le ListView.Items collection à l’index d’insertion stocké.

  4. Utilisez la ListView.ListViewItemCollection.Remove méthode pour supprimer la copie originale de l’élément déplacé.

Vous devez insérer un clone de l’élément glissé avant que la copie d’origine est supprimée pour les valeurs d’index dans le ListView.Items collection ne sont pas modifiées avant l’insertion.

Pour vous assurer que les éléments sont affichés dans le même ordre que leurs valeurs d’index, vous devez définir le ListView.ListViewItemSorter propriété à une implémentation de la IComparer interface qui trie les éléments par valeur d’index. Pour plus d’informations, consultez la section exemple.

Vous pouvez modifier la couleur de la marque d’insertion à l’aide de la Color propriété. Si vous avez besoin de la taille ou la position de la marque d’insertion, vous pouvez obtenir son rectangle englobant la Bounds propriété.

System_CAPS_noteRemarque

La fonctionnalité de marque d’insertion est uniquement disponible sur Windows XP et la famille Windows Server 2003 lorsque votre application appelle la Application.EnableVisualStyles méthode. Sur les systèmes d’exploitation antérieurs, tout code concernant la marque d’insertion sera ignoré et la marque d’insertion n’apparaît pas. Par conséquent, tout code qui dépend de la fonctionnalité de marque d’insertion peut ne pas fonctionne correctement. Vous pouvez inclure un test qui détermine si la fonctionnalité de marque d’insertion est disponible et fournir d’autres fonctionnalités lorsqu’il n’est pas disponible. Par exemple, vous souhaiterez éventuellement ignorer tout le code qui implémente le repositionnement lors de l’exécution sur les systèmes d’exploitation qui ne prennent pas en charge les marques d’insertion d’éléments par glisser-déplacer.

La fonctionnalité de marque d’insertion est fournie par la même bibliothèque qui fournit la fonctionnalité des thèmes du système d’exploitation. Pour vérifier la disponibilité de cette bibliothèque, appelez le FeatureSupport.IsPresent(Object) la surcharge de méthode et transmettez la OSFeature.Themes valeur.

L’exemple de code suivant montre comment utiliser le ListView fonctionnalité de marque d’insertion et implémente par glisser-déplacer réorganisation à l’aide de la norme des événements glisser. La position de la marque d’insertion est mise à jour dans un gestionnaire pour le Control.DragOver événement. Dans ce gestionnaire, la position du pointeur de la souris est comparée au milieu de l’élément le plus proche, et le résultat est utilisé pour déterminer si la marque d’insertion apparaît à gauche ou à droite de l’élément.

using System;
using System.Drawing;
using System.Windows.Forms;

public class ListViewInsertionMarkExample : Form
{
    private ListView myListView; 

    public ListViewInsertionMarkExample()
    {
        // Initialize myListView.
        myListView = new ListView();
        myListView.Dock = DockStyle.Fill;
        myListView.View = View.LargeIcon;
        myListView.MultiSelect = false;
        myListView.ListViewItemSorter = new ListViewIndexComparer();

        // Initialize the insertion mark.
        myListView.InsertionMark.Color = Color.Green;

        // Add items to myListView.
        myListView.Items.Add("zero");
        myListView.Items.Add("one");
        myListView.Items.Add("two");
        myListView.Items.Add("three");
        myListView.Items.Add("four");
        myListView.Items.Add("five");

        // Initialize the drag-and-drop operation when running
        // under Windows XP or a later operating system.
        if (OSFeature.Feature.IsPresent(OSFeature.Themes))
        {
            myListView.AllowDrop = true;
            myListView.ItemDrag += new ItemDragEventHandler(myListView_ItemDrag);
            myListView.DragEnter += new DragEventHandler(myListView_DragEnter);
            myListView.DragOver += new DragEventHandler(myListView_DragOver);
            myListView.DragLeave += new EventHandler(myListView_DragLeave);
            myListView.DragDrop += new DragEventHandler(myListView_DragDrop);
        }

        // Initialize the form.
        this.Text = "ListView Insertion Mark Example";
        this.Controls.Add(myListView);
    }

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

    // Starts the drag-and-drop operation when an item is dragged.
    private void myListView_ItemDrag(object sender, ItemDragEventArgs e)
    {
        myListView.DoDragDrop(e.Item, DragDropEffects.Move);
    }

    // Sets the target drop effect.
    private void myListView_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = e.AllowedEffect;
    }

    // Moves the insertion mark as the item is dragged.
    private void myListView_DragOver(object sender, DragEventArgs e)
    {
        // Retrieve the client coordinates of the mouse pointer.
        Point targetPoint = 
            myListView.PointToClient(new Point(e.X, e.Y));

        // Retrieve the index of the item closest to the mouse pointer.
        int targetIndex = myListView.InsertionMark.NearestIndex(targetPoint);

        // Confirm that the mouse pointer is not over the dragged item.
        if (targetIndex > -1) 
        {
            // Determine whether the mouse pointer is to the left or
            // the right of the midpoint of the closest item and set
            // the InsertionMark.AppearsAfterItem property accordingly.
            Rectangle itemBounds = myListView.GetItemRect(targetIndex);
            if ( targetPoint.X > itemBounds.Left + (itemBounds.Width / 2) )
            {
                myListView.InsertionMark.AppearsAfterItem = true;
            }
            else
            {
                myListView.InsertionMark.AppearsAfterItem = false;
            }
        }

        // Set the location of the insertion mark. If the mouse is
        // over the dragged item, the targetIndex value is -1 and
        // the insertion mark disappears.
        myListView.InsertionMark.Index = targetIndex;
    }

    // Removes the insertion mark when the mouse leaves the control.
    private void myListView_DragLeave(object sender, EventArgs e)
    {
        myListView.InsertionMark.Index = -1;
    }

    // Moves the item to the location of the insertion mark.
    private void myListView_DragDrop(object sender, DragEventArgs e)
    {
        // Retrieve the index of the insertion mark;
        int targetIndex = myListView.InsertionMark.Index;

        // If the insertion mark is not visible, exit the method.
        if (targetIndex == -1) 
        {
            return;
        }

        // If the insertion mark is to the right of the item with
        // the corresponding index, increment the target index.
        if (myListView.InsertionMark.AppearsAfterItem) 
        {
            targetIndex++;
        }

        // Retrieve the dragged item.
        ListViewItem draggedItem = 
            (ListViewItem)e.Data.GetData(typeof(ListViewItem));

        // Insert a copy of the dragged item at the target index.
        // A copy must be inserted before the original item is removed
        // to preserve item index values. 
        myListView.Items.Insert(
            targetIndex, (ListViewItem)draggedItem.Clone());

        // Remove the original copy of the dragged item.
        myListView.Items.Remove(draggedItem);
    }

    // Sorts ListViewItem objects by index.
    private class ListViewIndexComparer : System.Collections.IComparer
    {
        public int Compare(object x, object y)
        {
            return ((ListViewItem)x).Index - ((ListViewItem)y).Index;
        }
    }

}

.NET Framework
Disponible depuis 2.0

Tous les membres statiques publics ( Shared en Visual Basic) de ce type sont thread-safe. Les membres d’instance n’ont pas la garantie d’être thread-safe.

Retour au début
Afficher: