Grid表格中的单元格用SetFocus获得焦点后如何通过代码控制突出显示
我的表单中有一个Grid表格,数据环境是一个自由表,现在通过编写代码查找到若干单元格,
注意不是一个记录,而是记录行和字段列对应的一项,记录行通过 go 记录号 或 locate 获得,
列中的Text单元格通过诸如 Grid1.Column1.Text1.SetFocus 方式获得.
之后想将获得的单元格焦点的Text1属性的前景色或背景色变化来突出显示,如:Grid1.Column1.Text1.BackColor = RGB(0,255,128),再用 Grid1.Column1.Text1.Refresh,Grid1.Refresh 刷新,但并不成功。而用诸如 Grid1.Column1.BackColor = RGB(0,255,128) 达到变色突出显示,但是整列变色,并没有达到预期效果.
请问老师、高手们,如何实现上述功能?
[解决办法]
要用 SetAll 函数.
下面这个是VFP 6 所带例程 solution 中的一个例子 dyngrid.scx,通过改变下拉列表改变单元格颜色,供参考:
oGrd = THISFORM.grdProducts
* Clear the current grid dynamic fore and back colors
*----------------------------------------------------
oGrd.SetAll("dynamicbackcolor", "", "Column")
oGrd.SetAll("dynamicforecolor", "", "Column")
DO CASE
CASE THIS.Value = 2 && Ledger
oGrd.SetAll("dynamicbackcolor", ;
"IIF(RECNO()%2 = 0,RGB(255,255,0), RGB(255,255,255))", "Column")
*----------------------------------------------------
CASE THIS.Value = 3 && RGB(192,192,192)discontinued items
oGrd.SetAll("dynamicforecolor", ;
"IIF(discontinu, RGB(192,192,192), RGB(0,0,0))", "Column")
*----------------------------------------------------
CASE THIS.Value = 4 && High Profit items
oGrd.SetAll("dynamicforecolor", ;
"IIF(Unit_price - Unit_cost > 5, RGB(255,255,255), RGB(0,0,0))", "Column")
oGrd.SetAll("dynamicbackcolor", ;
"IIF(Unit_price - Unit_cost > 5, RGB(255,0,0), RGB(255,255,255))", "Column")
*----------------------------------------------------
CASE THIS.Value = 5 && checkerboard
oGrd.SetAll("dynamicforecolor", "RGB(255,255,255)", "Column")
FOR i = 1 TO oGrd.ColumnCount
IF i % 2 = 0
oGrd.Columns(i).dynamicbackcolor = "IIF(RECNO()%2 = 0, RGB(255,0,0), RGB(0,0,0))"
ELSE
oGrd.Columns(i).dynamicbackcolor = "IIF(RECNO()%2 = 0, RGB(0,0,0), RGB(255,0,0))"
ENDIF
ENDFOR
*----------------------------------------------------
ENDCASE
oGrd.Refresh