2013-12-23 84 views
0

在我的應用程序中的TStringList節省一些編輯值與下面的代碼:保存狀態的StringList

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狀態。 你能幫我嗎? 問候

+2

你有更大的問題。就像你沒有命名你的控件一樣。事實上,你不使用try/finally。您正在使用非結構化文件格式的事實。 –

+0

我必須保存單選按鈕的狀態,我的意思是如果選中或取消選中...也許有另一種簡單的方法來保存我的日期在外部文件? –

+5

使用ini文件或xml文件來保存狀態。 –

回答

0

製作的回答只是爲了顯示正確格式化形式的代碼示例

閱讀:

所以,你的代碼將成爲像

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; 

或者在VCL與基於風格(很多人不喜歡,他們不喜歡帕斯卡爾with語句)

const ini_def_sect = 'Default Section'; 

procedure TForm1.Button3Click(Sender: TObject); 
begin 
    SaveDialog1.Filter := 'GPP files (*.GPP)|*.GPP'; 
    if SaveDialog1.Execute then 
    begin 
     with TIniFile.Create(Savedialog1.Filename) do 
     try 
      WriteString(ini_def_sect, label7.Name, label7.Caption); 
      WriteString(ini_def_sect, label21.Name, label21.Caption); 
      WriteBool(ini_def_sect, radiobutton1.Name, radiobutton1.Checked); 
      UpdateFile; 
     finally 
      Destroy; 
     end; 
    end; 
end; 

而且你真的真的應該給你的變量(包括標籤,表單,單選按鈕等)合理的名稱,而你仍然可以記住一些有關這些都意味着什麼。相信我 - 一個月或兩個月,你會忘記。

PS:讀取結構文件就應該像這樣

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; 
+0

Destroy在這裏很好,但在析構函數中沒有好處。免費作品無處不在我早點教你一個新手打電話給Free。 –

+0

@DavidHeffernan我們不是在析構函數中。你沒有看到那些'如果分配(x)然後FreAndNil(x)'?新手應該學習*毀滅/自由/ FAN的存在和區別,而不是僅僅爲所有情況學習一種工具(在這種情況下,它應該是FAN--因爲它具有最多的功能) –

+0

我想你不明白我的觀點。我注意到,這不是一個破壞者。 –