如何初始化TColumnEh

时间:2017-06-23 07:18:41

标签: delphi delphi-xe

这是一个简单的问题。 如何初始化变量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 ,我不想让它成为全球。

1 个答案:

答案 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