присвоение значения глобальной переменной (Delphi)

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

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;

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


person Community    schedule 25.08.2009    source источник
comment
Из этого фрагмента не ясно, что именно не работает. Вы получаете ошибку компиляции? или вылетает при запуске? Не могли бы вы объяснить, для чего нужны некоторые переменные и как они определены?   -  person Mark Pim    schedule 25.08.2009
comment
Вам также, вероятно, следует проверить это current_form < max_forms, чтобы предотвратить проблему проверки границ массива.   -  person Mark Pim    schedule 25.08.2009
comment
Привет. Извините, чтобы немного расширить, у меня есть глобальная переменная во всех подчиненных формах с именем FNumber, которую мне нужно выполнить из основной формы. Номер подчиненной формы зависит от значения, которое хранится в базе данных. Я не запускал код, но я знаю, что это неправильно просто потому, что FNumber не отображается в раскрывающемся списке после form_array[current_form].   -  person    schedule 25.08.2009
comment
Ах хорошо. В этом случае ответ DR должен делать то, что вы хотите   -  person Mark Pim    schedule 25.08.2009


Ответы (2)


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

person Daniel Rikowski    schedule 25.08.2009
comment
Итак, я действительно не использовал свойство раньше (я знаю, я все еще новичок), есть идеи, на каком устройстве я должен его настроить? - person ; 25.08.2009
comment
Он должен быть в том же классе, что и поле, к которому вы обращаетесь, в вашем случае в форме и в общедоступной части. - person Daniel Rikowski; 25.08.2009
comment
Объяснение ключевого слова свойства: delphibasics.co.uk/RTL.asp?Name= Свойство - person Daniel Rikowski; 25.08.2009

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