Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - ListBox ItemIndex


Jacer - Sa 17.02.07 16:07
Titel: ListBox ItemIndex
Also ich habe (wie ihr vielleicht schon hier mitbekommen habt :D) ein kleines Mitarbeiter-Verwaltungsprogramm geschrieben.
Dabei existiert ein Hauptfenster mit einer ListBox und zwei weitere Formulare für das Editieren und das Anlegen eines neuen Mitarbeiters.

Wenn ich jetzt beispielsweise dass Formular Editieren aufrufe, und auf Bestätigen gehe, aktualisiere ich die ListBox mit folgenden Zeilen:


Delphi-Quelltext
1:
2:
3:
4:
5:
    while not FrmMitarbeiter.TblMitarbeiter.eof do
      begin
        FrmMitarbeiter.ListBoxMitarbeiter.Items.Add(FrmMitarbeiter.TblMitarbeiter.FieldbyName('Nachname').Asstring + ', ' + FrmMitarbeiter.TblMitarbeiter.fieldbyname('Vorname').Asstring);
        FrmMitarbeiter.TblMitarbeiter.Next;
      end;


Mein Problem ist, dass dabei die ListBox ihre Selektion von vor dem Aufruf des zweiten Formulars verliert.
Kann man die Selektion bzw den ItemIndex einer ListBox irgendwie zwischenspeichern um ihn nach der Aktualisierung wieder zu aktivieren?


HelgeLange - Sa 17.02.07 16:10

ja, kann man, über den ItemIndex.


Narses - Sa 17.02.07 16:11

Moin!

Die VCL-Kompo TLisBox kann das nicht von Hause aus; mußt du schon selbst machen. ;)

cu
Narses


Jacer - Sa 17.02.07 16:14

user profile iconHelgeLange hat folgendes geschrieben:
ja, kann man, über den ItemIndex.


Tut mir Leid aber die Antwort ist so präzise dass ich sie nicht mehr verstehe!

user profile iconNarses hat folgendes geschrieben:
Moin!

Die VCL-Kompo TLisBox kann das nicht von Hause aus; mußt du schon selbst machen. ;)

cu
Narses


Könntest du mir einen Denkanstoss geben? :)


HelgeLange - Sa 17.02.07 16:15


Delphi-Quelltext
1:
2:
3:
4:
5:
OldIdx := ListView.ItemIndex
...
...
...
ListView.ItemIndex := OldIdx;


Narses - Sa 17.02.07 16:15

Moin!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  Temp: Integer;

begin
  Temp := ListBox1.ItemIndex;
  // Dinge tun...
  ListBox1.ItemIndex := Temp;

:rofl:

cu
Narses


GTA-Place - Sa 17.02.07 16:16

Aber prüfe, ob ListBox.ItemIndex > -1, sonst kommt es eventuell zu Zugriffsverletzungen!


HelgeLange - Sa 17.02.07 16:18

Kann man ItemIndex := -1 nicht setzen als "nein-ich habe nichts selektiert" ? *Helge sich da grad nicht sicher ist*


Jacer - Sa 17.02.07 16:18

Gut dann war nu meine Formulierungen des Befehles falsch.
Ich dachte man müsste es wieder so machen:


Delphi-Quelltext
1:
variable:= ListBox1.Items[ListBox.ItemIndex];                    


Vielen Dank für die Hilfe!


Narses - Sa 17.02.07 16:19

Moin!

user profile iconGTA-Place hat folgendes geschrieben:
Aber prüfe, ob ListBox.ItemIndex > -1, sonst kommt es eventuell zu Zugriffsverletzungen!

Nein, tut es nicht; -1 hebt die Selektion einfach auf. ;)

cu
Narses


GTA-Place - Sa 17.02.07 16:20

Nicht wenn du ListView.Items[Temp].Selected := True benutzt oder auf das Item zugreifen willst :roll:.


Jacer - Sa 17.02.07 16:31

So funktioniert jetzt alles. Hatte noch einen kleinen Fehler drinn!

Vielen Dank für die Hilfe ;)