2016-12-21 4 views
1

私は現在、宿題として "noughts and crosses"を作っています。私はTButtonオブジェクトの10×10の配列を生成しますが、私は彼らが呼び出されるかわからないし、それらを制御する方法: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; 

でもその配列に私のボタンはありますか?私はここで少し混乱していると言わなければならない。すべての反復は、あなただけの変数「h」を上書きして、何も配列に追加されません取得するので、forループの終わりに

+0

あなたのコードは本当にインデントされていますか?読むのはとても難しいです。この明らかに急いでいるペースト練習で重要なコードを見逃したかもしれないと想像するのを助けることはできません。 –

答えて

2

pole[i][j] := h; 

を追加します。

8

すべての新しく作成されたボタンオブジェクトを適切な配列エントリに割り当てる必要があります。

もう1つ重要なことは、共通のイベントハンドラ内では、どのボタンが押されたのかを判断したいことでしょう。可能な方法 - オブジェクトフィールドを使用するタグ

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

関連する問題