工具栏上有     添加 删除 保存 取消 按钮 首条 上一条 下一条 末条下面就是edit编辑框了,记录的各个字段赋值在edit中,
在浏览数据记录时候,只要修改了任何一个edit中的值,“保存” 按钮的 enable由false变为true.
但如果只是点上一条 下一条 来浏览数据时候就还是false的.这种界面控制不知道是如何实现的.现在使用edit的 onchange 事件
BtnSave.enable:=ture;但这样的话,即时浏览数据时候 “保存”  这个按钮 也会变为可用,不是我要的效果我只希望人为修改edit后变为可用,而不是浏览时候。不知道我说的情况大家明白了吗? 界面上有几十个 edit时候怎么弄呢?有demo看的没?

解决方案 »

  1.   


    做个标记
    var
      changed:Boolean;
    点上一条 下一条时,changed设置为false;
    onchange 时,changed设置为true;edit的 onchange 事件 
    if changed then
      BtnSave.enable:=ture
    else
      BtnSave.enable:=False;
      

  2.   

    还是在edit的 onchange 事件进行处理,方法:if Edit1.Text<>ADOQuery1.FieldByName('字段').AsString then
      BtnSave.enable:=ture; 
      

  3.   


    而且 我不仅仅 是点击 上一条 下一条 来浏览啊
    也有的是在treeview的节点上浏览点击  也有的是 在dxgrid的网格中选择记录浏览,有的是listbox 中选择记录浏览。。那岂不是把人累死了啊.
      

  4.   

    那就判断数据集的状态
      if ADOQuery1.State =dsBrowse then
      begin
        //编辑状态,enable:=False;
      end
      else if ADOQuery1.State = dsEdit then
      begin
        //处于编辑状态,enable:=True;
      end;
      

  5.   

     在  DataSource  的 DataStateChange  裏處理。
      

  6.   


     DataSource  的 DataStateChange中根据数据集的状态 判断
      

  7.   


    我数据业务逻辑封装到了dll中..
    界面中,使用clientDataset来获取数据 ,没有datasource【假如我没用数据感知控件的话】。 operation是业务类的实例clientDataset1.data:=Operation.getData;
    edit1.text:=clientDataset1.Fieldbyname('field1').asstring;
    edit2.text:=clientDataSet1.fieldbyname('field2').asstring;
    ...
      

  8.   


    根据你这种情况, 没有什么简单的办法了.
    试试下面的方式:
    1.写一个procedure , 代码为BtnSave.enable:=ture; 
    2.表单建立时, 将每个edit的onchange事件调用1中写的procedure
    3.上一条 下一条的Click中写BtnSave.enable:=ture
      

  9.   

    修改10楼:
    3.上一条 下一条的Click中写BtnSave.enable:=False