请各位朋友看看我的代码哪里错了, 我在Myini.ini文件里保存的东西不见了!(5分)

L

lah998

Unregistered / Unconfirmed
GUEST, unregistred user!
请各位朋友看看我的代码哪里错了, 我在Myini.ini文件里保存的东西不见了!
步骤是这样的:1.在Edit1里写一些东西. 2.单击CheckBox1(保存Edit1里的东西),然后关闭窗体。
3.再次打开窗体,发现保存的东西不见了!
procedure TForm1.OnCreate(Sender: TObject);
var
Myini:TINIFile;
begin
Myini:=TINIFile.Create('Myini.ini');
CheckBox1.Checked:=Myini.ReadBool('保存密码','Checked1',false);
Myini.Free ;;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
var
Myini:TINIFile;
Mymima:string;
begin
if CheckBox1.Checked then
begin
Myini:=TINIFile.Create('Myini.ini');
Myini.WriteBool('保存密码','Checked1',True);
Myini.WriteString('保存密码','Mymima',Edit1.Text );
end
else
begin
Myini:=TINIFile.Create('Myini.ini');
Myini.WriteBool('保存密码','Checked1',False);
Myini.WriteString('保存密码','Mymima','0');
end;
Myini.Free ;
end;
 
你的ini文件是放在在哪里的?
 
zw84611,:c:/windows/Myini.ini
 
Myini.ini文件在,是保存的字符串不见了
 
>>再次打开窗体,发现保存的东西不见了!
怎么知道的?有没有打开ini文件看一下?

 
zw84611,:当然打开看了!
 
富翁们我全部家当只有5分了!
 
1.你的系统目录是否是c:/windows/?
2.是什么没了?ini文件是空的?
 
zw84611,:你理解错了具体说吧:

保存好的是这样的:
[保存密码]
checked1=1
Mymima=1234567

再次打开就是这样的了:
[保存密码]
checked1=1
Mymima=


 
注意你在FormCreate中
CheckBox1.Checked:=Myini.ReadBool('保存密码','Checked1',false)
这一句实际上触发了TForm1.CheckBox1Click
不信你在CheckBox1Click中加一个ShowMessage看一下。
你最好把原先TForm1.CheckBox1Click中保存ini的内容放在FormClose中。
 
zw84611,:事实上我知道是因为触发了TForm1.CheckBox1Click
但为什么会触发呢?
如何解决呢?
 
TForm1.CheckBox1Click中保存ini的内容放在FormClose中
 
我试了一样的不行!
 
不可能。注意你close之前先看一下CheckBox的状态和Edit中的内容。
 
zw84611,:当然可能!我试了几遍了啊
打开就清空了原来保存的字符串!
 
哈,你的Edit中的Text初始值为空字符串,而你的CheckBox每次都是打勾的,自然把
空字符串保存为Mymima的内容了!!!
 
zw84611,:那如何做不清空原来保存的字符串呢?
 
唉,自己想一下呀。
打勾或保存前可以先判断一下Edit中的内容,确保不为空(tirm(Edit1.text)<>'')。
 
利用一个全局变量 onCreatting : Boolean ;
不会在窗体的onCreate 事件 中前后加上
onCreatting := true

:
:
onCreatting := false ;
;

在onClick中 添加
if not onCreatting then
begin

end;
 
你跟踪一下就会发现原因了。
Form1的OnCreate中执行
CheckBox1.Checked:=Myini.ReadBool('保存密码','Checked1',false);时
实际上触发了CheckBox1的OnClick时间,所以……
 
顶部