我定义了这样一个窗体(部分省略);
unit unitChannel;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms;
type
TAnalysis = class
private
FPeakData: array [0..1] of string;
public
procedure CalcPeak;
end; TFormChannel = class(TForm)
Label15: TLabel;
private
end;var
FormChannel: TFormChannel;implementation{$R *.DFM}我想在TAnalysis的过程CalcPeak中访问FormChannel的Label15.caption,
但总是报错,为什么?
如下:
procedure TAnalysis.CalcPeak;
begin
FPeakData[1]:=FormChannel.Label15.caption;
end;不同的类之间要怎样才能访问呢?先谢谢了
unit unitChannel;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms;
type
TAnalysis = class
private
FPeakData: array [0..1] of string;
public
procedure CalcPeak;
end; TFormChannel = class(TForm)
Label15: TLabel;
private
end;var
FormChannel: TFormChannel;implementation{$R *.DFM}我想在TAnalysis的过程CalcPeak中访问FormChannel的Label15.caption,
但总是报错,为什么?
如下:
procedure TAnalysis.CalcPeak;
begin
FPeakData[1]:=FormChannel.Label15.caption;
end;不同的类之间要怎样才能访问呢?先谢谢了
然后在另外的一个窗体上引用这个窗体alt+f11就可以了
但是推荐你把FormChannel.Label15.caption保存到这个窗体的一个变量上 然后引用变量可能
更好一些
unit unitChannel;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms;
type
TFormChannel = class;//////////////ADD
TAnalysis = class
private
FPeakData: array [0..1] of string;
public
procedure CalcPeak(FChannel: TFormChannel);// ADD Param
end; TFormChannel = class(TForm)
Label15: TLabel;
private
end;var
FormChannel: TFormChannel;implementation{$R *.DFM}
procedure TAnalysis.CalcPeak(FChannel: TFormChannel);
begin
FPeakData[1]:=FChannel.Label15.caption;/// Modify
end;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TFormChannel = class;
TAnalysis = class
private
FPeakData: array [0..1] of string;
public
procedure CalcPeak(FChannel: TFormChannel);
end; TFormChannel = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
FAnalysis: TAnalysis;
end;var
FormChannel: TFormChannel;implementation{$R *.DFM}procedure TAnalysis.CalcPeak(FChannel: TFormChannel);
begin
FPeakData[1]:=FChannel.Label1.caption; ///这句报错
end;procedure TFormChannel.Button1Click(Sender: TObject);
begin
FAnalysis.CalcPeak(FormChannel);//新增加的
end;end.
TAnalysis = class
private
FPeakData: array [0..1] of string;
public
procedure CalcPeak(FChannel: TFormChannel);
end;
放后到TFormChannel... end;后面,var的前面。原因:按你的定义,TFormChannel是个没有任何功能的、从基类class集成过来的类,哪里能用什么label1啊!
另外,如果 FormChannel 不是自动创建的,也不是主窗体,则也要 Create
在 FormChannel 的OnCreate 事件中,FAnalysis:=TAnalysis.Create;
FAnalysis和FormChannel都已经Create了,
我在这里省略而已。按照dowsun()的做法:把TAnalysis类的定义放到
TFormChannel的后面。
但是,这样做的话,如果在TFormChannel类中引用
TAnalysis,又无法找到,例如:
type
TFormChannel = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
FAnalysis: TAnalysis;////这里找不到TAnalysis类
end; TAnalysis = class
private
FPeakData: array [0..1] of string;
public
procedure CalcPeak(FChannel: TFormChannel);
end;var
FormChannel: TFormChannel;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
MyClass = class
private
FString:string;
public
procedure GetCatpion();
end;
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
MyClass1:MyClass;
begin
Form1:=TForm1.Create(Application);
MyClass1:=Myclass.Create;
MyClass1.GetCatpion;
showmessage(Myclass1.FString);
end;{ MyClass }procedure MyClass.GetCatpion;
begin
FString:=Form1.Label1.Caption;
end;end.