0

フォームの配列にあるフォームのグローバル変数にアクセスしようとしています。これを使用してみました:

max_forms := 3

setlength(form_array, max_forms);

form_array[1] := frm1;
form_array[2] := frm2;

if current_form > 0 then
begin
  form_array[current_form].fNumber := Number;
  form_array[current_form].ShowModal;
end;

上記は明らかに機能しません。どんな助けでも大歓迎です。

4

2 に答える 2

2

fNumber問題は、プライベートアクセスがあることだと思います。

このフィールドの目的に応じて、1 つの解決策として、書き込みアクセスを取得するためのプロパティを作成することができます。

property Number: Integer read FNumber write FNumber;

次に、割り当てを行うことができます。

form_array[current_form].Number := Number;

グローバル変数について:

これが実際に問題でFNumberあり、あなたが話している「グローバル」変数である場合は、間違った言葉を使用しています. FNumberフィールドであり、フォームに属しています。フォーム メンバーはグローバルではありません。

フォームのソースを見てください。Delphi IDE によって生成された場合は、その下に変数宣言があります。

end; // End of TForm1

var
  Form1: TForm1;

implementation

Form1は実際のグローバル変数です。これは、ユニットのインターフェイスとクラスの外側に存在し、どこからでもアクセスできるため (一般的には良いことではありません)、FNumber最初にフォーム インスタンスにアクセスする必要があるためです。

PS: 何を達成しようとしているのか正確にはわかりませんがScreen.Forms、アクティブなフォームのリストを提供するものを見ることができるかもしれません。これは、カスタム リストよりも適している可能性があります。

于 2009-08-25T09:06:58.893 に答える
1

フォームの Tag プロパティを使用するようにコードを変更します...これは、整数値を格納するためのスクラッチ パッドです...またはオブジェクト (.tag := integer(MyObject)) および整数からのものを格納します...

max_forms := 3

setlength(form_array, max_forms);

form_array[1] := frm1;
form_array[2] := frm2;

if current_form > 0 then
begin
  form_array[current_form].Tag:= Number;
  form_array[current_form].ShowModal;
end;
于 2012-05-04T12:47:32.947 に答える