【问题标题】:XE5 TStringListXE5 TStringList
【发布时间】:2013-11-10 00:21:54
【问题描述】:

我正在使用 Delphi XE5 Professional 开发 Android App。应用程序正在我的装有 Android 4.1.2 的 Galaxy S3 手机上运行。我可能不明白,TStringList 是如何工作的。这是我正在尝试的方法

在我的 FireMonkey 移动表单中,我有 4 个 TEdit,名为:edt1、edt2、edt3、edt4

首先我创建列表:TStringList

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;    
begin
  List := TStringList.Create;
  for i := 1 to 4 do List.Add(IntToStr(i));
end;

具有明显的结构 [1 2 3 4]。然后我删除第二项:

procedure TForm1.btnDeleteItem;
begin
  List.BeginUpdate;
  List.Delete(1);
  List.EndUpdate;
end;

在此过程之后,List 具有结构 [1 3 4]。下一个过程会出现问题 - 这里我尝试将数据从 List 复制到我的编辑中,所以 edt1 包含 List[0],edt2 包含 List[1],......这是这样做的代码:

procedure TForm1.HandleEditButtons(Sender: TObject);
var i: Integer;
  aEdt: TEdit;
begin
  for i := 1 to 4 do 
  begin
    aEdt := FindComponent('edt'+IntToStr(i)) as TEdit;
    if (aEdt <> nil) then
      if (i <= List.Count) then aEdt.Text := List[i-1]
        else aEdt.Text := '';
  end; 
end;

在此过程之后,List 具有结构 [1 2 3],所以在我看来,当使用过程 btnDeleteItem 时,最后一项来自 List Deleted。我这里介绍的 List 的结构是通过在过程之间使用 Memo1.Lines.Add(List.Text) 得到的。

有人知道这里发生了什么吗?

【问题讨论】:

  • 请提供SSCCE 以重现问题。您显示的代码不会导致您描述的行为。

标签: android delphi delphi-xe5 tstringlist


【解决方案1】:

您显示的HandleEditButtons() 代码不可能像您声称的那样改变您的List。您未显示的代码中肯定有其他内容。

【讨论】:

  • 编程时不要喝啤酒:)。我对每个 TEdits 的 OnChange 事件都有愚蠢的程序 - 当编辑的某些内容发生变化时,List 被 TEdits 上的新数据覆盖。非常感谢。
猜你喜欢
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多