这个程序是在编辑窗口中输入链表结点的数据,button1显示连表内容,button2删除指定的节点,但在运行时怎么输入一个字符串,不能用button1显示出来,然后它就提示出错,程序如下:
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm2 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Edit1Change(Sender: TObject;var key:Char);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
plink=^node;
node=record
data:string[30];
next:plink;
end;
var
Form2: TForm2;
DtRec:Plink;
implementation{$R *.dfm}procedure TForm2.FormCreate(Sender: TObject);
begin
DtRec:=nil;
end;
procedure TForm2.Edit1Change(Sender: TObject;var key:Char);
var
Ptemp,P:Plink;
begin
if key=#13 then
begin
new(Ptemp);
Ptemp^.data:=Edit1.Text;
Ptemp^.next:=nil;
if DtRec=nil
then begin
new(Dtrec);
DtRec:=Ptemp;
end
else begin
P:=DtRec;
while p.next<>nil do
p:=p^.next;
p^.next:=Ptemp;
end;
Edit1.Clear;
Edit1.SetFocus;
end;end;
procedure TForm2.Button2Click(Sender: TObject);
var
P,P1:Plink;
i:integer;
begin
i:=0;
P:=DtRec;
if p=nil
then showmessage('连表为空表!')
else
if P^.data=Edit1.Text
then begin
DtRec:=P^.next;
P^.next:=nil;
P:=DtRec;
end
else begin
P1:=P^.next;
repeat
if P^.data=Edit1.Text
then begin
P^.next:=P1^.next;
P1:=p;
i:=i+1;
end
else begin
P:=P1;
P1:=P1^.next;
end;
until P1=nil;
if i=0 then
showmessage('连表中无此数据!');
end;end;
procedure TForm2.Button1Click(Sender: TObject);
var
P:Plink;
begin
ListBox1.Clear;
P:=DtRec;
repeat
ListBox1.Items.Add(P^.data);
P:=P^.next;
until P=nil;
end;
end.
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm2 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Edit1Change(Sender: TObject;var key:Char);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
plink=^node;
node=record
data:string[30];
next:plink;
end;
var
Form2: TForm2;
DtRec:Plink;
implementation{$R *.dfm}procedure TForm2.FormCreate(Sender: TObject);
begin
DtRec:=nil;
end;
procedure TForm2.Edit1Change(Sender: TObject;var key:Char);
var
Ptemp,P:Plink;
begin
if key=#13 then
begin
new(Ptemp);
Ptemp^.data:=Edit1.Text;
Ptemp^.next:=nil;
if DtRec=nil
then begin
new(Dtrec);
DtRec:=Ptemp;
end
else begin
P:=DtRec;
while p.next<>nil do
p:=p^.next;
p^.next:=Ptemp;
end;
Edit1.Clear;
Edit1.SetFocus;
end;end;
procedure TForm2.Button2Click(Sender: TObject);
var
P,P1:Plink;
i:integer;
begin
i:=0;
P:=DtRec;
if p=nil
then showmessage('连表为空表!')
else
if P^.data=Edit1.Text
then begin
DtRec:=P^.next;
P^.next:=nil;
P:=DtRec;
end
else begin
P1:=P^.next;
repeat
if P^.data=Edit1.Text
then begin
P^.next:=P1^.next;
P1:=p;
i:=i+1;
end
else begin
P:=P1;
P1:=P1^.next;
end;
until P1=nil;
if i=0 then
showmessage('连表中无此数据!');
end;end;
procedure TForm2.Button1Click(Sender: TObject);
var
P:Plink;
begin
ListBox1.Clear;
P:=DtRec;
repeat
ListBox1.Items.Add(P^.data);
P:=P^.next;
until P=nil;
end;
end.
data:string[30];
next:plink;
end;data: string[30]; -> data: array[0..30] of char;
the editchange method referenced by Edit1.OnChange has an incompatible parameter list.