我正在尝试使用另一个单元的表单,但是代码无法识别另一个单元。

例:

     unit uImpressao;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics,
      Controls, Forms, Dialogs, uniGUITypes, uniGUIAbstractClasses,
      uniGUIClasses, uniGUIForm, uniGUIBaseClasses, uniPanel, uniURLFrame;

    type
      TfImpressao = class(TUniForm)
        ufRelatorio: TUniURLFrame;
        UniImage1: TUniImage;
        procedure UniImage1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    implementation

    {$R *.dfm}

    uses
      MainModule, Main, uBancoHoras;

procedure TfImpressao.UniImage1Click(Sender: TObject);
begin
  fBh.iTeste.Visible := false;
end;

end.




    unit uBancoHoras;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, uniGUITypes, uniGUIAbstractClasses,
  uniGUIClasses, uniGUIForm, uniLabel, pngimage, uniImage, uniGUIBaseClasses,
  uniPanel, uniPageControl, uniButton, uniBitBtn, uniSpeedButton, uniCanvas,
  uniDateTimePicker, uniMemo, uniMultiItem, uniComboBox, uniEdit, uniBasicGrid,
  uniDBGrid, uniDBMemo, uniRadioButton, uniDBText, uniRadioGroup, frxClass,
  frxDBSet;

type
  TfBH = class(TUniForm)
    iTeste : TUniImage;
  private
    { Private declarations }
  public
    { Public declarations }

  end;

var
  url: string;

function fBH: TfBH;

implementation

{$R *.dfm}

uses
  MainModule, Main, uImpressao;

function fBH: TfBH;
begin
  Result := TfBH(MM.GetFormInstance(TfBH));
end;

procedure TfBH.iTesteClick(Sender: TObject);
begin
    fImpressao.ShowModal;
end;




当我尝试在uBancohoras单元中使用uImpressao单元时,返回错误“未声明的标识符'fImpressao'”。
在uImpressao单元中使用uBancoHoras单元,效果很好。

我不明白为什么一个单元发生此错误,而另一单元却没有。

我希望你能帮帮我!

最佳答案

uBancoHoras中,您已定义

function fBH: TfBH;

...
implementation
...

function fBH: TfBH;
begin
  Result := TfBH(MM.GetFormInstance(TfBH));
end;


因此,您已经定义了一个名为fBH的全局函数,该函数似乎是通过某种工厂方法(可能在TfBH中定义的)返回了MainModule表单类的实例。

uImpressao中没有名称为fImpressao的相应方法或变量,但是-编译器错误fImpressao是未声明的标识符。

假定MM.GetFormInstance适合该任务,并假设您希望保留此设计模式,则必须定义(在uImpressao中):

function fImpressao: TfImpressao;

...
implementation
...

function fImpressao : TfImpressao;
begin
  Result := TfImpressao(MM.GetFormInstance(TfImpressao));
end;


但是,我们看不到MM.GetFormInstance的实现细节,因此不能保证它会起作用-它仅遵循fBH设置的模式。与Ken达成协议,您也许应该考虑一种更好的方式来管理表格。诉诸于跨单元遍历的全局变量或全局方法来挖掘一个类实例感觉就像是在等待着头疼...

关于delphi - 错误:使用另一个单元的表单“未声明的标识符”-Delphi 2010,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28150774/

10-09 15:45
查看更多