Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ComboBox.ItemIndex liefert falsche Ergebnisse (https://www.delphipraxis.net/192362-combobox-itemindex-liefert-falsche-ergebnisse.html)

mariusbenz 12. Apr 2017 06:56

ComboBox.ItemIndex liefert falsche Ergebnisse
 
Guten Morgen,

habe die SuFu schon benutzt, zu meinem speziellem Problem aber noch nichts gefunden.
In seltenen, sporadisch auftretenden (also nicht reproduzierbaren) Fällen liefert mir ComboBox.ItemIndex einen Wert kleiner 0, obwohl in der Combobox eindeutig was drin steht.
Dass dort auch wirklich der Text 1 zu 1 steht wie in den Items, ist schon vorher geprüft worden (im OnExit).
Momentan ist eine Logik eingbaut, die, wenn der IntemIndex < 0 ist, versucht ihn über diese Methode zu ermitteln : ComboBox.Items.IndexOf(ComboBox.Text)
Das klappt dann auch in den paar Fällen, wo der erste Fehler aufgetreten ist, allerdings bin ich mir nicht sicher, ob man dem vertrauen kann, wenn ja schon der ItemIndex manchmal den falschen Index liefert.

Was ihr noch wissen solltet, die ComboBox wird als Paramter in einer Funktion übergeben, ich überprüfe im Moment noch, ob er dann wirklich die richtige Combobox anspricht, da der Fehler aber so selten auftaucht, muss ich mich erst mal darauf verlassen, dass die Bediener mir bescheid geben.

DeddyH 12. Apr 2017 07:13

AW: ComboBox.ItemIndex liefert falsche Ergebnisse
 
Und wenn Du AutoComplete der ComboBox auf true stellst?

himitsu 12. Apr 2017 07:22

AW: ComboBox.ItemIndex liefert falsche Ergebnisse
 
Zitat:

Zitat von mariusbenz (Beitrag 1367254)
einen Wert kleiner 0, obwohl in der Combobox eindeutig was drin steht

Delphi-Quellcode:
< 0
oder genauer
Delphi-Quellcode:
-1
bedeutet "nichts ausgewählt", also kein Items ist selektiert.

Und nur weil etwas drin steht, muß noch lange nichts selektiert sein.
Wenn man "Freitext" erlaubt (csDropDown oder csSimple), dann wird eben nicht automatisch selektiert, nur weil "zufällig" irgendein Item (es könnten auch mehrere sein und das weiß Delphi/VCL/Windows nicht) mit dem .Text übereinstimmt.

Also entweder du mußt dafür sorgen, dass ein Item ausgewählt wird, wenn du nur auf ItemIndex zugreifst.
Delphi-Quellcode:
DeineComboBox.ItemIntex := DeineComboBox.Items.IndexOf(DeineComboBox.Text);

// oder, damit ausversehn gelöscht werden könnte, falls kein Item gefunden wird

i := DeineComboBox.Items.IndexOf(DeineComboBox.Text);
if i >= 0 then
  DeineComboBox.ItemIntex := i;
bzw. statt DeineComboBox.ItemIndex eben DeineComboBox.Items.IndexOf(DeineComboBox.Text) zum Auslesen verwenden.

Oder csDropDownList.

mariusbenz 12. Apr 2017 08:35

AW: ComboBox.ItemIndex liefert falsche Ergebnisse
 
Danke himitsu, dann haben meine Kollegen und ich den ItemIndex einer ComboBox erst jetzt richtig verstanden und ich kann mir sicher sein, dass die alternative Methode immer funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:55 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