我目前正在制作“noughts and crosses”作为家庭作业。我生成了一个10x10的TButton
个对象数组,但我不知道它们是如何调用的,以及如何控制它们:
Form1: TForm1;
pole: array[1 .. 10, 1 .. 10] of TButton;
h:TButton;
for i:=1 to 10 do
for j:=1 to 10 do
begin
h:=TButton.Create(Self);
h.Parent:=Self;
h.Width:=50;
h.Height:=50;
h.Left:=((i+1)*50)-100;
h.top:=((j+1)*50)-100;
h.OnClick := hClick;
end;
我的按钮是否在该阵列中?我必须说我在这里有点困惑。
答案 0 :(得分:8)
您必须将每个新创建的按钮对象分配给适当的数组条目。
另一个重要的事情 - 在公共事件处理程序内部,您可能想要确定按下了什么按钮。可能的方法 - 使用对象字段标记
for i:=1 to 10 do
for j:=1 to 10 do begin
h:=TButton.Create(Self);
pole[i, j] := h;
...
h.OnClick := hClick;
h.Tag := 10 * i + j; //store both row and column
end;
procedure ...hClick(Sender: TObject);
var
i, j: integer;
begin
i := (Sender as TButton).Tag div 10; // extract row and column
j := (Sender as TButton).Tag mod 10;
...
end;
答案 1 :(得分:2)
在for-loop add结束时
pole[i][j] := h;
因为每次迭代都只是覆盖变量' h'没有任何东西被添加到数组中。