У вас есть одна переменная profileFrame
, которую вы переназначаете каждый раз при вызове AddNewTab()
. В bSaveClick()
вы используете ту же переменную в al oop, поэтому, конечно, каждая строка, добавленная к TStringList
, будет иметь одни и те же данные. Потому что у вас нет доступа к отдельным TProfileFrame
объектам, которые вы создали ранее. Вы получаете доступ только к последнему TProfileFrame
, созданному вами.
Поскольку каждый объект TProfileFrame
является дочерним по отношению к TTabItem
, вы можете попробовать следующее:
procedure TForm1.bSaveClick(Sender: TObject);
var
strList: TStringList;
i:integer;
TabItem: TTabItem;
profileFrame: TProfileFrame;
begin
strList := TStringList.Create;
try
for i := 0 to TabControl1.TabCount - 1 do
begin
TabItem := TabControl1.Tabs[i];
profileFrame := TabItem.Children[0] as TProfileFrame;
strList.Add('PlanName,SavingAccount,InitialCapital,TopUp,Every,RemindOn,CashOutBy,Percentage,TotalInitialCapital');
strList.Add(profileFrame.plan_title.Text +','
+ profileFrame.savingAccount_edit.Text +','
+ profileFrame.initialCapital_edit.Text +','
+ profileFrame.topUp_edit.Text +','
+ profileFrame.every_comboBox.Selected.Text +','
+ profileFrame.remindOn_comboBox.Selected.Text +','
+ profileFrame.cashOutBy_comboBox.Selected.Text +','
+ profileFrame.percentage_edit.Text +','
+ profileFrame.initialCapital_edit.Text);
end;
strList.SaveToFile(TPath.Combine(TPath.GetDocumentsPath, 'mydbtxt.txt');
finally
strList.Free;
end;
end;
procedure TForm1.AddNewTab;
var
TTabItem: TTabItem;
profileFrame: TProfileFrame;
begin
profileFrame := TProfileFrame.Create(Self);
//TabItem
TabItem := TabControl1.Add();
inc(tab_name_Count);
tabItem.Text := tab_name_Count.ToString;
//
profileFrame.Parent := tabItem;
end;
При этом нет необходимости дублировать имена столбцов для каждой записи, которая добавляется к TStringList
. Это просто загрязнит текстовый файл и затруднит его чтение. Попробуйте вместо этого:
procedure TForm1.bSaveClick(Sender: TObject);
var
strList: TStringList;
i:integer;
TabItem: TTabItem;
profileFrame: TProfileFrame;
begin
strList := TStringList.Create;
try
strList.Add('PlanName,SavingAccount,InitialCapital,TopUp,Every,RemindOn,CashOutBy,Percentage,TotalInitialCapital');
for i := 0 to TabControl1.TabCount - 1 do
begin
TabItem := TabControl1.Tabs[i];
profileFrame := TabItem.Children[0] as TProfileFrame;
strList.Add(profileFrame.plan_title.Text +','
+ profileFrame.savingAccount_edit.Text +','
+ profileFrame.initialCapital_edit.Text +','
+ profileFrame.topUp_edit.Text +','
+ profileFrame.every_comboBox.Selected.Text +','
+ profileFrame.remindOn_comboBox.Selected.Text +','
+ profileFrame.cashOutBy_comboBox.Selected.Text +','
+ profileFrame.percentage_edit.Text +','
+ profileFrame.initialCapital_edit.Text);
end;
strList.SaveToFile(TPath.Combine(TPath.GetDocumentsPath, 'mydbtxt.txt');
finally
strList.Free;
end;
end;
Тогда файл будет выглядеть примерно так:
образ