我在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的单元格不再存在。无论隐藏列如何,我如何仍然选择单元格?
通过选择我的意思是聚焦单元格,并向用户显示选择了哪个单元格,而不仅仅是读取其字符串值。
答案 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;