Condividi tramite


ListViewInsertionMark.Index Proprietà

Definizione

Ottiene o imposta l'indice dell'elemento accanto al quale viene visualizzato il segno di inserimento.

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

Valore della proprietà

Indice dell'elemento accanto al quale viene visualizzato il segno di inserimento o -1 se il segno di inserimento è nascosto.

Esempio

Nell'esempio di codice seguente viene illustrato come usare la funzionalità di contrassegno di inserimento e implementa la riordinazione dell'elemento ListView trascinamento tramite gli eventi di trascinamento standard. La posizione del segno di inserimento viene aggiornata in un gestore per l'evento Control.DragOver . In questo gestore la posizione del puntatore del mouse viene confrontata con il punto intermedio dell'elemento più vicino e il risultato viene usato per determinare se il segno di inserimento appare a sinistra o a destra dell'elemento.

Per l'esempio completo, vedere l'argomento ListViewInsertionMark di riferimento di panoramica.

// 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

Commenti

Il segno di inserimento viene visualizzato a sinistra dell'elemento con l'indice specificato se la AppearsAfterItem proprietà è impostata su false; in caso contrario, viene visualizzata a destra dell'elemento. Il segno di inserimento scompare automaticamente quando un elemento trascinato viene inserito nella ListView.Items raccolta. Per rimuovere manualmente il segno di inserimento, ad esempio quando un elemento viene trascinato su se stesso o trascinato all'esterno del controllo, impostare il Index valore su -1.

Utilizzare il NearestIndex metodo per recuperare l'indice dell'elemento più vicino a una posizione specificata, ad esempio la posizione del puntatore del mouse durante la posizione di un elemento in un'operazione di trascinamento della selezione.

Si applica a

Vedi anche