TListView und die ausgewählten Reihen...

Für Fragen von Einsteigern und Programmieranfängern...

TListView und die ausgewählten Reihen...

Beitragvon Adromir » 15. Jul 2018, 17:17 TListView und die ausgewählten Reihen...

Mir wird es langsam echt peinlich das Forum mit meinen Fragen vollzuspammen :( Aber irgendwie komme ich gerade mit einem Problem nicht weiter, daß ich eigentlich für ganz einfach gehalten habe ..

Ich habe eine TListview (vsReport und multiselect true) und will dort die Items zählen, die der User ausgewählt hat, bzw später dann auch was damit machen. Aber alles was ich bisher versucht habe und alle im Netz gefundenen Codeschnipsel funktionierten nicht.

Code: Alles auswählen
ListView1.Items.SelCount


zählt einfach nicht richtig. Wenn ich mir den Wert per ShowMessage beim OnSelectItem anzeigen lasse, dann fängt er bei -1 an, zählt dann korrekt bis 1 hoch, dann bleibt der wert aber dabei.

Code: Alles auswählen
var Item : TListItem;
begin
  Item := Listview1.selected;
  showmessage(Item.text);
end;

von http://forum.lazarus.freepascal.org/ind ... ic=25758.0 will gar nicht kompilieren, da Lazarus direkt meckert, daß Text keine erlaubte eigenschaft ist

wenn ich sowas mache:
Code: Alles auswählen
 
for i := 0 to ListView1.Items.Count-1 do
  begin
    if ListView1.Items.Selected = True then
      dosomething();
   end
 


krieg ich nen SigSev fehler.. Es scheint mir jedenfalls so das Selected einen Falschen Wert zurück liefert? wenn ich alle alle Items durchlaufen lasse per
Code: Alles auswählen
 
for i := 0 to ListView1.Items.Count-1 do
  begin
    ShowMessage(BoolToStr(ListView1.Items[i].Selected));
   end
 


Dann krieg ich immer nur eine 0 zurück geliefert :/
Adromir
 
Beiträge: 37
Registriert: 28. Apr 2018, 03:09

Beitragvon wp_xyz » 15. Jul 2018, 18:03 Re: TListView und die ausgewählten Reihen...

Bist du sicher, dass du alles richtig abgeschrieben hast? Ich kann mir nicht vorstellen, dass das so im Web steht. Oder du hast blind genommen, was du so gesehen hast, ohne zu verstehen, was du eigentlich tust.
  • Die Eigenschaft "Items" einer ListView ist eine Collection, Klasse TListItems (Plural). Die einzelnen Elemente der Collection sind Objekte der Klasse TListItem (Singular), und als Array-ähnliche Eigenschaft "Item[j]" abrufbar. Mit dem Aufruf "ListView1.Items.Item[0]" kommst du an die Eigenschaften jedes Collection-Elements. Da Item[j] die "Default"-Eigenschaft der Collection Items ist, kann man den "Array"-Index auch gleich direkt hinter Items setzen, also "ListView1.Items[0]".
  • Jeder ListItem hat eine boolsche Eigenschaft "Selected": mit "ListView1.Items[0].Selected" kannst du prüfen, ob der 1. Eintrag (Index 0) ausgewählt ist.
  • "SelCount" ist eine Eigenschaft der ListView, also musst du "ListView1.SelCount" aufrufen. "ListView1.Items.SelCount" gibt es gar nicht.
  • "ListView1.Selected" ist das Element der Items, das gerade ausgewählt wurde, also einer von den "ListView1.Items.Item[j]".
Das beigefühgte Demo-Programm zählt die ausgewählten Items einmal mit Hilfe der TListItem-Eigenschaft "Selected", und einmal durch Abfragen von TlistView.SelCount.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
wp_xyz
 
Beiträge: 2645
Registriert: 8. Apr 2011, 08:01

Beitragvon Adromir » 15. Jul 2018, 20:16 Re: TListView und die ausgewählten Reihen...

So ich hab jetzt den Denkfehler rausgefunden. Ich hab die Items immer über die Checkbox in der TListview ausgewählt. Hätte mir ja denken können das das nicht das gleiche ist *kopfklatsch*..

Auch wenn es jetzt damit nichts zu tun hat, mir ist Aufgefallen, daß das LIstView unter windows leer bleibt, bis alles einträge geladen sind. Unter Linux werden die Items direkt gezeichnet, was mir besser gefällt. Kriegt man das hin, daß sich das bei Windows genau so verhält?
Adromir
 
Beiträge: 37
Registriert: 28. Apr 2018, 03:09

Beitragvon wp_xyz » 15. Jul 2018, 21:35 Re: TListView und die ausgewählten Reihen...

Adromir hat geschrieben: mir ist Aufgefallen, daß das LIstView unter windows leer bleibt, bis alles einträge geladen sind. Unter Linux werden die Items direkt gezeichnet, was mir besser gefällt. Kriegt man das hin, daß sich das bei Windows genau so verhält?

Sorry, versteh' ich nicht... Wie werden die Einträge "geladen"? Dauert das etwa lang und du willst sehen, wie sich die ListView füllt? Davon würde ich dringend abraten, weil dann nach jedem geladenen Eintrag ein Neuzeichnen erfolgen müsste, was die in diesem Fall ja ohnehin schon lange Ausgabe noch mehr in die Länge zieht. Kannst du ein Demo-Projekt posten, an dem ich sehe, was du genau erreichen willst? (Anhänge funktionieren ja wieder...)
wp_xyz
 
Beiträge: 2645
Registriert: 8. Apr 2011, 08:01

Beitragvon Adromir » 15. Jul 2018, 21:39 Re: TListView und die ausgewählten Reihen...

Okay, das hab ich nun hinbekommen, daß die Items direkt beim Hinzufügen unter Windows angezeigt werden.. Nun hab ich aber das nächste Problem.. Befülle ich die TListView unter Windows neu (mit komplett anderen Werten) dann kommt es zu einem Index out of Bonds Fehler.. "aktualisiere" ich sie mit den gleichen Werten dann kommt der Fehler nicht.. Auch wenn er den Fehler vorhaer auch angezeigt hat..
Adromir
 
Beiträge: 37
Registriert: 28. Apr 2018, 03:09

Beitragvon wp_xyz » 15. Jul 2018, 23:21 Re: TListView und die ausgewählten Reihen...

Zu einem "Index out of bounds" Fehler kommt es, wenn du auf ein Array (o.ä.)-Element außerhalb des erlaubten Bereichs zugreifst. Wenn deine ListView z.B. 3 Items enthält, dann kannst du auf die Items [0], [1] und [2] zugreifen, nicht aber auf [3], denn das wäre das 4. Element, die Liste enthält aber nur 3.

Weiter kann ich ohne kostenpflichten Gebrauch meiner Kristallkugel nicht helfen.
wp_xyz
 
Beiträge: 2645
Registriert: 8. Apr 2011, 08:01

Beitragvon Adromir » 16. Jul 2018, 00:22 Re: TListView und die ausgewählten Reihen...

Hab gerade gesehen, daß es doch irgendwo anders hängt. Ein RegEx scheint unter manchen bedingungen nicht das richtige ergebnis zu liefern. Der Indexfehler ist nicht in der Liste, sondern in einer Funktion die mir bestimmte werte per Regex als StringList zurück liefert..
Adromir
 
Beiträge: 37
Registriert: 28. Apr 2018, 03:09

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

porpoises-institution
accuracy-worried