Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listindex überschreitet Maximum von Combobox (https://www.delphipraxis.net/148801-listindex-ueberschreitet-maximum-von-combobox.html)

Cruentus 8. Mär 2010 19:56


Listindex überschreitet Maximum von Combobox
 
Hallo allerseits!

Zurzeit arbeite ich an einem kleinen Programm für die Schule, in welchem ich Einträge aus einer Combobox bearbeite. Und zwar füge ich im OnShow-Ereignis des Formulars einzelne Einträge über
Delphi-Quellcode:
Combobox.Items.Strings[i]:= 'Text'
in die Combobox ein. Funktioniert soweit auch. Von da an wird man auf ein weiteres Formular weiterverwiesen. Wenn ich nun aber per "Zurück"-Button auf das Formular mit der Combobox zurückkehre erhalte ich die Fehlermeldung
Zitat:

"Listindex überschreitet Maximum(0)".
Ich verstehe ehrlich gesagt nicht, weshalb ich diesen Fehler erhalte, die Einträge der Combobox sind von 0 bis 5 ohne Unterbrechung erhalten und werden beim OnShow nur neu überschrieben. Liegt da dennoch der Fehler oder kann der noch woanders liegen?

Danke schon mal für die Hilfe

Cruentus

s.h.a.r.k 8. Mär 2010 20:01

Re: Listindex überschreitet Maximum von Combobox
 
Der Fehler *muss* wo anders liegen :) oder du clearst du ComboBox irgenwie. Die genauen Zusammenhänge werden aus deinem Post nicht wirklich klar. Du kannst vor jedem Zugriff auf die ComboBox mal zu Debug-Zwecken (sehr schmutzig!) und ShowMessage(IntToStr(ComboBox.Items.Count)); machen. Wenn immer 5 raus kommt, dann greifst du irgendwann mal auf den Index 5 oder größer zu. (bei 5 Einträgen sind ja die Indizes von 0-4 belegt)

Tom 8. Mär 2010 20:13

Re: Listindex überschreitet Maximum von Combobox
 
Zitat:

Zitat von Cruentus
Delphi-Quellcode:
Combobox.Items.Strings[i]:= 'Text'

Sind die Einträge schon vorhanden? Ansonsten wäre .add nicht schlecht.

Cruentus 8. Mär 2010 20:27

Re: Listindex überschreitet Maximum von Combobox
 
Vielen Dank schon mal für die schnelle Hilfe!

Ich hab den Tipp mal angewandt. Wenn ich Einträge aus der Combobox auswähle, werden die ausgewählten per Code automatisch gelöscht, bevor ich zum nächsten Formular komme. Deshalb steht im Onshow-Ereignis auch die Anweisung, dass die Combobox komplett mit Einträgen gefüllt werden soll. Nachdem ich beispielsweise zwei Einträge habe löschen lassen, zeigt mir die Message, dass items.count nur noch 4 statt 6 beträgt, soweit so gut.
Nun allerdings kommt das Problem: Ich überschreibe sämtliche Einträge von 0 bis 5 wieder mit Text, das sollte ja auch eigentlich funktionieren. Das Auffüllen steht unmittelbar hinter dem Befehl ShowMessage, es erfolgt kein weiterer Zugriff auf die Werte der Combobox. Der Fehler scheint demnach dann aufzutreten, wenn ich die zuvor gelöschten Bereiche wieder beschreiben möchte.

Hoffe, ich konnte das einigermaßen anschaulich darlegen.

Cruentus

s.h.a.r.k 8. Mär 2010 20:29

Re: Listindex überschreitet Maximum von Combobox
 
Befolge den Tipp von Tom. Ich habe gedacht die Einträge sind dauerhaft in der CB enthalten. Wenn die mal gelöscht werden, dann musst du diese mit Add oder Insert hinzufügen. So bekommst du neue Einträge in die Liste. Wenn schon welche vorhanden sind, dann kannst du via Index, wie du im ersten Post beschrieben hast, darauf zugreifen und diese ändern. Das Problem, welchest du hast, ist, dass du, wenn die CB leer ist, auf einen Eintrag zugreifen willst, der gar nicht existiert -> Exception.

Tom 8. Mär 2010 20:32

Re: Listindex überschreitet Maximum von Combobox
 
Zitat:

Zitat von Cruentus
Nachdem ich beispielsweise zwei Einträge habe löschen lassen, zeigt mir die Message, dass items.count nur noch 4 statt 6 beträgt, soweit so gut.
Nun allerdings kommt das Problem: Ich überschreibe sämtliche Einträge von 0 bis 5 wieder mit Text, das sollte ja auch eigentlich funktionieren.

Nein, Du hast nur vier Einträge. Ansonsten wäre .add nicht schlecht ...

Jens Hartmann 8. Mär 2010 20:35

Re: Listindex überschreitet Maximum von Combobox
 
Das wäre richtig, da der Index deiner CB kleiner ist als den den Du schreiben willst. Versuch es mal so...

Delphi-Quellcode:
ComboBox1.Items.Add('Neuer Eintrag');
[EDIT]Wieder mal zu langsam, aber dann wenigstens der Vollständigkeit halber[/EDIT]

Gruß Jens

Cruentus 8. Mär 2010 21:53

Re: Listindex überschreitet Maximum von Combobox
 
Okay, ich hab mal eure Vorschläge umgesetzt: die Combobox bei OnShow einmal komplett geleert und dann wieder mit items.add aufgefüllt. Das war dann auch des "Rätsels" Lösung, jetzt funktioniert alles einwandfrei und ohne, dass eine Fehlermeldung aufmucken würde.

Vielen Dank für die schnelle und kompetente Hilfe

Cruentus


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz