присвоение значения глобальной переменной (Delphi) - PullRequest
0 голосов
/ 25 августа 2009

Я пытаюсь получить доступ к глобальной переменной в форме, которая находится в массиве форм, я пытался использовать это:

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;

Выше не работает, очевидно. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 25 августа 2009

Я думаю, проблема в том, что fNumber имеет частный доступ.

В зависимости от назначения этого поля, одним из решений может быть создание свойства для получения доступа на запись:

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, который предоставляет список активных форм. Это может быть лучше, чем пользовательский список.

1 голос
/ 04 мая 2012

Измените свой код, чтобы использовать свойство 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;
...