今天遇到一个怪问题,在Delphi中,运行如下程序,正常
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DBClient, DB;
type
TForm1 = class(TForm)
dbgrd1: TDBGrid;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
TitleNames:array of String;
I:integer;
DStTemp: TClientDataSet;
fldsTemp:array of TStringField;
dsTemp:TDataSource;
begin
Setlength(TitleNames,2);
// 长度为31
TitleNames[0] := '1234567890123456789012345678901';
TitleNames[1] := '这是一个测试标题宽度的实验程序';
DStTemp := TClientDataSet.Create(dbgrd1);
SetLength(fldsTemp,2);
for I:=0 to 1 do
begin
fldsTemp[I]:=TStringField.Create(dbgrd1);
dbgrd1.FindComponent('Field'+IntToStr(I)).Free;
fldsTemp[I].Name:='Field'+IntToStr(I);
fldsTemp[I].Name:='Field'+IntToStr(I);
fldsTemp[I].FieldName:=TitleNames[I];
fldsTemp[I].Size:=10;
fldsTemp[I].Index:=I;
fldsTemp[I].DataSet:=DStTemp;
end;
DStTemp.CreateDataSet;
{
对DataSet赋值
}
dsTemp := TDataSource.Create(dbgrd1);
dsTemp.DataSet := DStTemp;
dbgrd1.DataSource := dsTemp;
end;
end.
但是,当TitleNames[0]='12345678901234567890123456789012',也就是说长度大于31的时候,就会发生错误,不知道为什么??