所以这可能很难解释,但我想做一个 for ... := 1 to 10 do 声明,但我希望它是 A to N do。本练习的主要目的是将数据加载到字符串网格中。所以让它加载单元格 0,1 0,2 0,3 0,4 0,5 0,6 0,7,字母 A、B、C、D、E 一直到 14。如果有人知道如何做到这一点,我将非常感谢!
问问题
1744 次
3 回答
6
在这里你明白了,但我不确定这是否是学习编程的好方法(我的意思是提出问题作为请求,以便其他人为你编写代码):
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
StringGrid1.FixedCols := 1;
StringGrid1.ColCount := 15;
for I := 1 to 14 do
StringGrid1.Cells[I, 1] := Chr(Ord('A') + I - 1);
end;
于 2012-08-06T09:32:56.343 回答
1
如果你想一次填充 StringGrid 控件一行,你可以做
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
StringGrid1.FixedCols := 1;
StringGrid1.FixedRows := 1;
for i := 0 to Min(25, (StringGrid1.ColCount-1) * (StringGrid1.RowCount-1)) do
StringGrid1.Cells[i mod (StringGrid1.ColCount - 1) + 1,
i div (StringGrid1.ColCount - 1) + 1] := Chr(Ord('A') + i);
end;
无论有多少行和列,它都有效。
于 2012-08-06T09:45:12.363 回答
0
想要将 TLama 的答案与“想要做一个 for ... := 1 to 10 do 声明,但我希望它是 A to N do”
不知道是双关语,还是启发性的。
var c: char; i: integer;
s: string;
...
i := 0; s:= EmptyStr;
for c := 'A' to 'N' do begin
s := s + c + ',';
Inc(i);
end;
SetLength(s, Length(s) - 1); // we do not need last comma there
StringGrid1.ColCount := i;
StringGrid1.Rows[0].CommaText := s;
或者使用相同的 TStringBuilder - 这比在每个新的字符串修改上重新排列堆更快。
uses SysUtils;
...
var c: char; i: integer;
s: string;
...
i := 0;
with TStringBuilder.Create do try
for c := 'A' to 'N' do begin
Append(c + ',');
Inc(i);
end;
s := ToString;
finally
Free;
end;
SetLength(s, Length(s) - 1); // we do not need last comma there
StringGrid1.ColCount := i;
StringGrid1.Rows[0].CommaText := s;
于 2012-08-06T12:08:10.883 回答