首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TStringGrid标记外柱

TStringGrid标记外柱
EN

Stack Overflow用户
提问于 2014-02-11 10:21:45
回答 1查看 1.1K关注 0票数 2

我写的一段代码有一些问题。我正在用TStringGrid来画一个座位计划。

它应该做的是用字母在列和行的数字上标记fixedcol和fixedrow。

我的问题是,我不知道如何更改我的代码,使其不包括单元格0,0。它也没有标记所有的行。

代码语言:javascript
复制
procedure TfrmDraw.FormCreate(Sender: TObject);
var
  i, j, k: Integer;
begin
  sgFloor.RowCount := adotSeats['Rows'] + 1;
  sgFloor.ColCount := adotSeats['Seats_per_Row'] + 1;

  for i := 0 to SgFloor.RowCount do 
  begin
    for j := 0 to SgFloor.ColCount do
    begin
      if i = 0 then
        SgFloor.Cells[i,j] := Chr(65 + j)
      else
      if j = 0 then
      begin
        for k := 1 to sgFloor.ColCount do
          SgFloor.Cells[i,0] := IntToStr(i) ;
      end;
    end;
  end;
end;

截图:

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-11 10:34:18

一些好的建议:

我知道使用RAD样式组件是多么容易,但不要绑定GUI逻辑和应用程序逻辑。这将使您的代码更简洁,更易于阅读和维护。同时,对变量使用有意义的名称,这样做可以避免愚蠢的错误。

现在,关于您的问题,Grid使用基于0的索引,因此最后一个索引比计数少一个。在您的情况下,固定行和列都有索引0,这意味着我们必须从下一个索引开始迭代,即1,我使用了FixedRowsFixedCols属性来提高它的可读性。这有一个额外的好处,如果您有多个固定行/列,它将标记最内部固定的行/列。更容易创建两个单独的循环,一个用于标题行,另一个用于列:

代码语言:javascript
复制
procedure SetupGrid(Grid : TStringGrid; Rows, Columns : Integer);

var
 Row, Col: Integer;

begin
 Grid.FixedCols := 1;
 Grid.FixedRows := 1;
 Grid.RowCount := Rows + Grid.FixedRows;
 Grid.ColCount := Columns + Grid.FixedCols;

 for Row := Grid.FixedRows to Grid.RowCount-1 do 
  Grid.Cells[0, Row] := Chr(Ord('A') + Row-1);

 for Col := Grid.FixedCols to Grid.ColCount-1 do
  Grid.Cells[Col, 0] := IntToStr(Col); 
end;

procedure TfrmDraw.FormCreate(Sender: TObject);
begin
 // try to make your GUI events as lightweight as possible and seal
 // your code into separate functions/classes, this will improve readability 
 // of the GUI units and it will make your code testable
 SetupGrid(sgFloor, adotSeats['Rows'], adotSeats['Seats_per_Row']);  
end;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21699080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档