TListView - Ermitteln, welche Zeile angeklickt wurde
-
Wie kann man ermitteln, welche Zeile eines TListView gerade angeklickt wurde.
Ich will feststellen, welchen Zustand die Checkbox der Zeile hat.MfG JB
-
Schau doch mal in die Hilfe vom Builder
in OnClick hol' mit Selected das ausgewaehte TListItem
dessen Eigenschaft Index isses!
-
// index des markierten eintrages ermitteln int index = ListView->Selected->Index; // prüfen ob im gewählten eintrag (markiert) die checkbox aktiviert wurde if (ListView->Selected->Checked) { }
// alle elemente durchgehen for (int i = 0; i < ListView->Items->Count; i++) { // nur gewählte elemente bearbeiten if (ListView->Items->Item[i]->Checked) { // irgendwas tun } }
-
Vielen Dank, für die Antwort. So hatte ich mir das eigentlich auch vorgestellt.
Meine Tabelle hat mehrere Zeilen.
Diese Funktion löst aber eine Exeption aus:
void __fastcall TFormX::ListView1Click(TObject *Sender)
{
int i = ListView1->Selected->Index;
}MfG JB
-
Beim Clicken in die Checkbox hat ListView1->Selected immer noch den Wert NULL.
Wie fragt man dann die Checkboxen ab?
Muß man da etwa alle Zeilen der Liste einzeln abfragen?
Das kann doch nicht whr sein?!MfG JB
-
Selected ist natürlich nur gesetzt, wenn die Zeile markiert ist!
// abbruch wenn nichts markiert wurde if (!ListView1->SelCount) return;
-
... ja, ja.
Und so wird's wirklich gemacht:
void __fastcall TFormX::ListView1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { TListItem *Item = ListView1->GetItemAt(X, Y); THitTests HitTests = ListView1->GetHitTestInfoAt(X, Y); if (HitTests.Contains(htOnStateIcon) || HitTests.Contains(htOnStateIcon)) { bMyChecked = ListView1->Items->Item[Item->Index]->Checked; } }
MfG JB
Edit:
Bei mehr als drei Zeilen bitte die Code-Tags benutzen. Danke![ Dieser Beitrag wurde am 24.02.2003 um 18:51 Uhr von Jansen editiert. ]