Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Problem mit ListView
OliverN_26 - Mi 05.01.11 04:48
Titel: Problem mit ListView
Hi Leute
Ich hab ein generelles Verständnis Problem mit der ListView.
Wenn ich z.B. 3 Einträge habe und auf den 1. Klicke .. warum wird dann der folgende Code 3x ausgeführt?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); var sl : TStringList; Antwort,i : Integer; Zeile : String; DHandle : TextFile; begin Antwort := Application.MessageBox (PChar('Test'),'Test', MB_YesNo+MB_IconQuestion+MB_DefButton1); if Antwort = IDYes then begin . . . end; end; |
Ein weiteres Problem:
Ich klicke auf den Wert..es kommt die obige Frage..ich sage NEIN und der Wert wird innerhalb der ListView markiert (blau hinterlegt).
Danach kann ich drauf klicken wie ich will aber ich komm nicht in die obige Procedure.
Wo ist mein Denkfehler?
Danke
jaenicke - Mi 05.01.11 06:43
Du prüfst ja auch gar nicht, welcher Eintrag betroffen ist. Und auch nicht, ob dieser markiert wurde oder es nicht mehr ist.
Du bekommst ggf. einmal das Event ausgelöst mit Selected auf False für den zuletzt markierten und dann mit Selected auf True für den jetzt markierten Eintrag.
Und bei mir passiert das auch nicht öfter. Einmal beim ersten Markieren und dann zweimal, wenn dieser deselektiert und der neue selektiert wird. :nixweiss:
Delphi-Quelltext
1: 2: 3: 4:
| if Selected then ShowMessage('Markiert: ' + Item.Caption) else ShowMessage('Entmarkiert: ' + Item.Caption); |
Nebenbei: Die Flags sollten mir or verknüpft werden. Es kommt hier auf das gleiche heraus, aber es sieht so ein wenig komisch aus.
Delphi-Quelltext
1:
| MB_YesNo or MB_IconQuestion or MB_DefButton1 |
OliverN_26 - Mi 05.01.11 15:55
Hi
Selected bringt mich leider auch nicht weiter.
Ich will nichts weiter als einen Eintrag der Listview "anklicken" und dann soll was geschehen.
Mach ich das am Besten über SelectItem oder onMouseDown?
SelectItem scheint irgendwie vor der Markierung des Items aufgerufen zu werden, denn wie bereits erwähnt,
wenn ich meine MessageBox mit "NEIN" beantworte ist das ListViewItem blau unterlegt und ich kann drauf drücken
wie ich will. Ich komm nich in die procedure SelectItem. Das kann doch nich so schwer sein oder?
Hab leider noch nie mit ner ListView gearbeitet ..
danke
---
Moderiert von
Narses: Beiträge zusammengefasst---
Ok, habs hinbekommen.
Habs jetz per onMouseDown gemacht und teste ob auch ein Item angeklickt wurde.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Item : TListItem; begin Item := ListView1.GetItemAt(X,Y); if Assigned(Item) then begin . . . end; end; |
Danke :-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!