如何暂时使得TQuery下的所有永久字段的OnChange/OnGetText...等事件失效(类似于DisableControls这样的函数)
当用户手工输入时我们需要根据相应的输入来改变某些字段的值(比如输入商品编码后相应的修改商品名称等字段的值,这些控制都放在商品编码的OnChange事件中),但在我们程序控制从其他地方复制数据的时候则直接给他的所有字段赋值而不需要触发这些事件来完成某些字段的赋值,因为这些事件有可能很复杂。

解决方案 »

  1.   

    把事件寫成一個過程 例如 GenChange(send:TObject);事件失效
    Query.OnChange=nil;
    Query.OnGetText=nil;
    恢復事件
    Query.OnGenChange := GenChange;
      

  2.   

    楼上的,TQuery可没有OnChange和OnGetText事件吧,
    那么多的永久字段,一个个写过去还不如不用了
      

  3.   

    for i:=0 to Query.FieldCount-1 do
    begin
     if Query.Fields[i].OnChange<>nil then
       Query.Fields[i].OnChange='';
    end;
      

  4.   

    “类似于DisableControls这样的函数”
    楼上的先看看你的能不能编译通过再说吧,唉
      

  5.   

    for i:=0 to Query.FieldCount-1 do
    begin
     if Query.Fields[i].OnChange<>nil then
       Query.Fields[i].OnChange=nil; // 这边写错了
    end;// 以上的我试了,可以的
      
      

  6.   

    唉,我要的是暂时失效,完成一个过程之后是需要恢复的,按这种赋值方法也太麻烦拉,再写一次“类似于DisableControls这样的函数”
      

  7.   

    恢复:
    for i:=0 to Query.FieldCount-1 do
    begin
     if Query.Fields[i].OnChange=nil then
       Query.Fields[i].OnChange=mychange(...); 
    end;