delphi高手留步!变量不能被初始化是什么意思?
procedureTForm1.ComboBox1Click(Sender:TObject);varnum:integer;ch:string;str:TResource...
procedure TForm1.ComboBox1Click(Sender: TObject);
var
num:integer;
ch:string;
str:TResourceStream;
begin
ch:=inttostr(num+1);
if combobox1.Itemindex=num then
str:=TResourceStream.Create(HInstance,'st(ch)','text');
form1.combobox2.Items.LoadFromStream(str);
如此已能通过RUN编译,但点击其中一个功能时,出现:variable'num'might not have been initializaed.variable'str'might not have been initializaed.原因是什么?怎么解决?
去除两个变量“num”和“ch”。:var str:TResourceStream;
begin try
if combobox1.Itemindex=0 then
begin
str:=TResourceStream.Create(HInstance,'st1','text');
combobox2.Items.LoadFromStream(str);
end;
finally
str.Free ;可通过编译实现功能。若把Itemindex=0和st1改变对应的数目,每次也能通过。但每次都说str没被初始化。请高手指点!
----------------------------------------------------------------------------------
初始化问题解决。若把str:=...放于try前,出现错误消息:value assigned to 'str'never used.有QQ吗?MYQQ:729851670 MYE-MAIL:sghff110@163.com 展开
var
num:integer;
ch:string;
str:TResourceStream;
begin
ch:=inttostr(num+1);
if combobox1.Itemindex=num then
str:=TResourceStream.Create(HInstance,'st(ch)','text');
form1.combobox2.Items.LoadFromStream(str);
如此已能通过RUN编译,但点击其中一个功能时,出现:variable'num'might not have been initializaed.variable'str'might not have been initializaed.原因是什么?怎么解决?
去除两个变量“num”和“ch”。:var str:TResourceStream;
begin try
if combobox1.Itemindex=0 then
begin
str:=TResourceStream.Create(HInstance,'st1','text');
combobox2.Items.LoadFromStream(str);
end;
finally
str.Free ;可通过编译实现功能。若把Itemindex=0和st1改变对应的数目,每次也能通过。但每次都说str没被初始化。请高手指点!
----------------------------------------------------------------------------------
初始化问题解决。若把str:=...放于try前,出现错误消息:value assigned to 'str'never used.有QQ吗?MYQQ:729851670 MYE-MAIL:sghff110@163.com 展开
1个回答
展开全部
num 最早在哪里赋值的?
就你给出来的代码看,除此之外没发现什么地方不对,本来num也可以不用先赋值的,一样能编译通过。
==================================================
明白了,你的num没有初始值,后面条件判断的时候combobox1.Itemindex一定不等于num,导致str没有Create。
===============================================
补充:关于str的代码应该这样写更安全:
str := TResourceStream.Create(HInstance,'st(ch)','text');
try
if combobox1.Itemindex=num then
begin
combobox2.Items.LoadFromStream(str);
......
end;
finally
str.Free;
end;
还有,程序中永远不要用Form1.Combobox2之类的,即使要引用Form1本身,也应该使用Self来代替!
============================================
补充:这是说你的资源文件中没有找到'st(ch)'这个资源。
不知道你的代码的来源,估计你还有东西你没搞全,或交给你的人没给你,比如资源文件
============================================
再次补充:
str:=TResourceStream.Create(HInstance,'st1','text');
必须在try之前!
否则由于 if 条件判断,很可能str根本不创建,之后的使用和Free都会出错!
放到str之前就不会有错了。
就你给出来的代码看,除此之外没发现什么地方不对,本来num也可以不用先赋值的,一样能编译通过。
==================================================
明白了,你的num没有初始值,后面条件判断的时候combobox1.Itemindex一定不等于num,导致str没有Create。
===============================================
补充:关于str的代码应该这样写更安全:
str := TResourceStream.Create(HInstance,'st(ch)','text');
try
if combobox1.Itemindex=num then
begin
combobox2.Items.LoadFromStream(str);
......
end;
finally
str.Free;
end;
还有,程序中永远不要用Form1.Combobox2之类的,即使要引用Form1本身,也应该使用Self来代替!
============================================
补充:这是说你的资源文件中没有找到'st(ch)'这个资源。
不知道你的代码的来源,估计你还有东西你没搞全,或交给你的人没给你,比如资源文件
============================================
再次补充:
str:=TResourceStream.Create(HInstance,'st1','text');
必须在try之前!
否则由于 if 条件判断,很可能str根本不创建,之后的使用和Free都会出错!
放到str之前就不会有错了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询