AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TComboboxEx und ItemIndex

Ein Thema von dahead · begonnen am 21. Aug 2005 · letzter Beitrag vom 23. Aug 2005
Antwort Antwort
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#1

TComboboxEx und ItemIndex

  Alt 21. Aug 2005, 16:49
Hallo,

ich habe momentan folgendes Problem: ich will einer Combobox (genauer TComboboxEx) den ItemIndex aus einer INI-Datei beim Programmstart (TForm.OnCreate) zuweisen.

Das Problem ist, dass die Combobox den Wert nicht annimmt und immer -1 verwendet.
Ich habe probeweise versucht den ItemIndex im TForm.OnShow mit der selben INI-Lade Prozedur zu laden, damit klappt es. Ebenfalls mit diesem Code, welchen ich beispielsweise über einen Button zur Laufzeit aufrufe:

CB_Type.ItemIndex := 4 Ich habe in TComboboxEx.Style die Eigenschaft auf "csExDropDownList" gestellt. Wenn ich auf "csExDropDown" wechsle, klappt alles wie gewünscht. Auch mit einer 'normalen' TCombobox (ohne Ex) funktioniert alles wie es soll, allerdings _auch_ mit der Eigenschaft "csDropDownList".

Ich verwende die TComboboxEx nur aus dem Grund, da sie von Haus aus Images (TImageList) akzeptiert. Falls ich das nicht bräuchte, würde ich halt einfach eine TCombobox verwenden.

Kann es sein, dass die Komponente TComboboxEx Probleme hat, im OnCreate den ItemIndex zu akzeptieren?

Hinweis: Der ItemIndex wird später in keiner anderen Prozedur/Funktion geändert, das habe ich schon überprüft. Auch wird der ItemIndex korrekt abgespeichert (und korrekt geladen). Die Items wurden zur Designtime erstellt.

Hoffe jemand von euch weiß weiter. Danke.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: TComboboxEx und ItemIndex

  Alt 21. Aug 2005, 17:41
Hallo,

ich kenne drei Gründe, aus denen der ItemIndex von ComboBoxEx nach dem Setzen auf -1 steht:

(1) wenn man ihn auf -1 setzt // trivial
(2) wenn die Komponente noch keine Items kennt // by design
(3) wenn alle Items der Komponente eine leere Caption besitzen // by side effect

Du solltest die Fälle (2) und (3) überprüfen...

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#3

Re: TComboboxEx und ItemIndex

  Alt 21. Aug 2005, 17:50
Hallo,

1.) Nein, mache ich nicht.
2.) meine ComboboxEx hat Items zur Designtime erhalten (s. Hinweis-Text im ersten Post).
3.) Leider auch nicht.

Wie gesagt, setze ich den Style auf csDropDown (nicht csDropDownList) funktioniert alles wie es soll.

Ich glaube ich mach mal am besten ein Beispielprojekt und hänge es hier an. Dauert evtl. noch ein bisschen.

Edit: Ok, nachdem ich das Beispielprojekt fertig hatte, ging alles wie es sollte. Irgendwo sonst habe ich wohl noch einen anderen Fehler der den ItemIndex ändert.

Also nochmals danke marabu, nächstes mal werde ich bevor ich einen neuen Thread aufmache, wohl erst ein Beispielprojekt erstellen

Edit2:
Ich hab jetzt auch den Fehler/Auslöse gefunden:

Die folgende Zeile sorgt in meiner Lade-Prozedur dafür, dass die Form entweder die zuletzt verwendeten X,Y Koordinaten verwendet, oder aber zentriert (poScreenCenter) ist. So wie es aussieht ist einzig und allein diese Zeile dafür verantwortlich, dass die ComboboxEx ihren ItemIndex verliert:

TForm.Position := poDesigned; Edit3: hab jetzt mal das Beispielprojekt angehängt. So wie es aussieht ist der Befehl "SetPosition", welcher "RecreateWnd" aufruft letztendlich dafür verantwortlich, dass der ItemIndex verloren geht.

Ich muss also um mein Problem zu lösen, nur die INI-Ladeprozedur umstrukturieren, so dass zuerst die TForm.Position geladen wird, dann der Rest.
Angehängte Dateien
Dateityp: zip comboboxex_und_ini_185.zip (6,5 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: TComboboxEx und ItemIndex

  Alt 22. Aug 2005, 22:16
Wenn du unbedingt Form.Position im OnCreate-Handler setzen möchtest, dann achte darauf, dass es deine erste Aktion ist - die Form wird dadurch on-the-fly neu erzeugt und zerstört alle deine sonstigen Veränderungen an properties, auch bei child controls.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#5

Re: TComboboxEx und ItemIndex

  Alt 23. Aug 2005, 10:36
Ja, das stimmt, hatte ich in meinem Edit Nr. 3 auch schon bemerkt.
Trotzdem danke für den Hinweis!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: TComboboxEx und ItemIndex

  Alt 23. Aug 2005, 11:08
Zitat von dahead:
Ich hab jetzt auch den Fehler/Auslöse gefunden:

Die folgende Zeile sorgt in meiner Lade-Prozedur dafür, dass die Form entweder die zuletzt verwendeten X,Y Koordinaten verwendet, oder aber zentriert (poScreenCenter) ist. So wie es aussieht ist einzig und allein diese Zeile dafür verantwortlich, dass die ComboboxEx ihren ItemIndex verliert:
TForm.Position := poDesigned;
Wenn man nachschaut, was dabei passiert:
Delphi-Quellcode:
procedure TCustomForm.SetPosition(Value: TPosition);
begin
  if FPosition <> Value then
  begin
    FPosition := Value;
    if not (csDesigning in ComponentState) then RecreateWnd;
  end;
end;
sieht man, dass RecreateWnd aufgerufen wird.
Dies zerstört das Hauptfenster und alle Childfenster (auch deine ComboBox).
Beim Neuerstellen der ComboBox, ist die Info über den ItemIndex weg, da der ItemIndex an das Handle der comboBox angebunden war.
Ergo -> das Property [TForm].Position darf zur Laufzeit nicht benutzt werden, wenn das Formular schon sichtbar ist oder schon Controls verändert wurden.
Das hätte Borland auch besser machen können (wäre dann wohl mehr Code geworden).
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#7

Re: TComboboxEx und ItemIndex

  Alt 23. Aug 2005, 11:18
@shmia:

siehe mein Edit 3. Bereits bekannt.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#8

Re: TComboboxEx und ItemIndex

  Alt 23. Aug 2005, 16:38
Hi,

ein ähnlicher Fehler im Bezug auf den ItemIndex ist bereits seit über 8 Monaten für Delphi 2005 bekannt:
http://www.delphipraxis.net/internal...ct.php?t=40913

Borland hat es seit dem nicht geschafft, diesen ärgerlichen Bug zu beseitigen...
Aber für dieses Problem gibt es wenigstens einen Workaround...

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Antwort Antwort


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 05: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