Forums Neueste Beiträge
 

ListBox-Problem

10/04/2010 - 10:52 von Wolfgang Backes | Report spam
Hallo miteinander,

bei einem VB6-Programm tritt folgendes Problem auf:

Auf einem SSTab-Control befindet sich ein Frame, darauf eine ListBox.
So weit, so gut.

Wenn ich aus dem laufenden Programm heraus per ALT-TAB auf ein anderes
Programm wechsele und dann wieder zurück auf das VB-Programm, dann
sind der Rahmen und die Scrollbar der ListBox verschwunden (ebenso der
Rahmen eines Component-One-Grids, das sich ebenfalls auf dem Frame
befindet).

Ergebnislos versucht habe ich schon Refresh und DoEvents.

Erfolg hatte ich (nicht lachen!) indem ich über einen Command-Button
achtmal nacheinander die Befehlsfolge

Hoehe = ListBox.Height
ListBox.Height = Hoehe + 1
ListBox.Height = Hoehe - 1

ausgelöst habe. Beim ersten Mal sah das Grid wieder normal aus, beim
achten Mal die ListBox. Das Ganze ist reproduzierbar. He, ich sagte
doch: NICHT LACHEN:-)

Kennt jemand eine schulmàßige Lösung?

Viele Grüße
Wolfgang
 

Lesen sie die antworten

#1 Horst Heinrich Dittgens
10/04/2010 - 11:26 | Warnen spam
Wenn ich aus dem laufenden Programm heraus per ALT-TAB auf ein anderes
Programm wechsele und dann wieder zurück auf das VB-Programm, dann
sind der Rahmen und die Scrollbar der ListBox verschwunden (ebenso der
Rahmen eines Component-One-Grids, das sich ebenfalls auf dem Frame
befindet).



Pràzise gesagt, das Zeugs ist nicht verschwunden, es wurde nur nicht neu
gezeichnet.

Also hilft das da...

Ergebnislos versucht habe ich schon Refresh und DoEvents.



natürlich nix, denn Refresh ist dazu da, um den Datenbestand und nicht die
Optik zu aktualisieren, und DoEvents kann zwar dazu mißbraucht werden, dem
OS Zeit zu geben zum Neuzeichnen, sollte es das schon immer wollen und
gerade nur nicht können, aber das da...

Hoehe = ListBox.Height
ListBox.Height = Hoehe + 1
ListBox.Height = Hoehe - 1



hat eben genau den erwünschten Effekt zur Folge, daß das OS sich bemüßigt
fühlt (nur) die Listbox neu zu zeichnen, weil sich deren Größe geàndert
habe. Um *alles* neu zeichnen zu lassen muß man also das SSTab dazu bringen,
sich mal wieder neu zeichnen zu lassen.

Kennt jemand eine schulmàßige Lösung?



Geht natürlich mit derselben Methode, oder akademisch kompliziert mit einer
Neuzeichnen-Nachricht an das betroffene Fenster (nur wozu kompliziert wenn's
einfach geht und ansonsten nichts stört?)

Ähnliche fragen