![]() |
Listenindex überschreitet das Maximum
Hallo folgender Tatbestand:
Ich habe eine Form, eine Listview1 und 2 ValueListEditoren. Nun vesuche ich das selektierte Listview1.Selected ITEM auszulesen und in den ValueListEdit1 und 2 reinzupacken! Fehler: Wenn ich jedoch einen Lsitview1 Eintrag habe, wo nicht alle Substrings ausgefüllt sind erhalte ich die Message: Listenindex überschreitet das Maximum (4). Frage: // Für dieses Beispiel/Problem gibt es leider noch keine genaue Hilfe bei DP, daher meine Frage: Wie kann ich den SelectedCode umschreiben, dass er mir die Felder die im Listview1 LEER sind einfach im ValueListEditor auch LEER macht. (aber hinzufügt!) ??? Hier mein Code:
Delphi-Quellcode:
Selbst durch Anhaltepunkte finde ich nicht genau den Fehler, leider.
procedure TForm1.ListView1Click(Sender: TObject);
begin if (listview1.Items.Count <> 0) and (listview1.Selected <> nil) then begin vle1.Strings.Clear; vle1.Strings.BeginUpdate; vle1.TopRow:=vle1.InsertRow('Config-Name',listview1.Selected.Caption,true); vle1.InsertRow('Datasource-Name',listview1.Selected.SubItems[0],true); vle1.InsertRow('Service-URL',listview1.Selected.SubItems[1],true); vle1.InsertRow('LFS-Cache-Path',listview1.Selected.SubItems[2],true); vle1.InsertRow('LFS-Config-Name',listview1.Selected.SubItems[3],true); vle1.Strings.EndUpdate; vle2.Strings.Clear; vle2.Strings.BeginUpdate; if listview1.Selected.SubItems[4]<>'' then begin vle2.TopRow:=vle1.InsertRow('Datasource-Name',listview1.Selected.SubItems[4],true); end else begin showmessage('The Configuration ' +listview1.Selected.Caption + ' is corrupt!'); end; vle2.InsertRow('Database-Type',listview1.Selected.SubItems[5],true); vle2.InsertRow('Database-URL',listview1.Selected.SubItems[6],true); vle2.InsertRow('Database-Driver',listview1.Selected.SubItems[7],true); vle2.InsertRow('LFS-Config-Name',listview1.Selected.SubItems[8],true); vle2.InsertRow('LFS-Cache-Path',listview1.Selected.SubItems[9],true); try vle2.InsertRow('DB-User',listview1.Selected.SubItems[10],true); except begin vle2.DeleteRow(6); vle2.InsertRow('DB-User','',true); end; end; try vle2.InsertRow('DB-Password',listview1.Selected.SubItems[11],true); except begin vle2.DeleteRow(7); vle2.InsertRow('DB-Password','',true); end; end; try vle2.InsertRow('LFS-User',listview1.Selected.SubItems[12],true); except begin vle2.DeleteRow(8); vle2.InsertRow('LFS-User','',true); end; end; try vle2.InsertRow('LFS-Password',listview1.Selected.SubItems[13],true); except begin vle2.DeleteRow(9); vle2.InsertRow('LFS-Password','',true); end; end; vle2.Strings.EndUpdate; end else exit; end; DAnke im Vorraus! |
Re: Listenindex überschreitet das Maximum
gibt es denn mindestens 14 subitems?
|
Re: Listenindex überschreitet das Maximum
Genau das ist es ja, die 14 SubItems sind mal vorhanden, und mal nicht.
|
Re: Listenindex überschreitet das Maximum
dann liegt da dein fehler! vorher testen ob der jeweilige subitem existiert, dann erst darauf zugreifen!
|
Re: Listenindex überschreitet das Maximum
Jetzt habe ich komplett alle Abfragen so gemacht:
Delphi-Quellcode:
Jedoch kommt immer noch die Fehlermeldung! Was mache ich falsch?
try
vle2.InsertRow('Database-Type',listview1.Selected.SubItems[5],true); except vle2.InsertRow('Database-Type','',true); end; Also er erkennt schon, dass dort nix ist (geprüft mit MSGBOX ausgabe), aber die Fehlerausgabe ist immer noch vorhanden. |
Re: Listenindex überschreitet das Maximum
Delphi-Quellcode:
[/quote]
try
vle2.InsertRow('Database-Type',listview1.Selected.SubItems[5],true); <-------- da greifst du auf ich denke mal ein nicht vorhandenes item zu! dann gibts ne fehlermeldung! except vle2.InsertRow('Database-Type','',true); end; also vorher prüfen ob listview1.Selected.SubItems[5] existiert! schau dir mal den begriff assigned an! |
Re: Listenindex überschreitet das Maximum
Hallo,
mit "ListView1.Items[0].SubItems.Count" kannst du prüfen, wieviele SubItems ein ListView- Eintrg enthält. |
Re: Listenindex überschreitet das Maximum
Da ich keine for-to-do schleife nutze sondern alles manuell auslesen möchte (WEIL EBEN SO UNTERSCHIEDLCIHE SUBITEMS RUHIG FEHLEN KÖNNEN) hilft der .count nicht viel.
Also mit Try klappts nicht, mit Assign geht nix weil ich brauche TPErsistens (???) und nun versuchte ich das hier:
Delphi-Quellcode:
= result: Klappt auch nicht.
if listview1.Items[4].Data <> nil then
vle2.TopRow:=vle2.InsertRow('Datasource-Name',listview1.Selected.SubItems[4],true) else showmessage('EEROR ES FUNZT'); Das muss eigentlich möglich sein odeR? |
Re: Listenindex überschreitet das Maximum
Hallo,
reicht es nicht, bei "fehlendem" SubItem ein SubItems.Add('') zu machen ? Heiko |
Re: Listenindex überschreitet das Maximum
Zitat:
wenn subitems fehlen, dann läuft der zähler nur bist count-1 ! wenn du 5 items hast mit der hausnummer (0..4) und die ersten zwei löschst, dann hast du danach 3 items mit der hausnummer (0..2) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz