怪问题(34分)

  • 主题发起人 主题发起人 cm
  • 开始时间 开始时间
C

cm

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中使用了query的afterscroll事件。
在dbgrid移动记录时时间发生。
但我当我把用鼠表单机其他控件(一个按钮)时,这个事件
也发生,我不想让它发生。怎么半?
另外,这个事件怎么一发生就是两次?
 
因为dbgrid要刷新表格, 所以需要Scroll表格, 你试试不用Dbgrid, 只用
DBText之类, 就不会有这个现象.
用一些标记变量来实现你的过程.
afterScroll :

if Haveflag then
做你需要做的
 
可以利用DBGrid的Tag属性。Tag为0时不响应你要做的,为1时响应。
在AfterScroll事件中,可如此:
begin
if (Sender As TDBGrid).Tag=0 then Exit;
...... //处理你要做的
(Sender As TDBGrid).Tag=0 //下次不响应
end
在CellClick事件中加一行:
(Sender As TDBGrid).Tag=1 //响应你要做的
 
非常抱歉,写错了一些地方:


可以利用Query的Tag属性。Tag为0时不响应你要做的,为1时响应,初值为0。
在AfterScroll事件中,可如此:
begin
if (Sender As TQuery).Tag=0 then Exit;
...... //处理你要做的
(Sender As TQuery).Tag=0 //下次不响应
end

在DBGrid的CellClick事件中加一行:
Query1.Tag=1 //使其响应你要做的
 
你的环境是什么?
另外,你的按钮的事件中有什么处理?
Query还有其它的什么事件进行了处理吗?

我试了一下(delphi4 5.37+sp2+sp3, NT4),没有问题呀!
 
afterscroll事件是一旦发生记录的重定位,就会触发
我以前的解决方法是自己加上标志位,我需要触发的时候
置上标志位,
但是看到丘吉尔的方法后,我认为更好
 
多人接受答案了。
 
后退
顶部