0

私は学校の予測ゲームに取り組まなければなりません。2 つのランダムなチームを互いに対戦させるために、フォーム 1 で次のコードを実行しました。

procedure TfrmUserInput.FormCreate(Sender: TObject);
const
arrT1 : array[1..6] of string = ('Blue Bulls','Griquas','EP Kings','Sharks','Cheetahs','Valke');
arrT2 : array[1..6] of string = ('Lions','Pumas','Leopards','Western Province','Kavaliers','Eagles');
begin
Randomize;
sTeam1 := arrT1[Random(5)+1];
Randomize;
sTeam2 := arrT2[Random(5)+1];
lblT1Pred.Caption := (sTeam1 + ' predicted score :');
lblT2Pred.Caption := (sTeam2 + ' predicted score :');
rbTeam1.Caption := sTeam1;
rbTeam2.Caption := sTeam2;
end;

そして、2番目のフォームには次のものがあります:

procedure TfrmAdminInput.FormCreate(Sender: TObject);
begin
rbT1.Caption := sTeam1;
rbT2.Caption := sTeam2;
end;

sTeam1 と sTeam2 はグローバル変数です。

4 番目のフォームで、ボタンをクリックして次の試合の予測を開始します。そのため、他の 2 つのランダムなチームを選択する必要があります。最初は、複製した配列を作成して次のコードを使用したかったのですが、問題が発生しました。 「宣言されていない識別子: lblT1Pred」 - この問題は、lblT2Pred と 2 番目のフォームのラベル (rbT1.Caption と rbT2.Caption)、およびフォーム 1 のラジオ ボタンのキャプションと同じです。コードは次のとおりです。

sTeam1 := arrT1[Random(5)+1];
sTeam2 := arrT2[Random(5)+1];
frmUserInput.lblT1Pred.Caption := (sTeam1 + ' predicted score :');
frmUserInput.lblT2Pred.caption := (sTeam2 + ' predicted score :');
frmUserInput.rbTeam1.Caption := sTeam1;
frmUserInput.rbTeam2.Caption := sTeam2;
frmAdminInput.rbT1.Caption := sTeam1;
frmAdminInput.rbT2.Caption := sTeam2;

フォーム 1 は frmUserInput、フォーム 2 は frmAdminInput、フォーム 4 は frmWinners です。

したがって、私がやりたいことを修正するには、フォーム 4 のボタンをクリックして、フォーム 1 とフォーム 2 のラベルとラジオ ボタンのキャプションを変更します (このボタンはフォーム 4 を非表示にし、フォーム 1 を表示します)。

4

1 に答える 1

5

Unit1 で定義された Form1 という名前のグローバル変数があり、そのフォームに Label1 という名前のラベルがある場合、別のユニットから次のようにアクセスします。

  • 他のユニットの uses 句に Unit1 を追加します。
  • ラベルを Form1.Label1 として参照します。

循環参照を回避するには、他のユニットの実装セクションの uses 句に Unit1 を追加する必要がある場合があります。

とは言うものの、私はフォームがそのプライベートな部分ですべてを遊ばせるよりも、作業を行うためのパブリックな方法を提供することを好みます.

于 2013-10-26T10:20:52.523 に答える