eemap.org/ge/eemap2ge.zip
动态改变 GIRD 表格的底色 在表单中添加一自定义属性 rec 在表格的 init 中这样写 this.SetAll("dynamicforecolor","IIF(recno()=thisform.rec, "Column") 在表格的 afterrowcolchange 中写 LPARAMETERS nColIndex thisform.rec = recno() thisform.refresh 假定你的表格上有一个按钮,原来的代码是 skip 你在添加两行,使它成为这样 skip thisform.rec = recno() thisform.refresh RGB(255,0,0), RGB(0,0,0))",
表格的三个疑难问题 一、焦点的转移:解决 Grid 的刷新问题 前言: 你也许碰到过这样的问题:你想用一个 VCR 按钮来移动表的指针,比如上一个、下一个等等,却发现 Grid 不刷新、老是停留在原来的位置;还有,你想在一个添加按钮的代码中把焦点移入表格的一列中,用 setfocus()方法却根本没有反应。这是怎么回事呢? 更多的细节: 关于 Gird 中的控件的焦点转移有点特殊性。 给普通表单上的控件设置焦点我们可以用简单的代码实现, 比 如:
thisform.textbox1.setfocus() thisform.refresh() 但是 Grid 中的控件则不行,如果你使用以下的代码,什么都不会发生:
thisform.grid1.column1.text1.setfocus() thisform.refresh()
同时,你要从 Grid 中移出焦点到表单的控件上也一样,下面的代码同样没有反应:
grid1.cloumn1.text1.lostfocus(): thisformmand1.setfocus() thisform.refresh() 另外,当我们使用移动纪录按钮在表中移动时,并不会反映到 Grid 中,比如:
sele dbfname go bottom thisform.refresh() 而 Grid 仍然停在原来的记录上。这是怎么一回事呢? 原来,对 Grid 中控件焦点的移入移出,必须通过 Grid 来转移!这一点在所有的教科书、程序员手册中都 找不到,嘿嘿,是我自己摸索出来的。下面我们来解决上面的三个
问题: 1、从表单的命令按钮向 Grid 中的文本框设置焦点
thisform.grid1.setfocus() thisform.grid1.column1.text1.setfocus() thisform.refresh() 2、从 Grid 中的文本框中移出焦点
grid1.column1.text1.lostfocus(): thisform.grid1.setfocus() thisformmand1.setfocus() thisform.refresh() 3、当数据指针移动时刷新 Grid
sele dbfname go bottom thisform.grid1.setfocus() thisform.refresh() 二、Vaild 事件 有的朋友以为 Grid 没有 Vaild 事件,所以必须用 AfterRowCowChange()事件来代替。其实这种看法说 明对面对对象编程原理的理解不够。 我们知道,Grid 是一个容器控件,它是由一个容器和容器包含的多个 Column 控件组成;而 Column 控
件也是一个容器控件,它是由一个容器和容器包含的 header、textbox 控件组成的。 了解了这一点,我们就可以知道 Grid 虽然没有 Vaild 事件,但是 Textbox 当然是有这个事件的啊。我们 只要从属性窗口顶部的对象下拉
列表框中选择表格中相应的列中的文本框控件, 然
后双击它的 Vaild 事件, 输入相应的代码就可以了。 三、Grid 什么都不显示 在 Grid 的数据源变化的情况下(数据源为参数化视图的情况除外) ,刷新时会出现 Grid 上什么都没有、 甚至连列/表格线都消失的情况,我不知道这算是 VFP 的一个特点还是一个 BUG。 起初, 我通过用代码方式 重新生成表单的方法来解决,后来经人指点才发现,可以简单的用代码重新指定数据源的方法来解决,这 个问题在 MSKB 里专门有一篇 HOWTO。 例如:Grid 的数据源为一个 SQL 语句生成的视图 MyView,Grid1 的数据源设置为 MyView,如果是查 询字段不变的参数化视图,不会发生这种情况;但如果
查询字段发生了变化,则必须在改变了 SQL 语句后 用代码重新指定 Grid 的数据源,代码如下: MyView 视图的原来条件为: select * from 数据库名!表名 where 表名.字段一 = ?thisform.qryValue Grid1.RecordSourceType 为视图;
Grid1.RecordSou