AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Index angeblich außerhalb Wertebereich (ComboBox)
Thema durchsuchen
Ansicht
Themen-Optionen

Index angeblich außerhalb Wertebereich (ComboBox)

Ein Thema von himitsu · begonnen am 15. Jul 2008 · letzter Beitrag vom 18. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

Index angeblich außerhalb Wertebereich (ComboBox)

  Alt 15. Jul 2008, 16:34
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:
Listenindex überschreitet das Maximum (1)
MessageBox mein "1 2", also sind folgende Werte vorgegeben;
ComboBox2.ItemIndex = 0
ComboBox2.Items.Count = 2 (da 2 Einträge vorhanden sind)
Delphi-Quellcode:
// 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);
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?

ach ja, Objects ist einfach nur ein gecasteter Integer ... des sollte doch kein Problem sein?
ComboBox2.Items.AddObject(s, TObject(i)); wie gesagt, Index liegt definitiv im gültigen Wertebereich
> 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.
$2B or not $2B
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#2

Re: Index angeblich außerhalb Wertebereich (ComboBox)

  Alt 15. Jul 2008, 16:38
If ComboBox2.ItemIndex + 1 < ComboBox2.Items.Count -1 Then...
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Index angeblich außerhalb Wertebereich (ComboBox)

  Alt 15. Jul 2008, 17:09
Zitat von hathor:
If ComboBox2.ItemIndex + 1 < ComboBox2.Items.Count -1 Then...
Die Items laufen von 0 bis Count - 1.
Da fall ich aber auch immer wieder drauf rein
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: Index angeblich außerhalb Wertebereich (ComboBox)

  Alt 15. Jul 2008, 18:24
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
$2B or not $2B
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Index angeblich außerhalb Wertebereich (ComboBox)

  Alt 15. Jul 2008, 18:58
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 Fehler sein.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Index angeblich außerhalb Wertebereich (ComboBox)

  Alt 15. Jul 2008, 20:29
Moin Himitsu,

probier's mal so:

If (ComboBox2.ItemIndex + 1) < ComboBox2.Items.Count Then
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Index angeblich außerhalb Wertebereich (ComboBox)

  Alt 15. Jul 2008, 21:12
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Index angeblich außerhalb Wertebereich (ComboBox)

  Alt 17. Jul 2008, 13:58
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:
s := ComboBox2.Items[ComboBox2.ItemIndex + 1];
i := Integer(ComboBox2.Items.Objects[ComboBox2.ItemIndex + 1]);
hab grad mal versucht den ItemText auszulesen ... das geht, aber beim Object kommt immernoch die Exception.

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));
$2B or not $2B
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#9

Re: Index angeblich außerhalb Wertebereich (ComboBox)

  Alt 17. Jul 2008, 14:14
Hi himitsu,

Zitat von himitsu:
ach ja, Objects ist einfach nur ein gecasteter Integer ... des sollte doch kein Problem sein?
Also nach Gefühl finde ich das mit dem harten Cast auf den Integer nicht schön, wobei natürlich schon klar ist, warum Du das machst...

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
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

Re: Index angeblich außerhalb Wertebereich (ComboBox)

  Alt 18. Jul 2008, 11:08
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


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
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 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