使用隐藏列在TAdvStringGrid中选择Cell

时间:2013-08-02 08:31:51

标签: delphi interface delphi-2007 tms

我在TAdvStringGrid中选择某个单元格:

const
  MyCol=4;
  MyRow=1;
  HiddenCol=2;

procedure TForm1.FormCreate(Sender: TObject);
begin
  AdvStringGrid1.ColCount:=5;
  AdvStringGrid1.RowCount:=10;
end;

procedure TForm1.BtnHideClick(Sender: TObject);
begin
  AdvStringGrid1.HideColumn(2);
end;

procedure TForm1.BtnSelectCellClick(Sender: TObject);
begin
  AdvStringGrid1.SelectCells(MyCol,MyRow,MyCol,MyRow);
end;

然而,我的问题是,在隐藏列后,将不会选择我需要选择的单元格,因为程序看到ColCount现在为4而col 5的单元格不再存在。无论隐藏列如何,我如何仍然选择单元格?

通过选择我的意思是聚焦单元格,并向用户显示选择了哪个单元格,而不仅仅是读取其字符串值。

1 个答案:

答案 0 :(得分:2)

根据第57页的TAdvStringGuide v6.1开发人员指南,您可以使用grid.AllCells(ACol,ARow)。描述说: "无论隐藏的列还是行,都以字符串形式访问网格单元格。 grid.AllCells返回显示的单元格,即。在事件OnGetDisplText"。

之后可能处理真实单元格文本之后

要显示所选单元格,您可以使用它们为您提供的一些附加功能。从指南中的第131页开始:

TAdvStringGrid还提供了一组函数,允许执行真实单元索引到可见单元索引的映射,反之亦然。这是通过以下方式提供的:

function RealRowIndex(ARow: Integer): Integer;
function RealColIndex(ACol: Integer): Integer;

返回给定可见列或行索引的实际列或行索引

function DisplRowIndex(ARow: Integer): Integer;
function DisplColIndex(ACol: Integer): Integer;

返回给定实列或行索引的可见列或行索引。

所以我认为您可以通过将上一个方法更改为:

来找到您要找的内容
procedure TForm1.BtnSelectCellClick(Sender: TObject);
begin
  AdvStringGrid1.SelectCells(DisplColIndex(MyCol),DisplRowIndex(MyRow),DisplColIndex(MyCol),DisplRowIndex(MyRow));
end;