Delphi: общение между фреймами - PullRequest
2 голосов
/ 18 июля 2011

Как общаться между кадрами и внутри кадра? Например: кадр 1 и кадр 2.

Рамка 2 находится в рамке 1. Чтобы вставить рамку 2 в рамку 1, я добавляю рамки из ToolPalette ->

type
  TFrame1 = class(TFrame)
  Frame22: TFrame2;

  var MyFrame1:TFrame1; // Now I can access to everything within a frame and from other frames too
implementation

Но у меня ошибка при попытке доступа к MyFrame1 и выполнения чего-то вроде MyFrame1.Button1.Enable в кадре 1 или из других кадров: «Исключительный класс EAccessViolation с сообщением« Нарушение прав доступа по адресу 0084858C в модуле «P1.exe» »

Как получить доступ к кадру 1 из кадра 2? MyFrame1-> Ошибка.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 18 июля 2011

Пожалуйста, удалите объявление глобальной переменной:

var MyFrame1: TFrame1;

Обычно это не имеет смысла для фреймов.

Можно типизировать дочерний фрейм от Owner до TFrame1, например:

implementation

uses
  FrameUnit1;

procedure TFrame2.Test;
begin
  if Owner is TFrame1 then
    ShowMessage(TFrame1(Owner).Name);
end;
0 голосов
/ 18 июля 2011

TOndrej упоминается с использованием владельца, но обычно это форма, а не Frame1. Родителем Frame2 должен быть Frame1, поэтому:

uses
  Frame1Unit;

procedure TFrame2.Test;
var
  C: TControl;
begin
  if Parent is TFrame1 then
    ShowMessage(TFrame1(Parent).Name)
  else 
    for C in Parent.Controls do
      if C is TFrame1 then
        ShowMessage(TFrame1(C).Name);
end; 

Обновлено Добавлен код для использования Parent.Controls для поиска TFrame1.

...