Hallo,
folgende Situation bereitet mit ein paar Kopfschmerzen
(jaja, und vom Fussball gestern brummt mir der Kopf auch
).
Ich habe ein ListView (vsReport) mit vielen Einträgen,
so dass der Scrollbar angezeigt wird.
Jetzt scrolle ich etwas runter (nicht bis zum letzten Element),
markiere einen Eintrag, klicke nen Button, der Eintrag soll verschwinden.
Soweit kein Problem.
Das Verschwnden mache ich durch Löschen aus der zugrunde liegenden Liste (TList)
und neufüllen des ListViews.
Das Neufüllen hat interne Gründe, kann ich also nicht vermeiden.
Jetzt will ich aber, dass der Nutzer nicht wieder den Anfang der Liste sieht,
sondern "etwa" dort steht, wo er vor dem Löschen war.
Dazu merke ich mir die List-Position (ItemIndex),
und markiere das ListItem, was jetzt an der Stelle steht.
mit folgenden Code:
Delphi-Quellcode:
ListItem.Focused := True;
ListItem.Selected := True;
ListItem.MakeVisible(False); // True bringt auch nix
Da ich aber durch das Neufüllen wieder am Anfang der Liste bin,
benutze ich ListItem.MakeVisible.
Dummerweise macht das MakeVisible aber genau das, was es soll,
es bringt das ListItem nur in den Vordergrund.
Die genaue Position ist aber immer verschieden.
Für den Nutzer sieht es jetzt so aus,
als ob der Fokus ständig springt, wenn er mehrere Einträge hintereinander löscht.
Wie kann ich das denn verhindern ?
Ich habe da was mit dem TopItem gelesen,
komme damit aber nicht so richtig weiter,
weil ja auch das TopItem gelöscht werden könnte.
Danke im voraus
Edit: TopItem kann ich nicht setzen, ist "Nur Lesen"
Heiko