windows 2003 server + delphi 7 + MSSQL2005我的 DBGridEh1 所有Events都清除了,但是(datasource)和(Popupmenu)除外。设置 DBGridEh1 属性
dgTabs True // 已试过 dgTabs False 同样故障dghEnterAsTab True
可是在 DBGridEh1 数据录入的时候,回车或者TAB ,// 或者是上下键箭头移动都是同样故障
第一行,行末,可以跳到第二行,
第二行,行末,又是跳回到第二行第一列,那么继续回车或者TAB到行末,这下可以跳到第三行,
第三行,行末,又是跳回到第二行第一列,继续,回车或者TAB,一直到第三行行末,可以跳到第四行,
第四行,行末,还是跳回到第二行第一列,……如此循环
怎么可以这样呢?搜索了很多地方,找不到答案。。恳求帮忙了。

解决方案 »

  1.   

    有点奇怪,实在不行自己写代码处理Enter和TAB按键
      

  2.   

    不行啊,曾经有过这一段代码的,就是出现上述情况才注释掉了,并且DBGridEh1的OnkeyDown事件也清除。
    procedure Tfrm_KdEdit.DBGridEh1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin  case Key of
        VK_ESCAPE: Close;
        VK_RETURN:
        if not (ActiveControl is TDBGridEh) then
          begin
            if Shift = [ssShift] then
              Perform(WM_NEXTDLGCTL, 1, 0)
            else
              Perform(WM_NEXTDLGCTL, 0, 0);
          end
        else
        begin
            if (key=13) and not (DBGridEh1.DataSource.DataSet.Eof) then
               DBGridEh1.DataSource.DataSet.Next
            else
            if key=13 then key:=9;
        end;  end;end;
      

  3.   

    版本应该没有问题吧。delphi7 Enterprise, build 8.1, EhLib 4.2.12
      

  4.   

    DBGRIDEH有一个属性开关,实现你这样的功能的,属性名字记不清了,反正有ENTER和TAB这两个字
      

  5.   


    你是希望这个属性是false还是true呢?
      

  6.   

    重写DBGrid的KEYPRESS如果回车,定位到下一单元格,如果到行未,定位到下一行第一格。procedure TRootFrm.DBGridEhKeyPress(Sender: TObject; var Key: Char);
    var DataChange: TDataChangeEvent;
    begin
      if Key = #13 then
      begin
        with TDBGridEh(Sender) do
        begin
          try
            DataChange := DataSource.OnDataChange;
            DataSource.OnDataChange := nil;
            if SelectedIndex = Columns.Count - 1 then
            begin
              if Not DataSource.DataSet.Eof then
              begin
                DataSource.DataSet.Next;
                SelectedIndex := 0;
              end;
            end
            else
               SelectedIndex := SelectedIndex+1;
          finally
            DataSource.OnDataChange := DataChange;
          end;
        end;
      end;
    end;