为什么编译器会为表单的字段说“未声明的标识符”?

时间:2012-06-15 01:03:07

标签: delphi

此代码给出了一条错误消息: [错误] Unit1.pas(52):未声明的标识符:'Edit1'

procedure SetTCPIPDNSAddresses(sIPs : String);
begin
  SaveStringToRegistry_LOCAL_MACHINE(
    'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' + Edit1.text,
    'NameServer', sIPs);
end;

为什么我会收到此错误,如何解决?

2 个答案:

答案 0 :(得分:7)

您的代码不是表单的方法,因此无法访问Edit1

使其成为表单方法:

type
  TForm1=class(TForm)
  ...
  private
    procedure SetTCPIPDNSAddresses(sIPs : String);
  ...
  end;

implementation

procedure TForm1.SetTCPIPDNSAddresses(sIPs : String);
 begin
   ...
 end;

或者将其更改为接受Edit1.Text的内容作为另一个参数:

procedure SetTCPIPDNSAddresses(sIPs : String; RegName: String);
begin
  SaveStringToRegistry_LOCAL_MACHINE(
    'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' + 
     RegName, 'NameServer', sIPs);
end;

并称之为:

SetTCPIPDNSAddresses(sTheIPs, Edit1.Text);

答案 1 :(得分:0)

如果您无法使用Ken White为您提供的解决方案,例如,如果您不允许更改SetTCPIPDNSAddresses()的签名,则另一个选项是通过全局指针访问TEdit它的父TForm(如果你的TForm实例实际上正在使用该指针,那就是),例如:

procedure SetTCPIPDNSAddresses(sIPs : String); 
begin 
  SaveStringToRegistry_LOCAL_MACHINE( 
    'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' + Form1.Edit1.Text, 
    'NameServer', sIPs); 
end;