ListViewInsertionMark.Index Eigenschaft

Definition

Ruft den Index des Elements ab, neben dem die Einfügemarke angezeigt wird, oder legt diesen fest.

public:
 property int Index { int get(); void set(int value); };
public int Index { get; set; }
member this.Index : int with get, set
Public Property Index As Integer

Eigenschaftswert

Der Index des nächstgelegenen Elements, neben dem die Einfügemarke angezeigt wird, oder -1, wenn die Einfügemarke ausgeblendet wird.

Beispiele

Das folgende Codebeispiel veranschaulicht die Verwendung der ListView Einfügemarke-Funktion und implementiert die Neuanordnung von Elementen per Drag-and-Drop mithilfe der standardmäßigen Ziehereignisse. Die Position der Einfügemarke wird in einem Handler für das Control.DragOver Ereignis aktualisiert. In diesem Handler wird die Position des Mauszeigers mit dem Mittelpunkt des nächsten Elements verglichen, und das Ergebnis wird verwendet, um zu bestimmen, ob die Einfügemarke links oder rechts vom Element angezeigt wird.

Das vollständige Beispiel finden Sie im ListViewInsertionMark Übersichtsreferenzthema.

// Moves the insertion mark as the item is dragged.
void myListView_DragOver( Object^ /*sender*/, DragEventArgs^ e )
{
   // Retrieve the client coordinates of the mouse pointer.
   Point targetPoint = myListView->PointToClient( 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;
}
// 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;
}
' Moves the insertion mark as the item is dragged.
Private Sub myListView_DragOver(sender As Object, e As DragEventArgs)
    ' Retrieve the client coordinates of the mouse pointer.
    Dim targetPoint As Point = myListView.PointToClient(New Point(e.X, e.Y))
    
    ' Retrieve the index of the item closest to the mouse pointer.
    Dim targetIndex As Integer = _
        myListView.InsertionMark.NearestIndex(targetPoint)
    
    ' Confirm that the mouse pointer is not over the dragged item.
    If targetIndex > -1 Then
        ' 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.
        Dim itemBounds As Rectangle = myListView.GetItemRect(targetIndex)
        If targetPoint.X > itemBounds.Left + (itemBounds.Width / 2) Then
            myListView.InsertionMark.AppearsAfterItem = True
        Else
            myListView.InsertionMark.AppearsAfterItem = False
        End If
    End If
    
    ' 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
End Sub

Hinweise

Die Einfügemarke wird links neben dem Element mit dem angegebenen Index angezeigt, wenn die AppearsAfterItem -Eigenschaft auf falsefestgelegt ist. Andernfalls wird sie rechts neben dem Element angezeigt. Die Einfügemarke wird automatisch ausgeblendet, wenn ein gezogenes Element in die ListView.Items Auflistung eingefügt wird. Um die Einfügemarke manuell zu entfernen, z. B. wenn ein Element auf sich selbst gezogen oder außerhalb des Steuerelements gezogen wird, legen Sie den Index Wert auf -1 fest.

Verwenden Sie die NearestIndex -Methode, um den Index des Elements abzurufen, der einer angegebenen Position am nächsten liegt, z. B. die Position des Mauszeigers beim Positionieren eines Elements in einem Drag-and-Drop-Vorgang.

Gilt für:

Weitere Informationen