Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 将radiobutton的状态保存到stringlist_Delphi_Lazarus - Fatal编程技术网

Delphi 将radiobutton的状态保存到stringlist

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;

在我的应用程序中,我将一些编辑值保存在Tstringlist中,代码如下:

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状态。 你能帮助我吗?
仅为以正确格式显示代码示例而回答

全文如下:

  • try/finally
    pattern-
  • 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,而不知道任何更好的方法。