| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 569 人关注过本帖
标题:在表格BeforeRowColChange中写代码,造成表单卡死的现象?
只看楼主 加入收藏
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
结帖率:98.98%
收藏
已结贴  问题点数:10 回复次数:12 
在表格BeforeRowColChange中写代码,造成表单卡死的现象?
我在表格GRI的BeforeRowColChange 事件,写上以下代码,目的就是按回车或者输入完后自动调到下1行的,不是向有移动。因为我表格写的是数字

LPARAMETERS nColIndex
*IF THISFORM.OPT1.Value=1  &&修改该数据时,选择列操作
*  If (Lastkey()>=48 AND Lastkey()<=57) OR Lastkey()=13  &&最后按0~9或者回车后下移
*      Nodefault
*      Keyboard "{DNARROW}"
*  ENDIF
*ENDIF
同样的上面代码,数据从本地VFP表上取的数据,就不会卡死,
但从SQL2000上取数据,就会卡死。
出现卡死,有2个地方,1个就是进入表单的时候,就卡死,,如果进入表单的时候,不卡死,那就在查询数据的按钮的时候,卡死。
卡死的时候,要鼠标乱切换界面,动几下就好了。。。
我找这个问题,找了1天,最后,发现,把这段去掉,问题就不出现了,那肯定是这个问题了。
怎么处理啊?
2015-07-23 23:50
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
难道,搞个变量?在读取完数据后,变量=.t.
LPARAMETERS nColIndex
if 变量=.T.
IF THISFORM.OPT1.Value=1  &&修改该数据时,选择列操作
  If (Lastkey()>=48 AND Lastkey()<=57) OR Lastkey()=13  &&最后按0~9或者回车后下移
      Nodefault
      Keyboard "{DNARROW}"
  ENDIF
ENDIF
ENDIF
???这样做?
2015-07-23 23:52
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
改为这样,读数据的按钮,

WAIT WINDOW NOWAIT '正在读取本月数据......'
loaddata=.f.
..............
..............
THISFORM.Grid1.RECORDSOURCE=''
THISFORM.Grid1.COLUMNCOUNT = -1
THISFORM.Grid1.RECORDSOURCE=ALIAS()
loaddata=.t.
WAIT CLEAR
MESSAGEBOX([读取本月数据完成!  ],64,[OK])

这样,也可以了。。但问题出现原因是什么????

**BeforeRowColChange 事件
LPARAMETERS nColIndex
IF THISFORM.OPT1.Value=1 AND loaddata =.t. &&修改该数据时,选择列操作
  If (Lastkey()>=48 AND Lastkey()<=57) OR Lastkey()=13  &&最后按0~9或者回车后下移
      Nodefault
      Keyboard "{DNARROW}"
  ENDIF
ENDIF
2015-07-24 00:03
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
看来“卡死”不是由表格BeforeRowColChange中的代码产生。
2015-07-24 14:59
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
但是,我在读数据开始时,用变量
loaddata =.f.
数据读完后,
loaddata =.t.
在BeforeRowColChange 事件中,把这个条件加进去,就不卡了

**BeforeRowColChange
LPARAMETERS nColIndex
IF THISFORM.OPT1.Value=1 AND loaddata =.t. &&修改该数据时,选择列操作
  If (Lastkey()>=48 AND Lastkey()<=57) OR Lastkey()=13  &&最后按0~9或者回车后下移
      Nodefault
      Keyboard "{DNARROW}"
  ENDIF
ENDIF
2015-07-24 15:37
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
感觉,好像是表格GRID在填充数据时,是不是自动产生回车键,导致光标不挺的上下移动?

Lastkey()>=48 AND Lastkey()<=57) OR Lastkey()=13  &&最后按0~9或者回车后下移
2015-07-24 15:40
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
我晚上把Lastkey()=13去掉,看看,程序在我家里,不在单位
2015-07-24 15:41
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:4 
GRID获得焦点时也会触发BeforeRowColChange事件
2015-07-24 15:57
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
如果,我加1个变量,在读完数据后,变量才T,相当于,我在读数据的过程中,这段代码不起作业了。所以不卡了?
以前卡,可能是多次,触发这个事件BeforeRowColChange?,但奇怪的是用VFP本地表的时候,不会卡的。也就是数据从VFP上读取来的,比如
USE DATA\D1.DBF SHARE IN 0
SELECT * FROM D1 WHHERE ,,,,
以前是这个取数据的,好像没卡过

但最近我换成SQL2000取数据,就出现了。
SQLEXEC(nhandle,'select * from dd1 where .....','sql_dq')
这样取数据做GRID的数据源时,就卡了。
2015-07-24 17:14
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:6 
是否可以考虑不在BeforeRowColChange事件中处理
如:在表格单元的LostFocus事件中处理,如果涉及多列,可将各列单元格的LostFocus绑定到一个自定义方法。
2015-07-24 19:37
快速回复:在表格BeforeRowColChange中写代码,造成表单卡死的现象?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021055 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved