ListViewInsertionMark.AppearsAfterItem Proprietà

Definizione

Ottiene o imposta un valore che indica se il segno di inserimento viene visualizzato alla destra dell'elemento con l'indice specificato dalla proprietà Index.

public:
 property bool AppearsAfterItem { bool get(); void set(bool value); };
public bool AppearsAfterItem { get; set; }
member this.AppearsAfterItem : bool with get, set
Public Property AppearsAfterItem As Boolean

Valore della proprietà

true se il segno di inserimento è visualizzato alla destra dell'elemento con l'indice specificato dalla proprietà Index; in caso contrario, false. Il valore predefinito è false.

Esempio

Nell'esempio di codice seguente viene illustrato come usare la ListView funzionalità di contrassegno di inserimento e viene implementato il riordinamento degli elementi di 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 utilizzato per determinare se il segno di inserimento viene visualizzato a sinistra o a destra dell'elemento.

Per l'esempio completo, vedere l'argomento di ListViewInsertionMark 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 NearestIndex metodo consente di trovare l'elemento più vicino al puntatore del mouse, ma è necessario eseguire calcoli personalizzati per determinare se il segno di inserimento deve essere visualizzato prima o dopo questo elemento.

Per calcolare il valore necessario per la AppearsAfterItem proprietà, seguire questa procedura:

  1. Utilizzare il NearestIndex metodo per recuperare l'indice dell'elemento più vicino al puntatore del mouse.

  2. Passare il valore di indice al ListView.GetItemRect metodo per recuperare il rettangolo di delimitazione dell'elemento.

  3. Se il puntatore del mouse si trova a sinistra del punto intermedio del rettangolo di delimitazione, impostare la AppearsAfterItem proprietà su false; in caso contrario, impostarla su true.

Per altre informazioni, vedere l'argomento di ListViewInsertionMark riferimento di panoramica.

Si applica a

Vedi anche