| |
| |
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.
|
|
|
|