这是一个简单的问题。 如何初始化变量Column以生成以下语句。
procedure TfmSomeForm.grdSomeGridDblClick(Sender: TObject);
var
Column: TColumnEh;
IsSomething: Boolean;
begin
inherited;
//Initialize Column
IsSomething := False;
if Column.FieldName = 'SOMETHING' then
IsSomething := True;
以这种方式初始化列
Column := grdSomeGrid.Columns.FindColumnByName('SOMETHING');
毫无意义,可能会导致异常 或我必须在这里
procedure TfmSomeForm.grdSomeGridCellClick(Column: TColumnEh);
begin
inherited;
FIsSomething := False;
if Column.FieldName = 'SOMETHING' then
FIsSomething := True;
end;
问题是我需要这个标志 onDblClick ,我不想让它成为全球。
答案 0 :(得分:2)
您不知道您的grdSomeGrid
是哪种数据类型。但是,对于普通的TDBGrid,您似乎想要做的事情就是直接在DblClick事件中做。
procedure TForm1.DBGrid1DblClick(Sender: TObject);
var
ACol : Integer;
Pt : TPoint;
CellValue : String;
begin
{ pick up the mouse cursor pos and convert to DBGrid's internal coordinates }
Pt.X := Mouse.CursorPos.X;
Pt.Y := Mouse.CursorPos.Y;
Pt := DBGrid1.ScreenToClient(Pt);
{ find the column number of the double-clicked column}
ACol := DBGrid1.MouseCoord(Pt.X, Pt.Y).X - 1;
if DBGrid1.Columns[ACol].FieldName = 'SOMETHING' then
{ do what you want}
end;
更新:维多利亚有用地提到了SelectedIndex
,这是获取当前专栏的另一种方式,但我总是设法忘记它,因为它的名字不包括{{1并且没有直接对应行(因为行操作基于书签而不是行索引)。
所以,我按照我的方式去做,因为它提醒我如何获取活动的列和行索引,并且很容易编写一个独立的函数,同时获取两者,就像这样:
Column