我用C++ Builder,不会用Delphi。在C++Builder中有个属性设置:GoToNextCellOnEnter=true时,光标能移动到下一列,但如何设置能移动到下一行呢?

解决方案 »

  1.   

    tableview的KeyDown事件:procedure TFormSchedule.tv1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      tv1.OptionsData.Editing := False;
      if Key = 13 then Key := 40;  //往右是39
      tv1.OptionsData.Editing := True;
    end;
      

  2.   

    mofaser(鬼画符) :
    上面的代码,能实现换行功能,但是,在输入时,需要按两次回车键才能实现换行。
      

  3.   

    我这样写的可以达到你的目的:void __fastcall TForm1::TableViewKeyUp(TObject *Sender,
          WORD &Key, TShiftState Shift)
    {
        if (Key == VK_RETURN)
        {
             MoveCursorToNextCell();
            SelectCurCells();
        }
    }
    //---------------------------------------------------------------------------void TForm1::MoveCursorToNextCell()
    {
        // 最后一个单元格,不动
        if (TableView->Controller->FocusedRowIndex ==
            TableView->DataController->RowCount-1  &&
            TableView->Controller->FocusedColumnIndex ==
            TableView->ColumnCount-1)
        {    }
        // 最后一行,到下一列的第一行
        else if ( TableView->Controller->FocusedRowIndex ==
                 TableView->DataController->RowCount-1)
        {
            TableView->Controller->FocusedRowIndex = 0;
            TableView->Controller->FocusedColumnIndex += 1;
        }
        // 否则,到下一行
        else
        {
            TableView->DataController->FocusedRowIndex =
            TableView->DataController->GetFocusedRowIndex()+1;
        }
    }
    //---------------------------------------------------------------------------void TForm1::SelectCurCells()
    {
        TcxGridColumn *pCol = TableView->Controller->FocusedColumn;
        int n = TableView->Controller->FocusedRecordIndex;
        TableView->Controller->SelectCells(pCol, pCol, n, n);
    }
    //---------------------------------------------------------------------------