Zum Inhalt springen

listview erkennt datensatz nicht


Empfohlene Beiträge

Geschrieben

hi,

ich fülle ein lv mit daten;

jedoch komm es manchmal vor, das ein datensatz nicht erkannt wird

(ich markiere z.b. eine zeile und will mit der id (aus der spalte id) weitere infos zum datensatz anzeigen;

jedoch erkennt er den ds nicht, bzw ich hab den eindruck, dass immer der nächste verwendet wird;

--> bei einem 1 wird keiner erkannt

--> bei 2 ds der obere

nach nochmaligen klicken, wird dieser erkannt;

was kann das sein?

Geschrieben

kann ich so nicht nachvollziehen. bitte poste mal die relevanten codezeilen und/oder setze debugausgaben auf mausereignisse im LV. welche mauseregnisse fragst du denn überhaupt ab? und nur interessehalber: welche version der common controls verwendest du?

s'Amstel

Geschrieben

hoi

version 6.0 sp6

Private Sub ListView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)

    Dim i As Long

    Dim lID As Long

    Dim sStatus As String

    Dim lvhti As LVHITTESTINFO

    Dim dwState As LVItemStates

    Dim iIndent As Long


    If (Button = vbRightButton) Then

        lvhti.pt.x = x / Screen.TwipsPerPixelX

        lvhti.pt.y = y / Screen.TwipsPerPixelY

        If (ListView_HitTest(m_hwndLV, lvhti) <> LVI_NOITEM) Then

            If Button = vbRightButton Then

                If ListView1.ListItems.count > 0 Then

                    If Not ListView1.SelectedItem Is Nothing Then

                        lID = ListView1.SelectedItem.ListSubItems(1).Text

                        sStatus = Mid(ListView1.SelectedItem.SubItems(4), 5)

                        If sStatus = "Erledigt" Then

                            If Not ListView1.SelectedItem Is Nothing Then

                                MbMausClick = False

                                ListView_SetItemState m_hwndLV, ListView1.SelectedItem.Index - 1, 0, -1

                            End If

                            Exit Sub

                        End If

                        If lID <> 0 Then

                            frmHauptmaske.lAuftrID = lID

                            PopupMenu frmHauptmaske.mnuAuftrag

                            If Not ListView1.SelectedItem Is Nothing Then

                                MbMausClick = False

                                ListView_SetItemState m_hwndLV, ListView1.SelectedItem.Index - 1, 0, -1

                            End If

                        End If

                    End If

                End If

            End If

        Else

            If Not ListView1.SelectedItem Is Nothing Then

                MbMausClick = False

                ListView_SetItemState m_hwndLV, ListView1.SelectedItem.Index - 1, 0, -1

            End If

        End If

    End If


End Sub

ich muss dazusagen, dass die daten nur sporadisch "verloren gehen"

also das ist nicht immer so

  • 2 Wochen später...
Geschrieben

Ich bin mir nicht sicher, ob ein Rechtsklick überhaupt bewirkt, dass der Eintrag selektiert wird, zumindest nicht, bevor die Mausnachricht eintrifft. Benutzt doch mal das Ergebnis des HitTest (lvhti.iItem) als Index.

Geschrieben

hab doch meinen code oben gepostet

und sonst funktioniert es ja!

nur manchmal nicht (leider habe ich noch nicht herausgefunden, wann dies ist)

es tritt nur sporadisch auf!

das ist es ja... :(

Geschrieben
hab doch meinen code oben gepostet
Und ich habe dir einen Tipp gegeben, was du anders machen könntest. Wo ist das Problem?

Du versuchst, über den Index des selektierten Eintrags zu gehen. Und ich habe angemerkt, dass ich nicht sicher bin, ob ein Rechtsklick überhaupt die Selektion beeinflusst. Es könnte also sein, dass dir SelectedItem überhaupt nichts bringt, weil die Selektion nichts mit der Position des Rechtsklicks zu tun hat. Darum sollst du nicht SelectedItem, sondern das Ergebnis des HitTest-Aufrufs als Index benutzen.

Es bleibt natürlich dir überlassen, ob du das ausprobierst.

Geschrieben

ah jetzt habe ich es verstanden,

wobei es auch nicht geht, wenn ich in einem anderen dialog links klicke und dann über einen button (in der toolbar) die entsprechende zeile auswerten will

was ich außerdem festgestellt habe:

wenn es im ersten dialog nicht geht (aufs erste mal) und ich in den anderen dialog wechsle, funktioniert es hier auch nicht beim ersten mal;

selektiere ich nochmals eine zeile und führe die funktion aus, dann gehts...

ich probiers mal, überall den hittest zu verwenden

Geschrieben

habs rausgefunden:

schuld ist NICHT das listview^^

und zwar:

ich habe mehrere modale dialoge;

da ja nur ein modaler dialog immer offen sein kann, prüfe ich mit dialog.visible = true, ob ein gewisser dialog offen ist oder nicht;

in diesem fall wird ja der dialog schon geladen;

jetzt habe ich im form load jedes dialoges mehrere abfragen;

über ein property gebe ich dem dialog die im listview selektierte id;

wenn ich den dialog nun aufrufe, wird logischerweise nichts mehr geladen, da ja form_load schon aufgerufen wurde; also schließe ich den dialog wieder (form_umload wird aufgerufen)

und nun gehts wieder (beim zweiten mal), weil form_load wieder aufgerufen wird :upps

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...