【发布时间】:2014-01-04 01:27:45
【问题描述】:
我有一个程序需要从 ini 文件中读取数据,格式如下:'Prices', [integer], [data to be read]
读取的数据包含由'/' 符号分割的两条信息。当我在下面调用我的过程时,数据已成功拆分。
我在表单上放置了一个TValueListEditor(称为ledtPrices),并希望将ini 文件中的值添加到列表编辑器中。如果我通过单击按钮调用ledtPrices.InsertRow,则会添加我输入以添加到行的值并刷新列表编辑器。
但是,当我从RefreshPList 过程中调用相同的函数时,这些值不会作为新行添加(列表编辑器为空白)。我已经用ShowMessage 对话测试了我的代码,以确保程序的每个部分都在应该运行的时候运行。我的代码如下:
procedure RefreshPList;
var
l: TValueListEditor;
xFile: TINIFile;
temprow, tl, tp: string;
tempr: TStringList;
i: integer;
begin
i := 0;
l := frmSettings.ledtPrices;
try
tempr := TStringList.Create;
tempr.StrictDelimiter := True;
tempr.Delimiter := '/';
xFile := TIniFIle.Create('C:\MData.ini');
try
temprow := xFile.ReadString('Prices', '0', 'xx');
if temprow = 'xx' then
ShowMessage('no prices saved')
else
begin
repeat
temprow := xFile.ReadString('Prices', IntToStr(i), 'xx');
if temprow <> 'xx' then
begin
tempr.DelimitedText := temprow;
tl := tempr[0];
tp := tempr[1];
l.InsertRow(tl,tp,true);
//ShowMessage(tl);
Inc(i);
end
else
ShowMessage('End of list');
until (temprow = 'xx');
//l.Refresh;
end;
finally
xFile.Free;
end;
LastLine := i;
finally
tempr.Free;
end;
end;
LastLine 是一个稍后使用的全局整数值。我正在尝试在列表编辑器中添加、删除和编辑数据,而不直接编辑单元格。将新数据添加到 ini 文件的过程已编写并成功运行。
更新
我开始意识到,我创建的任何试图编辑组件值的过程都不会编辑组件值。我在这里错过了一些简单的东西吗?
例如,我在表单上创建了一个备忘录,并创建了一个将数组的内容添加到 memo.lines 的过程。从按钮单击调用此过程时未执行。但是,如果我将过程的内容直接复制到 buttonclick 中并执行它,它就可以工作。
这些过程是从按钮单击命令中调用的。该窗体是从主窗体创建的。这些组件都位于一个页面控件标签页中。
【问题讨论】:
-
如果
tl和tp都是空字符串(如果temprow只是分隔符/可能会发生这种情况),则不会添加该行。换句话说,如果您调用ValueListEditor.InsertRow('', '', True),则不会添加任何行。现在是学习如何使用调试器的时候了,因为恐怕我们无法在不了解更多信息的情况下为您跟踪它... -
还有如何使用代码格式化程序:-)
-
@JerryDodge 总是有学习的空间。
-
@TLama 我知道如何使用调试器,但我使用 showmessage 检查
tl和tp是否保持应有的值;他们做到了。因此, insertrow() 不会为空。对吗? -
@Babah254 试试看,它会将您的代码格式化为最常见的标准,这样您就可以了解如何使您的代码在逻辑上保持可读性 - 转到编辑 > 格式化源代码(如果您的 Delphi 版本支持它)或者
CTRL + D