vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: WPF: ListViewItem über Mausposition bestimmen 
Autor: Maas
Datum: 04.03.09 17:49

Ich hab mir nochmal das Original in C# angesehen und übesetzt.

        ListViewItem GetListViewItem(int index)
        {
            if (ListView1.ItemContainerGenerator.Status != _
              GeneratorStatus.ContainersGenerated)
                return null;
 
            return ListView1.ItemContainerGenerator.ContainerFromIndex(index) _
              as ListViewItem;
        }
 
        // returns the index of the item in the ListView
        int GetCurrentIndex(GetPositionDelegate getPosition)
        {
            int index = -1;
            for (int i = 0; i < this.ListView1.Items.Count; ++i)
            {
                ListViewItem item = GetListViewItem(i);
                if (this.IsMouseOverTarget(item, getPosition))
                {
                    index = i;
                    break;
                }
            }
            return index;
        }
 
        bool IsMouseOverTarget( Visual target, GetPositionDelegate getPosition)
		{
			Rect bounds = VisualTreeHelper.GetDescendantBounds( target );
			Point mousePos = getPosition((IInputElement) target);
			return bounds.Contains( mousePos );
		}
 
        private void ListView1_MouseMove(object sender, MouseEventArgs e)
        {
            Debug.WriteLine(GetCurrentIndex(e.GetPosition));
        }
Der C#-Code funktioniert ohne Probleme.
Wenn ich ihn in VB schreibe:
    Public Delegate Function GetPositionDelegate(ByVal element As _
      IInputElement) As Point
 
    Private Function GetCurrentIndex(ByVal listview As ListView, ByVal _
      getPosition As GetPositionDelegate) As Integer
        For Each lvi As ListViewItem In listview.Items
            If IsMouseOverTarget(lvi, getPosition) Then
                Return listview.Items.IndexOf(lvi)
            End If
        Next
    End Function
 
    Private Function IsMouseOverTarget(ByVal target As Visual, ByVal _
      getPosition As GetPositionDelegate) As Boolean
        Dim bounds As Rect = VisualTreeHelper.GetDescendantBounds(target)
        Dim mousePos As Point = getPosition(DirectCast(target, IInputElement))
        Return bounds.Contains(mousePos)
    End Function
 
    Private Sub ListView1_MouseMove(ByVal sender As System.Object, ByVal e As _
      System.Windows.Input.MouseEventArgs) Handles ListView1.MouseMove
        Debug.WriteLine(GetCurrentIndex(ListView1, e.GetPosition))
        'Fehler
    End Sub
In VB will er bei e.GetPosition noch den Parameter "relativeTo" übergeben haben.
Wieso geht das in C# ohne und in VB nur mit Parameter? Und was müsste ich bei relativeTo übergeben?

Maas

Beitrag wurde zuletzt am 04.03.09 um 17:52:50 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
WPF: ListViewItem über Mausposition bestimmen2.300Maas04.03.09 13:52
Re: WPF: ListViewItem über Mausposition bestimmen2.713Maas04.03.09 17:49

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel