Udostępnij za pośrednictwem


ListViewInsertionMark.AppearsAfterItem Właściwość

Definicja

Pobiera lub ustawia wartość wskazującą, czy znak wstawiania pojawia się po prawej stronie elementu z indeksem Index określonym przez właściwość.

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

Wartość właściwości

true jeśli znacznik wstawiania pojawia się po prawej stronie elementu z indeksem określonym przez Index właściwość; w przeciwnym razie false. Wartość domyślna to false.

Przykłady

W poniższym przykładzie kodu pokazano, jak używać ListView funkcji znacznika wstawiania i implementuje zmiany kolejności elementów przeciągania i upuszczania przy użyciu standardowych zdarzeń przeciągania. Pozycja znacznika wstawiania jest aktualizowana w procedurze obsługi zdarzenia Control.DragOver . W tej procedurze obsługi położenie wskaźnika myszy jest porównywane z punktem środkowym najbliższego elementu, a wynik służy do określenia, czy znacznik wstawiania pojawia się po lewej stronie, czy po prawej stronie elementu.

Aby zapoznać się z kompletnym przykładem, zobacz ListViewInsertionMark temat przeglądu.

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

Uwagi

Metoda NearestIndex umożliwia znalezienie elementu znajdującego się najbliżej wskaźnika myszy, ale należy wykonać własne obliczenia, aby określić, czy znak wstawiania powinien pojawić się przed lub po tym elemencie.

Aby obliczyć wartość wymaganą AppearsAfterItem dla właściwości, wykonaj następujące kroki:

  1. NearestIndex Użyj metody , aby pobrać indeks elementu znajdującego się najbliżej wskaźnika myszy.

  2. Przekaż wartość indeksu ListView.GetItemRect do metody, aby pobrać prostokąt ograniczenia elementu.

  3. Jeśli wskaźnik myszy znajduje się po lewej stronie punktu środkowego prostokąta ograniczenia, ustaw AppearsAfterItem właściwość na false; w przeciwnym razie ustaw ją na true.

Aby uzyskać więcej informacji, zobacz ListViewInsertionMark temat przeglądu.

Dotyczy

Zobacz też