Pageframe/Page macht Probleme

07/07/2009 - 01:44 von Torsten Brannolte | Report spam
Hallo Füxe,

wàre mal bitte jemand so lieb und würde den grausam gefrickelten code
testen? Habe hier das Problem, dass die Listbox auf Page 1 nach einem
Refresh() der Page 2 nicht mehr richtig funktioniert, sobald auf Page 2 des
Pageframes ebenfalls eine Listbox vorhanden ist.

Kommentiere ich die Listbox auf Page 2 aus, làuft alles einwandfrei... (Vfp9
SP2 auf WinXP)

test = crea('test')
READ events

DEFINE CLASS test as Form
PROCEDURE INIT
CREATE CURSOR csrTempCursor(str V(10))
INSERT INTO csrTempCursor (str) values ('Item 1')
INSERT INTO csrTempCursor (str) values ('Item 2')

This.Visible=.T.
This.Height@0
This.Width`0
This.AutoCenter=.T.

This.AddObject('Pageframe1', 'Pageframe')
This.Pageframe1.top
This.Pageframe1.left
This.Pageframe1.height=This.Height-20
This.Pageframe1.width=This.width-20
This.Pageframe1.Pagecount=2
This.Pageframe1.visible=.T.

This.Pageframe1.Page1.AddObject('List1', 'ListBox')
This.Pageframe1.Page1.List1.Top
This.Pageframe1.Page1.List1.Left
This.Pageframe1.Page1.List1.Height=This.Pageframe1.Height-50
This.Pageframe1.Page1.List1.Width 0
This.Pageframe1.Page1.List1.Visible=.T.
This.Pageframe1.Page1.List1.RowSourceType=3
This.Pageframe1.Page1.List1.RowSource="SELECT str FROM csrTempCursor INTO
CURSOR csrListBox"
BINDEVENT(This.Pageframe1.Page1.List1, 'InteractiveChange', This,
'ListBoxPage1InteractiveChange')

*!*************************************************************
This.Pageframe1.Page2.AddObject('List1', 'ListBox')
This.Pageframe1.Page2.List1.Top
This.Pageframe1.Page2.List1.Left
This.Pageframe1.Page2.List1.Height=This.Pageframe1.Height-50
This.Pageframe1.Page2.List1.Width 0
This.Pageframe1.Page2.List1.Visible=.T.
*!*************************************************************
ENDPROC

PROCEDURE ListBoxPage1InteractiveChange
This.Pageframe1.Page2.Refresh()
ENDPROC

PROCEDURE destroy
CLEAR EVENTS
ENDPROC
ENDDEFINE
 

Lesen sie die antworten

#1 Christof Wollenhaupt
08/07/2009 - 08:30 | Warnen spam
Hallo Torsten,

Die erste Listbox reagiert nicht, weil die zweite die clicks abfàngt. Wenn
Du die zweite Liste etwas nach rechts verschiebst, sieht Du, dass sich die
erste Listbox im linken Teil normal verhàlt, im rechten hingegen fehlerhaft.
Das Problem ist, das der Eventverarbeitungscode von VFP nicht darauf
ausgelegt ist, dass es wàhrend der Verarbeitung der Events einer Liste die
Events einer anderen verarbeitet. Listboxen sind da besonders problematisch,
da sie teilweise auf API Funktionalitàt zurückgreifen. Dadurch kommt es
manchmal auch zu Artefakten mit dem Scrollbalken.

Warum machst Du ein Refresh auf eine unsichtbare Seite? Besser wàre es, die
zweite Seite im Activate zu aktualisieren, nicht im InteractiveChange.

Christof

Ähnliche fragen