subitems
-
- Beiträge: 143
- Registriert: Mo 30. Mär 2020, 12:37
subitems
Hallo, auf einer Form sind eine Reihe von Feldern dargestellt, die nach dem anklicken eines Satzes in einer Listview auf dem gleichen Form mit den entsprechenden Inhalten gefüllt werden sollen. Nun kommt aber die Fehlermeldung "List Index (30) out of bounds" was mich zu der Vermutung bringt, daß nur max 29 Subitems möglich sind. Stimmt das?
Wenn ja, wie kann man denn die restlichen SubItems darstellen??
Wenn ja, wie kann man denn die restlichen SubItems darstellen??
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: subitems
Zählst du richtig ? 0-29 = 30 Elemente. Meistens meinent man aber 1-30. Nur fangen die Listen etc. immer 0 basierend an.
Aussagekräftiges Code = Beispiel würde viel Licht in die Glaskugel bringen.
Aussagekräftiges Code = Beispiel würde viel Licht in die Glaskugel bringen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 177
- Registriert: Mi 2. Sep 2015, 11:09
- OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
- CPU-Target: Windows 32/64bit
Re: subitems
Erschwerend kommt noch hinzu, dass das erste Element in der ListView-Darstellung kein SubItem ist.af0815 hat geschrieben: Di 6. Dez 2022, 17:56 Zählst du richtig ? 0-29 = 30 Elemente. Meistens meinent man aber 1-30. Nur fangen die Listen etc. immer 0 basierend an.
Sieht man in einer ListView 10 Einträge nebeneinander, dann hat man nur 9 SubItems wobei das letzte Item den Index 8 hat.
-
- Beiträge: 143
- Registriert: Mo 30. Mär 2020, 12:37
Re: subitems
........alles richtig was ihr sagt und auch klar. Hier der Code:
Code: Alles auswählen
procedure TFMArtikel.LVArtikelClick(Sender: TObject);
begin
if LVArtikel.Selected<>nil
then begin
Fehlermeldung(99);
Date:=now;
//Füllen der Editfelder mit dem ausgewälten Datensatz
EDTArtID.Text:=LVArtikel.Selected.Caption;
EDTArtNr.Text:=LVArtikel.Selected.Subitems[0];
EdtArtBez.Text:=LVArtikel.Selected.Subitems[1];
EDTArtAnlg.Text:=LVArtikel.Selected.SubItems[2];
CBArtEKto.Text:=LVArtikel.Selected.SubItems[3];
EDTArtMonUms.Text:=LVArtikel.Selected.SubItems[4];
EDTArtJahresUms.Text:=LVArtikel.Selected.SubItems[5];
EDTArtVorMonUms.Text:=LVArtikel.Selected.SubItems[6];
EDTArtVorJahresUms.Text:=LVArtikel.Selected.SubItems[7];
EDTArtEKP.Text:=LVArtikel.Selected.SubItems[8];
EDTArtEKP1.Text:=LVArtikel.Selected.SubItems[9];
EDTArtEKP2.Text:=LVArtikel.Selected.SubItems[10];
EDTArtEKP3.Text:=LVArtikel.Selected.SubItems[11];
EDTArtEKP4.Text:=LVArtikel.Selected.SubItems[12];
EDTArtEKP5.Text:=LVArtikel.Selected.SubItems[13];
EDTArtVKP1.Text:=LVArtikel.Selected.SubItems[14];
EDTArtVKP2.Text:=LVArtikel.Selected.SubItems[15];
EDTArtVKP3.Text:=LVArtikel.Selected.SubItems[16];
EDTArtVKP4.Text:=LVArtikel.Selected.SubItems[17];
EDTArtVKP5.Text:=LVArtikel.Selected.SubItems[18];
EDTArtEKPgueab.Text:=LVArtikel.Selected.SubItems[19];
EDTArtEKPgueab1.Text:=LVArtikel.Selected.SubItems[20];
EDTArtEKPgueab2.Text:=LVArtikel.Selected.SubItems[21];
EDTArtEKPgueab3.Text:=LVArtikel.Selected.SubItems[22];
EDTArtEKPgueab4.Text:=LVArtikel.Selected.SubItems[23];
EDTArtEKPgueab5.Text:=LVArtikel.Selected.SubItems[24];
EDTArtVKPgueab.Text:=LVArtikel.Selected.SubItems[25];
EDTArtVKPgueab1.Text:=LVArtikel.Selected.SubItems[26];
EDTArtVKPgueab2.Text:=LVArtikel.Selected.SubItems[27];
EDTArtVKPgueab3.Text:=LVArtikel.Selected.SubItems[28];
EDTArtVKPgueab4.Text:=LVArtikel.Selected.SubItems[29];
EDTArtVKPgueab5.Text:=LVArtikel.Selected.SubItems[30];
if not Zeile then Zeile_sichtbar(true);
Modus:=2;
end
else Fehlermeldung(14);
end;
-
- Beiträge: 1058
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: subitems
bei mir hakt es einfach mit dem Verständnis besonders bei dieser Zeile:
Das können datenbanksensitive Controls ja automatisch und quasi gratis. (zb TDBText, TDBEdit und Konsorten).
Solche Controls mit einer TDatasource verbinden die zB an einer TSQLQuery hängt. Die Feldnamen in die Controls reinschreiben und fertig. (mehrere Controls können so mit einer TDataSource verbunden werden dann sind alle synchron am gleichen Datensatz)
Das ist nicht ganz das Gelbe vom Ei, gibt aber einen Einblick
Aber vielleicht denke ich zu kompliziert
Code: Alles auswählen
//Füllen der Editfelder mit dem ausgewälten Datensatz
Solche Controls mit einer TDatasource verbinden die zB an einer TSQLQuery hängt. Die Feldnamen in die Controls reinschreiben und fertig. (mehrere Controls können so mit einer TDataSource verbunden werden dann sind alle synchron am gleichen Datensatz)
Das ist nicht ganz das Gelbe vom Ei, gibt aber einen Einblick
Aber vielleicht denke ich zu kompliziert
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: subitems
Der Code sagt genaugenommen nichts aus. Nur das du ganz einfach Items den Feldern zuweist.
Was mir generell bei einem solchen Code fehlt, besonders wenn man von einem dynamischen Gebilde etwas in eine starre Struktur zuweist, eine Prüfung ob zumindest die Anzahl der Items vorhanden ist, die du erwartest. Du weist etwas blind zu, ohne Prüfung, auch komplett ohne Exception handling und erwartest das alles funktioniert. Fehler die vorher schon eingebaut wurden, tauchen jetzt erst auf, wenn es knallt.
Ich sage dir anhand des Codes, dein Inhalt der LVArtikel stimmt nicht mit dem erwarteten Inhalt zusammen. Punkt.
Das sind Probleme sie man zusammen mit dem Debugger und Logger relativ rasch in den Griff bekommt. LazLogger rein und zumindest eine Zeile Debugln hinein, wo ich mir die wichtigsten Sachen des LVArtikel auf der Konsole anzeigen lasse.
Was mir generell bei einem solchen Code fehlt, besonders wenn man von einem dynamischen Gebilde etwas in eine starre Struktur zuweist, eine Prüfung ob zumindest die Anzahl der Items vorhanden ist, die du erwartest. Du weist etwas blind zu, ohne Prüfung, auch komplett ohne Exception handling und erwartest das alles funktioniert. Fehler die vorher schon eingebaut wurden, tauchen jetzt erst auf, wenn es knallt.
Ich sage dir anhand des Codes, dein Inhalt der LVArtikel stimmt nicht mit dem erwarteten Inhalt zusammen. Punkt.
Das sind Probleme sie man zusammen mit dem Debugger und Logger relativ rasch in den Griff bekommt. LazLogger rein und zumindest eine Zeile Debugln hinein, wo ich mir die wichtigsten Sachen des LVArtikel auf der Konsole anzeigen lasse.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: subitems
Oder was noch viel einfacher ist, mit Writeln auf die Konsole ausgeben.Das sind Probleme sie man zusammen mit dem Debugger und Logger relativ rasch in den Griff bekommt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: subitems
Genau das ist gefährlich, mit "writeln auf die Konsole" auszugeben, das macht nur solange man nicht für andere Plattformen arbeitet. Writeln funktioniert nicht auf allen Plattformen, weil manche Plattformen keine Konsole anbinden, dann macht dein Programm einfach eine Exception und du schaust blöd aus der Wäsche. Nein nein, Debugln ist aus diesem Grund Plattformsicher implementiert und wird auch innerhalb von Lazarus selbst verwendet. Deswegen funktioniert es unheimlich stabil auf allen Plattformen.Mathias hat geschrieben: Mi 7. Dez 2022, 08:40Oder was noch viel einfacher ist, mit Writeln auf die Konsole ausgeben.Das sind Probleme sie man zusammen mit dem Debugger und Logger relativ rasch in den Griff bekommt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 143
- Registriert: Mo 30. Mär 2020, 12:37
Re: subitems
#afAF815
....diesen "Logger" kenne ich nicht und weiß so natürlich auch nicht, wie man ihn anwendet. Wo kann ich mich darüber informieren?
by the way - die Anzahl der Felder stimmt
....diesen "Logger" kenne ich nicht und weiß so natürlich auch nicht, wie man ihn anwendet. Wo kann ich mich darüber informieren?
by the way - die Anzahl der Felder stimmt
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: subitems
Bei google mal "Lazarus wiki Lazlogger" probieren, erster Fund ist https://wiki.freepascal.org/LazLoggerJoachim Raap hat geschrieben: Mi 7. Dez 2022, 10:29 ....diesen "Logger" kenne ich nicht und weiß so natürlich auch nicht, wie man ihn anwendet. Wo kann ich mich darüber informieren?
Generell mit "Lazarus Wiki" und dann einen Begriff findet man sehr viel Information.
Und du hast wirklich 31 Felder in den Subitems, nicht nur 30 ?!
Edit: Beispiel hinzugefügt
- Dateianhänge
-
lvtest.zip
- (139.72 KiB) 71-mal heruntergeladen
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 143
- Registriert: Mo 30. Mär 2020, 12:37
Re: subitems
31 SubItems + 1 Caption macht 32 in Summe
Oder wie zählt ihr in Ösiland?
Oder wie zählt ihr in Ösiland?
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: subitems
Es kommt nicht nur aufs Zählen im Ösi Land an, es müssen auch die Objekte dahinter da sein, zumindest im Ösi Land ist das der Fall.
Ich habe bei meinem Programmen, normalerweise keine Out of Bounds und wenn, dann finde ich das gleich. Lazarus bietet dafür viele Möglichkeiten.
Ich habe bei meinem Programmen, normalerweise keine Out of Bounds und wenn, dann finde ich das gleich. Lazarus bietet dafür viele Möglichkeiten.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: subitems
Hi!
In felix Austria wurde 1 : 7 gerechnet.
So hab ich das als Kind gelernt, wenn Oma besucht wurde.
1 DM = 7 Schillinge
Winni