delphi 自带的stringgrid控件,无法在设计期显示各列表头内容,想要在设计时实时显示各列名称,所以自定义一个stringgrid.
WINDOW10, DELPHI XE10.
需要先从stringgrid派生一个类。比如TMystrgrid,添加一个属性Rowheaders.
TMyStrGrid = class(TStringGrid)
private
FRowHeaders: TStringList;
procedure SetRowHeaders(const Value: TStringList);
procedure ClearRowHeaders;
procedure RowHeaderChanged(Sender: TObject);
{ Private declarations }
protected
{ Protected declarations }
procedure ShowRowHeaders;
public
{ Public declarations }
constructor Create(AOwner: Tcomponent); override;
destructor Destroy; override;
published
{ Published declarations }
property RowHeaders: TStringList read FRowHeaders write SetRowHeaders;
end;
在tmystrgrid的create时候,创建rowheaders, 重要的是要设置rowheader的onchange事件=自定义的rowheaderchanged
procedure TMyStrGrid.ClearRowHeaders;
var
i: Integer;
begin
if colcount > 0 then
for i := 0 to colcount - 1 do
Cells[i, 0] := '';
end;
constructor TMyStrGrid.Create(AOwner: Tcomponent);
begin
inherited;
FRowHeaders := TStringList.Create;
FRowHeaders.OnChange := RowHeaderChanged;//一定要设置事件关联
end;
destructor TMyStrGrid.Destroy;
begin
FRowHeaders.Free;
inherited;
end;
procedure TMyStrGrid.RowHeaderChanged(Sender: TObject);
begin
ShowRowHeaders;
end;
procedure TMyStrGrid.SetRowHeaders(const Value: TStringList);
begin
FRowHeaders.Assign(Value);
if (csDesigning in ComponentState) then
begin
if Fixedrows > 0 then
ClearRowHeaders;
end;
ShowRowHeaders;
end;
procedure TMyStrGrid.ShowRowHeaders;
var
i: Integer;
iRHCount: Integer;
iRCount: Integer;
begin
if Fixedrows > 0 then
begin
iRHCount := FRowHeaders.Count;
iRCount := RowCount;
for i := 0 to iRHCount - 1 do
begin
if i < iRCount then
begin
Cells[i, 0] := FRowHeaders[i]; // CLFToLF(FTitles[i]);
//把stringlist的内容写入对应各列的第一行
end;
end;
end;
end;
这样,当在设计期时,可以随时编辑表头显示内容。