Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Listbox Bug??


mk2 - Di 12.11.02 12:52
Titel: Listbox Bug??
Moin,

ich hab ein problem mit der listbox (multiselect:=false)

1.Wenn ich eine neue Listbox erzeuge ist immer schon ein leerer eintrag vorhanden und der itemindex steht auf 0. Laut Onlinehilfe sollte der aber auf -1 stehen bei einer leeren listbox. auch wenn ich listbox.clear aufrufe ist dieser eine ominöse eintrag nicht verschwunden, itemindex immer noch 0 - übrigens unabhängig davon ob dieser eintrag angewählt ist oder nicht.

2. wenn ich jetzt einen eintrag hinzufüge, dann möchte ich diesen gern automatisch anwählen lassen. wenn ich aber den itemindex auf 0 setze, für ersten eintrag, dann wird dieser nicht markiert, itemindex auf 1 setzen wählt den 2. eintrag an, das funktioniert.

Hat jemand schon mal ähnliche probleme gehabt und vielleicht ne lösung dafür ??? Ich hab übrigens Delphi 4, falls das ne rolle spielt.


mfg mk2


LCS - Di 12.11.02 13:24

Hi
mk2 hat folgendes geschrieben:

1.Wenn ich eine neue Listbox erzeuge ist immer schon ein leerer eintrag vorhanden und der itemindex steht auf 0.

Was meinst du denn mit erzeugt? Zur Entwurfszeit auf ein Formular plaziert oder zur Laufzeit dynamisch erzeugt? In beiden Fällen ist mir sowas noch nie passiert.

mk2 hat folgendes geschrieben:

wenn ich aber den itemindex auf 0 setze, für ersten eintrag, dann wird dieser nicht markiert, itemindex auf 1 setzen wählt den 2. eintrag an, das funktioniert.

Wenn ein Eintrag vorhanden ist und setzt ItemIndex, dann wird der betreffende Eintrag auch markiert. Allerdings wird der Auswahlbalken u. U. erst dann sichtbar, wenn die Listbox zum ersten Mal den Focus erhält.

Gruss Lothar


DataCool - Di 12.11.02 13:26

Hi,

das Phänomen ist mir zwar noch nicht untergekommen, aber hast DU bei Delphi 4 alle 3 Updates eingespielt ? Könnte daran liegen ?!

Wenn Du einen neuen Eintrag hinzufügen willst und diesen gleich selektieren möchtest geht das mit :

Listbox1.itemindex := Listbox1.items.add('neuer Eintrag');

Data


mk2 - Di 12.11.02 13:47

danke,

das mit dem focus setzen stimmt, wenn ich listbox.itemindex:=0 setze und anschließend listbox.setfocus aufrufe dann funktioniert es. Der Eintrag war also schon markiert, ich hab bloß den markierungsrahmen nicht gesehen. :idea:

Was ich trotzdem nicht verstehe ist, dass die listbox im initialisierten Zustand nicht leer ist. Ich hab sie zur entwurfszeit erzeugt, aber das sollte doch eigentlich sowieso egal sein.

mfg mk2


mk2 - Di 12.11.02 13:51

nochmal ne frage zu den updates

Wie erkenne ich ob die bei mir schon installiert sind, im Infofenster von Delphi steht, dass ich version 4.0(Build 5.37) hab.


DataCool - Di 12.11.02 13:51

Zur Sicherheit Würde ich nach dem erzeugen, listbox1.items.clear aufrufen.

Ansonsten würde ich mal den kompletten Soucecode nach Listbox1.items.add abzusuchen. Nicht das irgentwo bei einem Ereignis oder sonstigem zufällig ein Eintrag hinzugefügt wird.

Oder poste mal den Source der Unit

Data


mk2 - Di 12.11.02 14:03

So,

ich hab mal n Beispielprogram erstellt. Einfach neues Projekt und auf Form1 eine Listbox raufpacken.Im Form1.OnShow dann folgender Code:


Quelltext
1:
2:
3:
4:
5:
procedure TForm1.FormShow(Sender: TObject)
begin
 listbox1.itemindex:=-1;
 showmessage(inttostr(listbox1.itemindex));
end;


Und die Ausgabe ist '0'. Das kann doch nicht sein, oder ? Widerspricht jedenfalls eindeutig der hilfe, wo steht :

Zitat:
Use ItemIndex to select an item at runtime. Set the value of ItemIndex to the index of the item to be selected. The ItemIndex of the first item in the list box is 0. If no item is selected, the value is -1, which is the default value unless MultiSelect is True.


Könnte jemand mal das Beispiel bei sich ausprobieren und mir sagen, was da angezeigt wird?

THX

mfg mk2


DataCool - Di 12.11.02 14:05

Die Informationen müßtest Du im Menu unter Hilfe/Info finden

Data


DataCool - Di 12.11.02 14:08

Also bei mir liefert dein Code unter D4/Update Pack 3 :

-1 als Itemindex :?:

Data


mk2 - Di 12.11.02 14:12

Danke,

dann wär das ja eindeutig, dass das ein bug ist. Werd mich mal auf die Suche nach den updates machen.

MfG mk2


DataCool - Di 12.11.02 14:23

http://www.borland.com

wenn die da nicht mehr verfügbar sind kannst Du die auch von mir bekommen, sind aber 40 MB

Data