Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

ListView.InsertionMark, propriété

Obtient un objet utilisé pour indiquer l'emplacement cible attendu lorsqu'un élément est déplacé dans un contrôle ListView.

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

[BrowsableAttribute(false)]
public ListViewInsertionMark InsertionMark { get; }

Valeur de propriété

Type : System.Windows.Forms.ListViewInsertionMark
Objet ListViewInsertionMark qui représente la marque d'insertion.

La fonctionnalité de marque d'insertion ListView vous permet d'indiquer visuellement l'emplacement cible attendu dans une opération de glisser-déplacer lorsqu'un élément est glissé vers une nouvelle position. Cette fonctionnalité fonctionne uniquement lorsque la propriété AutoArrange a la valeur true et lorsque le contrôle ListView ne trie pas automatiquement les éléments. Pour empêcher le tri automatique, la propriété Sorting doit avoir la valeur SortOrder.None et la propriété View doit avoir la valeur View.LargeIcon, View.SmallIcon ou View.Tile. De plus, il se peut que la fonctionnalité de marque d'insertion ne soit pas visible avec la fonctionnalité de regroupement ListView, car celle-ci met en ordre les éléments par appartenance aux groupes.

La classe ListViewInsertionMark est utilisée en général dans un gestionnaire pour l'événement Control.DragOver ou Control.MouseMove pour mettre à jour la position de la marque d'insertion lorsqu'un élément est glissé. Elle est également utilisée dans un gestionnaire pour l'événement Control.DragDrop ou Control.MouseUp afin d'insérer un élément glissé à l'emplacement correct. Pour plus d’informations, consultez ListViewInsertionMark et Comment : afficher une marque d'insertion dans un contrôle ListView Windows Forms.

RemarqueRemarque

La fonctionnalité de marque d'insertion est uniquement disponible sur Windows XP et Windows Server 2003 lorsque votre application appelle la méthode Application.EnableVisualStyles. Sur les systèmes d'exploitation antérieurs, tout code concernant la marque d'insertion n'aura aucun effet et celle-ci n'apparaîtra pas. En conséquence, tout code qui dépend de la fonctionnalité de marque d'insertion peut ne pas fonctionner correctement. Vous pouvez inclure un code qui détermine si cette fonctionnalité est disponible et fournir d'autres fonctionnalités si elle ne l'est pas. Par exemple, vous pouvez ignorer tout le code qui implémente le repositionnement d'éléments par glisser-déplacer lors de l'exécution sur des systèmes d'exploitation qui ne prennent pas en charge les marques d'insertion.

La fonctionnalité d'insertion de marque 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 la surcharge de méthode FeatureSupport.IsPresent(Object) et passez la valeur OSFeature.Themes.

L'exemple de code suivant montre comment utiliser la fonctionnalité de marque d'insertion ListView. Cet exemple implémente une réorganisation d'éléments par glisser-déplacer à l'aide d'événements Glisser standard. La position de la marque d'insertion est mise à jour dans un gestionnaire pour l'événement Control.DragOver. 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

Pris en charge dans : 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Ajouts de la communauté

AJOUTER
Microsoft réalise une enquête en ligne pour recueillir votre opinion sur le site Web de MSDN. Si vous choisissez d’y participer, cette enquête en ligne vous sera présentée lorsque vous quitterez le site Web de MSDN.

Si vous souhaitez y participer,
Afficher:
© 2014 Microsoft