![]() |
Index angeblich außerhalb Wertebereich (ComboBox)
Index überschreitet angeblich maximum (ComboBox)
als Erstes hab ich mal dieses Stückchen Code, womit ich einfach nur den zusätzliche Wert (in Object) des nachfolgenden Items auslesen möchte, aber er bringt mich langsam zum Ausrasten, da hier ständig eine Exception auftritt (also da wo Objects ausgelesen wird) Zitat:
ComboBox2.ItemIndex = 0 ComboBox2.Items.Count = 2 (da 2 Einträge vorhanden sind)
Delphi-Quellcode:
also eigentlich sollte es doch keinen Fehler geben, da 0+1=1 und 1 < 2 ... heißt Index 0 und vorallem 1 sollte es doch geben? :gruebel:
// des war nur zur Kontrolle, ob der Debuger
// mir auch wirklich die Richtigen Werte anzeigte Application.MessageBox(PChar(Format('%d %d', [ComboBox2.ItemIndex + 1, ComboBox2.Items.Count])), ''); If ComboBox2.ItemIndex + 1 < ComboBox2.Items.Count Then i3 := Integer(ComboBox2.Items.Objects[ComboBox2.ItemIndex + 1]) - 1 Else i3 := High(_ComboBox2_Messages); ach ja, Objects ist einfach nur ein gecasteter Integer ... des sollte doch kein Problem sein?
Delphi-Quellcode:
wie gesagt, Index liegt definitiv im gültigen Wertebereich
ComboBox2.Items.AddObject(s, TObject(i));
> Delphi 7 aufgerufen wird der Code derzeit über Form.OnCreate, in der ComboBox2.OnChange (ich versuch aktuell mal den Code erst später ausführen zu lassen) ja und ich hab schon gesucht, aber noch nichts dazu gefunden :? wär also schön, wenn sich dieser Fehler beheben ließe. MbB dat himi [add] OK, es liegt schonmal nicht am OnCreate und daß die ComboBox eventull noch nicht komplett initialisiert ist ... auch später tritt der Fehler auf. |
Re: Index angeblich außerhalb Wertebereich (ComboBox)
Delphi-Quellcode:
If ComboBox2.ItemIndex + 1 < ComboBox2.Items.Count -1 Then...
|
Re: Index angeblich außerhalb Wertebereich (ComboBox)
Zitat:
Da fall ich aber auch immer wieder drauf rein :oops: |
Re: Index angeblich außerhalb Wertebereich (ComboBox)
jupp, drum das <
oder mit -1: Index <= Count - 1 also: Index < Count 0 <= Index < Count 0 <= Index <= Count - 1 kleiner als Null kann es nicht gehn, da ItemIndex im Minimum -1 ist und -1 + 1 = 0. im Prinzip sieht es so aus (die +1 ist ja egal, da es auf das Ergebnis ankommt)
Code:
[b]If[/b] [color=#ff0000]GewünschterIndex[/color] < ComboBox2.Items.Count [b]Then[/b]
i3 := Integer(ComboBox2.Items.Objects[[color=#ff0000]GewünschterIndex[/color]]) [color=silver]- 1[/color] [b]Else[/b] [color=silver]i3 := High(_ComboBox2_Messages)[/color]; wenn ich richtig liege, dann dürfte diese Fehlermeldung also nicht auftauchen :wall: |
Re: Index angeblich außerhalb Wertebereich (ComboBox)
himitsu, da Du einen unmöglichen Fehler in einem trivialen Objekt hast, muss der Fehler woanders liegen. Vielleicht überschreibst Du einfach 'aus Versehen' Teile der Combobox.
Versuche das Problem durch sukzessives Auskommentieren einzelner Codeteile einzugrenzen. Entweder das Problem verschwindet (Fehler gefunden), oder du hast ein kleines Stückerl Code übrig, das du uns zeigen kannst. Nebenbei: Bei Problemen mit der VCL hilft ein 'Compile mit Debug DCU' und schrittweises Ausführen: Das muss ein :wall: Fehler sein. |
Re: Index angeblich außerhalb Wertebereich (ComboBox)
Moin Himitsu,
probier's mal so:
Delphi-Quellcode:
If (ComboBox2.ItemIndex + 1) < ComboBox2.Items.Count Then
|
Re: Index angeblich außerhalb Wertebereich (ComboBox)
Vergleichsoperatoren haben den niedrigsten Rang, und arithmetische den zweit niedrigsten. Daher sollte das keine Änderung hervorrufen.
Das Klammern ist bei der Kombination von boolschen Operatoren und Vergleichen oft aber sinnvoll, weil die boolschen ebenfalls höherrangig als die Vergleiche sind, was in vielen Statements nicht intuitiv erscheint. "a+b=0 and a+c=0" würde zu "(a+b)=((0 and a)+c)=0", man möchte aber meist etwas der art "(a+b=0) and (a+c=0)" haben. Die Rangfolge der Operatoren in den Klammern ist in diesem Fall okay, da Rechnen stärker als Vergleichen bindet. Das aber nur am Rande, hat mit dem Problem eigentlich nichts zu tun. |
Re: Index angeblich außerhalb Wertebereich (ComboBox)
so, also der Inhalt der ComboBox ist OK und wurde auch nicht verändert ... wie gesagt, die MessageBox zeigt die richtigen Werte/Zustände an
un nach der Excepion ist auch der Richtige Inhalt in der ComboBox zu sehn.
Delphi-Quellcode:
hab grad mal versucht den ItemText auszulesen ... das geht, aber beim Object kommt immernoch die Exception.
s := ComboBox2.Items[ComboBox2.ItemIndex + 1];
i := Integer(ComboBox2.Items.Objects[ComboBox2.ItemIndex + 1]); ich versuch damm mal zu prüfen, ob es am Object(inhalt als Integer) liegt, der Inhalt(im Object) des gewünschten/letzen Items ist zufällig -1
Delphi-Quellcode:
i := -1;
ComboBox2.Items.AddObject(S, TObject(i)); |
Re: Index angeblich außerhalb Wertebereich (ComboBox)
Hi himitsu,
Zitat:
Kannst Du nicht eine eigene ObjectList erstellen, die mit instanzierten Werten parallel zur ComboBox mitläuft und diese als echte Objekte dann übergeben? Entsprechend die Freigabe dann entweder der ObjectList überlassen (OwnsObjects) oder halt selber machen. Gruß Assertor |
Re: Index angeblich außerhalb Wertebereich (ComboBox)
Klar wäre das möglich.
Ich könnte auch ein IntegerAray parallel zur ComboBox laufen lassen, aber eigentlich wollte ich gern die Werte direkt in der ComboBox und das möglichst ohne großen Overhead :stupid: nja, im Grunde scheint es wohl (zumindest im Delphi 7) irgendwelche Probleme zu geben, denn der Index stimmt ja ... zumindestens in Verbindung mit dem Itemtext. wie gesagt, ich versuch jetzt erstal rauszufinden, ob's an der -1 liegt und schau mir im Moment die QuellCodes an, ob nicht doch irgendwo etwas mit dem Objekt innerhalb der ComboBox gemacht wird. [edit] nee, es wird nichts in TComboBox/TStringList/TStrings geänder, oder irgendwie auf den Wert/Inhalt von Object eingegangen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 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