deutschsprachige FoxPro User Group
Forum View
Home
  
  Re: Hintergrund-Farbe einer Textbox dynamisch ändern - #14186 in section [727835]
Sec: (51) MS-Visual FoxPro 9.0
Von: Olaf Doschke
An: Helmut_Müller
Am/Um: 08.09.2010 16:48:28

--from Newsreader at Mittwoch, 8. September 2010; 16:48:28--

>ich habe in der Form jetzt folgendes Resfresh eingebaut (und wieder raus):
>
>Procedure refresh
>thisform.pf.page2.ckzD.BackColor = iif(kzD = 0, Rgb(0,0,255),
>Rgb(255,0,0) )
>thisform.pf.page2.ckzD.visible = .T.
>thisform.pf.page2.ckzD.refresh
>endproc

>Ergebnis: Die Farbe bleibt stabil, nichts ändert sich !

Das allein bewirkt ja auch nichts, bei Datensatzwechseln muß auch ein
Thisform.Refresh aufgerufen werden und wenn ein Control auf einer nicht
sichtbaren Pageframe liegt dann im Page Activate. Alleine für sich macht das
nichts. Refresh ist kein Event, das läuft nicht von selbst, es unterscheidet
sich nur insofern von einer gewöhnlichen Methode, als daß ein Form.Refresh
kaskadiert auch Refresh() von Controls aufruft.

Sagte ich auch bereits: "...ist man wohl auf ein Thisfrom.Refresh() im
Next/Previous Button seiner Navigationsleiste angewiesen."

Du sprichst jetzt noch von einem Grid :
>Das .visible = .T. übersteuert das aus/einblenden im AfterRowColChange des
>Grids.

Dann gehört ins AfterRowColChange() dieses Grids der Aufruf
Thisform.Refresh(), von alleine läuft das doch nicht.

Außerdem würde ich den Refresh nicht ins Form.Refresh sondern ins Control
selbst reinschreiben: ckzD.Refresh()
This.Backcolor = iif(kzD = 0, Rgb(0,0,255), Rgb(255,0,0) )

Und ins pf.Page2.Activate dann nochmal ein Thisform.Refresh()

Wozu Du den Visible Zustand abschaltest und dann wieder .T. setzt entzieht
sich meinem Verständnis, aber spätestens im Page.Activate() sollte das
Control wieder sichtbar geschaltet werden.

Die Refresh() Methode der Form selbst kann leer bleiben, sie dient nur dazu
alle weiteren Refresh()s zu kaskadieren und den Mechanismus kannst Du dann
nicht nur auf dieses eine Control anwenden, brauchst aber nur
Thisform.Refresh() im Grid.AfterRowColChange() und im PAge.Activate() und
egal wie viele Controls sich speziell refreshen, das tun die dann jeweils
für sich. Kapselung: Jedes kümmert sich in erster Linie um sich selbst, so
weit das geht.

Tschüß, Olaf.






Helmut Müller   01.09.2010 16:33
Bernhard Sander  01.09.2010 17:30
Helmut_Müller  02.09.2010 15:10
Bernhard Sander  03.09.2010 12:10
Olaf Doschke  03.09.2010 14:28
Olaf Doschke  03.09.2010 15:27
Bernhard Sander  03.09.2010 19:54
Olaf Doschke  05.09.2010 15:13
Helmut_Müller  06.09.2010 09:03
Olaf Doschke  08.09.2010 16:48
Thomas Geissler  31.10.2011 15:49
  
zurück zum Forum