Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何避免重复实现tStringGrid.Col&;tStringGrid,行_Delphi_Tstringgrid - Fatal编程技术网

Delphi 如何避免重复实现tStringGrid.Col&;tStringGrid,行

Delphi 如何避免重复实现tStringGrid.Col&;tStringGrid,行,delphi,tstringgrid,Delphi,Tstringgrid,我尝试从外部选择或单击单元格 当我使用tStringGrid.Col和tStringGrid.Row选择单元格时,onSelectCell事件运行两次 我怎样才能使它被处理一次 如果我使用tStringGridSelectCell事件来避免该问题,则选择矩形不会移动到该位置 type TForm1 = class(TForm) StringGrid1: TStringGrid; procedure FormClick(Sender: TObject); procedu

我尝试从外部选择或单击单元格

当我使用tStringGrid.Col和tStringGrid.Row选择单元格时,onSelectCell事件运行两次

我怎样才能使它被处理一次

如果我使用tStringGridSelectCell事件来避免该问题,则选择矩形不会移动到该位置

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormClick(Sender: TObject);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
  private
    TestCount: Integer;
  end;

procedure TForm1.FormClick(Sender: TObject);
var
  _Boolean: Boolean;
begin
  StringGrid1.Col := 2;
  StringGrid1.Row := 2;

  // StringGrid1SelectCell(Self, 2, 2, _Boolean); // the event runs once well but the cell is not visible when the position is out of sight.
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
  // something to be implemented

  Inc(TestCount);

  Caption := IntToStr(TestCount); // testcount is 2
end;

您可以使用属性设置选定单元格。

您可以使用属性设置选定单元格

如何使(OnSelectCell)处理一次

暂时禁用TSelectCellEvent

procedure TForm16.Button1Click(Sender: TObject);
var
  temp: TSelectCellEvent;
begin
  temp := StringGrid1.OnSelectCell;
  StringGrid1.OnSelectCell := nil;
  StringGrid1.Col := 2;
  StringGrid1.OnSelectCell := temp;
  StringGrid1.Row := 2;
  StringGrid1.SetFocus; // Optional, can be useful if goEditing is set
end;
如何使(OnSelectCell)处理一次

暂时禁用TSelectCellEvent

procedure TForm16.Button1Click(Sender: TObject);
var
  temp: TSelectCellEvent;
begin
  temp := StringGrid1.OnSelectCell;
  StringGrid1.OnSelectCell := nil;
  StringGrid1.Col := 2;
  StringGrid1.OnSelectCell := temp;
  StringGrid1.Row := 2;
  StringGrid1.SetFocus; // Optional, can be useful if goEditing is set
end;

它只选择一个或多个单元格,不激活事件未触发的单元格。谢谢。它只选择一个或多个单元格,不会激活事件未触发的单元格。谢谢。我宁愿在选择后寻找激活细胞。谢谢。@JO喜欢设置网格的焦点吗?我将其添加到代码中。@JO或者,如果您是指其他内容,请定义“激活”。@JO您需要告诉我“激活”单元格的含义。否。setfocus不会激活一个或多个单元格。我用“激活”来解释一个被选中的单元格,它看起来就像被点击了一样。上面的代码会激活它,但当选定单元格不在可见范围内时,选择代码不会使一个或多个单元格可见。谢谢。我宁愿在选择后寻找激活细胞。谢谢。@JO喜欢设置网格的焦点吗?我将其添加到代码中。@JO或者,如果您是指其他内容,请定义“激活”。@JO您需要告诉我“激活”单元格的含义。否。setfocus不会激活一个或多个单元格。我用“激活”来解释一个被选中的单元格,它看起来就像被点击了一样。上面的代码会激活它,但当选定单元格不在可见范围内时,选择代码不会使一个或多个单元格可见。谢谢