0

所以这可能很难解释,但我想做一个 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。如果有人知道如何做到这一点,我将非常感谢!

4

3 回答 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 回答