2016-12-21 5 views
1

В настоящее время я делаю «noughts and crosses» в качестве домашней работы. Я создал 10x10 массив TButton объектов, но я не знаю, как они называются и как их контролировать:Array of TButtons - как управлять ими

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

Это как ваш код действительно отступом? Это очень трудно читать. Нельзя не вообразить, что вы, возможно, пропустили важный код в этом, по-видимому, спешном упражнении. –

ответ

2

В конце для цикла добавить

pole[i][j] := h; 

Поскольку каждая итерация вы просто перезаписать переменную «ч» и ничего не добавляется в массив.

8

Вы должны назначить каждый вновь созданный объект кнопки соответствующей записи массива.

Другая важная вещь - внутри обычного обработчика событий вы, вероятно, хотите определить, какая кнопка нажата. Возможный путь - использовать поле объекта Tag

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; 
+2

Лучший способ, подкласс типа кнопки и добавить поля для хранения строки и столбца –

+2

@David Кажется, избыток для начинающего – MBo