procedure TForm1.FormCreate(Sender: TObject);
var
str:string;
mapList: TStringList;
begin
mapList := TStringList.Create;
mapList.Values['name'] := '小李';
str:=mapList.Values['name'];
Button1.Tag := Integer(str);
end;procedure TForm1.Button1Click(Sender: TObject);
var
str: string;
begin
str := string(Button1.Tag);//这边出错了
ShowMessage(str);
end;
var
str:string;
mapList: TStringList;
begin
mapList := TStringList.Create;
mapList.Values['name'] := '小李';
str:=mapList.Values['name'];
Button1.Tag := Integer(str);
end;procedure TForm1.Button1Click(Sender: TObject);
var
str: string;
begin
str := string(Button1.Tag);//这边出错了
ShowMessage(str);
end;
Integer(Str)并不是说把Str“强制转化成”Integer,而是说取Str的地址;但是Str是一个局部变量,他所在的过程结束后便被释放,因此再用String(Button1.Tag)想转化时就非法了,因此不能这么操作。
最好是用一个字符串数组来保存每个Button所对应的的字符串值。
var
str: string;
begin
//str := string(Button1.Tag);//这边出错了 ,改成:
str := IntToStr(Button1.Tag);
ShowMessage(str);
end;
mapList.Values['name'] := '小李';
str:=mapList.Values['name'];
也就是说Str里存的不是数字,不能用IntToStr();
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm11 = class(TForm)
btn1: TButton;
btn2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
mapList: TStringList;
public
{ Public declarations }
end;var
Form11: TForm11;implementation{$R *.dfm}procedure TForm11.btn1Click(Sender: TObject);
begin
ShowMessage(mapList.ValueFromIndex[btn1.Tag]);
end;procedure TForm11.btn2Click(Sender: TObject);
begin
ShowMessage(mapList.ValueFromIndex[btn2.Tag]);
end;procedure TForm11.FormCreate(Sender: TObject);
var
str:string;
begin
mapList := TStringList.Create;
mapList.Values['name'] := '小李';
mapList.Values['age'] := '18';
btn1.Tag := mapList.IndexOfName('name');
btn2.Tag := mapList.IndexOfName('age');
end;procedure TForm11.FormDestroy(Sender: TObject);
begin
mapList.Free;
end;end.
但是为什么下面这样可以呢? 下面可以正常获取procedure TForm1.FormCreate(Sender: TObject);
var
str1:string;
begin
str1:='小李';
Button1.Tag := Integer(str1);
end;procedure TForm1.Button1Click(Sender: TObject);
var
str: string;
begin
str := string(Button1.Tag);
ShowMessage(str);
end;
var
str1:string;
begin
str1 :='小李';
Btn1.Tag := Integer(str1); pchar(str1)[1] := 'e'; //加这句测试end;