为什么这个语句不能放在自定义过程中?(50分)

  • 主题发起人 主题发起人 一个初学者
  • 开始时间 开始时间

一个初学者

Unregistered / Unconfirmed
GUEST, unregistred user!
我是一个delphi初学者,遇到一个莫名其妙的问题,希望有人能告诉我原因.
我编了如下结构的程序:
implementation

procedure numinput(a:string)
//这是我自定义的一个过程
begin

...... //这些部分和问题无关,所以省略了

textnum.caption:=numstring
//textnum是一个Label控件
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
numinput('1');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
numinput('2');
end;
当我选择运行时,系统提示[Error] Unit1.pas(84): Undeclared identifier: 'textnum'

但是如果我把程序改成如下形式就能正常运行
implementation

procedure numinput(a:string)

begin

...... //省略的部分和上次一样,仅仅把下一个语句去掉了


end;

procedure TForm1.Button1Click(Sender: TObject);
begin
numinput('1');
textnum.caption:=numstring
//这个语句移到这里来了
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
numinput('2');
textnum.caption:=numstring
//这里又输入了一次
end;

虽然这样做程序能正常运行了,但是明显代码不及原来的经济,但是原来那样不能运行
请问这是为什么?
 
>>这些部分和问题无关,所以省略了
我想看看着一部分
 
这样定义过程
procedure numinput(a:string;label:Tlable)
//自定义的一个过程
begin
label.caption:=numstring;
end
;
调用
procedure TForm1.Button1Click(Sender: TObject);
begin
numinput('1',textnum);
end;


 
省略的部分如下:
n1:=n2
//n1,n2,n均为variant类型
n2:=a;
numstring:=n1+n2
//numstring为string类型
n:=n1+n2+0;

另外,回答问题时请说明为什么我原来的程序不能运行的原因.谢谢!
 
原因很简单,你自定义的过程虽然写在了 Unit1.pas 中,但它并不属于Form1,所以
在你的自定义过程中就不能访问Form1中的资源了。
你应该这样写:

procedure numinput(a:string)
//此句写在 Form1的 private 或 public 中。 叫声明

implementation

procedure TForm1.numinput(a:string)
//这是我自定义的一个过程
begin
......
end;
 
很简单啊
textnum是form1里面定义的
你的函数是定义在form1外面
所以你那种访问方式是错的
应该是form1.textnum才能访问

button1是定义在form1里面的
所以不用form1就能访问
 
把过程这样写
procedure Tform1.numinput(a:string)
//这是我自定义的一个过程
begin
textnum.caption:=numstring
//textnum是一个Label控件
end;
你原先的过程不能辨别 textnum
 
多人接受答案了。
 
后退
顶部