Delphi 将radiobutton的状态保存到stringlist
在我的应用程序中,我将一些编辑值保存在Tstringlist中,代码如下:Delphi 将radiobutton的状态保存到stringlist,delphi,lazarus,Delphi,Lazarus,在我的应用程序中,我将一些编辑值保存在Tstringlist中,代码如下: procedure TForm1.Button3Click(Sender: TObject); var F: TStringList; begin SaveDialog1.Filter := 'GPP files (*.GPP)|*.GPP'; if SaveDialog1.Execute then begin F := TStringList.Create;
procedure TForm1.Button3Click(Sender: TObject);
var
F: TStringList;
begin
SaveDialog1.Filter := 'GPP files (*.GPP)|*.GPP';
if SaveDialog1.Execute then
begin
F := TStringList.Create;
with F do
begin
Add(label7.Caption);
Add(label21.Caption);
SaveToFile(Savedialog1.Filename);
Free;
end;
end;
end;
我想在这个Tstringlist中保存Tradiobutton状态。
你能帮助我吗?
仅为以正确格式显示代码示例而回答 全文如下:
pattern-try/finally
类和TIniFile
布尔值--
const ini_def_sect = 'Default Section';
procedure TForm1.Button3Click(Sender: TObject);
var
F: TCustomIniFile;
begin
SaveDialog1.Filter := 'GPP files (*.GPP)|*.GPP';
if SaveDialog1.Execute then
begin
F := TIniFile.Create(SaveDialog1.Filename);
try
F.WriteString(ini_def_sect, label7.Name, label7.Caption);
F.WriteString(ini_def_sect, label21.Name, label21.Caption);
F.WriteBool(ini_def_sect, radiobutton1.Name, radiobutton1.Checked);
F.UpdateFile;
finally
F.Destroy;
end;
end;
end;
procedure TMainForm.btnOpenClick(Sender: TObject);
begin
OpenDialog1.Filter := 'GPP files (*.GPP)|*.GPP';
if OpenDialog1.Execute then
begin
with TIniFile.Create(OpenDialog1.Filename) do
try
label7.Caption := ReadString(ini_def_sect, label7.Name, '');
label21.Caption := ReadString(ini_def_sect, label21.Name, '');
radiobutton1.Checked := ReadBool(ini_def_sect, radiobutton1.Name, False);
finally
Destroy;
end;
end;
end;
或者使用基于风格的VCL(这是许多人不喜欢的,因为他们不喜欢使用Pascal中的语句)
你真的应该给你的变量(包括标签、表单、单选按钮等)合理的名称,同时你还可以记住它们各自的含义。相信我,一两个月你就会忘记
PS:读取结构化文件可能类似于
const ini_def_sect = 'Default Section';
procedure TForm1.Button3Click(Sender: TObject);
var
F: TCustomIniFile;
begin
SaveDialog1.Filter := 'GPP files (*.GPP)|*.GPP';
if SaveDialog1.Execute then
begin
F := TIniFile.Create(SaveDialog1.Filename);
try
F.WriteString(ini_def_sect, label7.Name, label7.Caption);
F.WriteString(ini_def_sect, label21.Name, label21.Caption);
F.WriteBool(ini_def_sect, radiobutton1.Name, radiobutton1.Checked);
F.UpdateFile;
finally
F.Destroy;
end;
end;
end;
procedure TMainForm.btnOpenClick(Sender: TObject);
begin
OpenDialog1.Filter := 'GPP files (*.GPP)|*.GPP';
if OpenDialog1.Execute then
begin
with TIniFile.Create(OpenDialog1.Filename) do
try
label7.Caption := ReadString(ini_def_sect, label7.Name, '');
label21.Caption := ReadString(ini_def_sect, label21.Name, '');
radiobutton1.Checked := ReadBool(ini_def_sect, radiobutton1.Name, False);
finally
Destroy;
end;
end;
end;
你有更大的问题。就像你没有命名你的控件一样。事实上,您没有使用try/finally。事实上,您使用的是非结构化文件格式。我必须保存radiobutton的状态,我的意思是,如果选中或未选中…也许还有另一种简单的方法可以将我的日期保存在外部文件中?使用ini文件或xml文件保存状态。或JSON或YAML。非结构化.File对话框以外的任何对话框都不会打开或保存文件。它们允许您选择文件名。没别的了。如何处理这些文件名完全取决于您。我强烈要求你们后退一步,改进基础。你必须开始给事物命名。如果您有一个名为Label21
的控件,您如何期望成功。在对象检查器中,选择每个控件,并通过设置Name
属性为它们命名。在这里Destroy可以,但在析构函数中则不行。免费工作无处不在。“我宁愿你教一个新手打免费电话。”戴维弗南说,“不过我们不在析构函数里。”。你没有看到那些如果赋值(x)那么FreAndNil(x)
?新手应该学习Destroy/Free/FAN之间的存在和区别,而不仅仅是学习一种适用于所有情况的工具(在这种情况下,它应该是FAN,因为它具有最多的功能)。我想你不明白我的意思。我注意到这不是一个析构函数。@DavidHeffernan你写道“我宁愿你教一个新手打免费电话”,也许你对答案投了反对票。我回答了那一点。我不会教新手无意识地到处使用Free
或FreeAndNil
,我宁愿展示这两种东西,并希望新手好奇地搜索/询问与我的反对票有什么不同。我宁愿你用免费的。因为提问者很可能会使用Destroy,而不知道任何更好的方法。