转换在线listview对象 - Delphi

时间:2015-08-06 20:17:47

标签: delphi listview delphi-xe5

我想知道如何抓住一行listview并转换对象。

我携带.xml文件并在列表视图中播放,加载此文件后,您需要双击一行,获取所有数据行并输入LabelEdit,如下面的代码所示。

procedure TForm1.LstbxDadosDblClick(Sender: TObject);
begin
if Assigned(TMensagem(LstbxDados.Items.Objects[LstbxDados.ItemIndex])) then
begin
  with TMensagem(LstbxDados.Items.Objects[LstbxDados.ItemIndex]) do
  begin
  EdtPara.Text      := Para;
  EdtDe.Text        := De;
  EdtCabecalho.Text := Cabecalho;
  EdtCorpo.Text     := Corpo;
  end;
end;
end;

  TMensagem = class
  private
    FCorpo: String;
    FCabecalho: String;
    FPara: String;
    FDe: String;
  public
    property Para : String read FPara write FPara;
    property De : String read FDe write FDe;
    property Cabecalho: String read FCabecalho write FCabecalho;
    property Corpo : String read FCorpo write FCorpo;
  end;

1 个答案:

答案 0 :(得分:1)

编辑当前对象可以随时更改的对象的许多方法(例如双击)。这是最简单的方法之一:保存当前对象更改并保存到最后。这是一个快速而肮脏的解决方案。

在表单中添加成员或在实现部分中添加全局成员 FLastMensagem: TMensagem;

可能想要在创建或初始化时初始化为nil(留给您)。现在,在TMensagem对象更改

时保存数据
procedure TForm1.LstbxDadosDblClick(Sender: TObject);
var
  LNewMensagem: TMensagem;
begin
  LNewMensagem := TMensagem(LstbxDados.Items.Objects[LstbxDados.ItemIndex]));    
  if Assigned(LNewMensagem) then
  begin
    // When we switch, capture the dialog before updating it      
    if Assigned(FMensagem) and (LNewMensagem <> FLastMensagem) then
    begin
      FLastMensagem.Para := EdtPara.Text;
      FLastMensagem.De := EdtDe.Text;
      FLastMensagem.Cabecalho := EdtCabecalho.Text;
      FLastMensagem.Corpo := EdtCorpo.Text;
    end;

    EdtPara.Text      := LNewMensagem.Para;
    EdtDe.Text        := LNewMensagem.De;
    EdtCabecalho.Text := LNewMensagem.Cabecalho;
    EdtCorpo.Text     := LNewMensagem.Corpo;

    //Set the last dblclicked
    FLastMensagem := LNewMensagem
 end;
end;

当然最后一次编辑需要保存,你可以说关闭一个表格(不确定你的完整设计是什么)。例如

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(FLastMensagem) then
  begin
    FLastMensagem.Para := EdtPara.Text;
    FLastMensagem.De := EdtDe.Text;
    FLastMensagem.Cabecalho := EdtCabecalho.Text;
    FLastMensagem.Corpo := EdtCorpo.Text;
  end;

end;