ListViewInsertionMark.NearestIndex(Point) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft den Index des dem angegebenen Punkt am nächsten liegenden Elements ab.
public:
int NearestIndex(System::Drawing::Point pt);
public int NearestIndex (System.Drawing.Point pt);
member this.NearestIndex : System.Drawing.Point -> int
Public Function NearestIndex (pt As Point) As Integer
Parameter
- pt
- Point
Ein Point, der die Position darstellt, von der das nächstgelegene Element gesucht werden soll.
Gibt zurück
Der Index des dem angegebenen Punkt am nächsten liegenden Elements oder -1, wenn das nächstgelegene Element derzeit gezogen 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
Mit dieser Methode können Sie das Element suchen, das dem Mauszeiger am nächsten liegt, wenn Sie einen Drag-and-Drop-Vorgang ausführen. Verwenden Sie den zurückgegebenen Indexwert, um die Index -Eigenschaft festzulegen. Wenn das Element, das dem Mauszeiger am nächsten ist, das gezogene Element ist, ist der Rückgabewert dieser Methode -1. In diesem Fall blendet das Festlegen der Index Eigenschaft auf diesen Wert die Einfügemarke aus.
Diese Methode sucht das nächstgelegene Element, unabhängig davon, wo sich der Mauszeiger befindet, während die ListView.GetItemAt Methode das Element nur an der angegebenen Position zurückgibt, oder null
wenn an dieser Position kein Element vorhanden ist. Die ListView.GetItemAt -Methode gibt zurück null
, z. B. wenn sich der Mauszeiger zwischen zwei Elementen befindet. Aus diesem Grund sollten Sie immer die NearestIndex -Methode verwenden, wenn Sie einen Drag-and-Drop-Vorgang zum Positionieren von Elementen verwenden.