2015-08-06 2 views
-2

Интересно, как поймать строку списка и объект преобразования.Преобразование онлайн-объекта listview - Delphi

Я несу файл .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

Насколько я понимаю, ваш вопрос: вы получаете и элемент из списка и хотите редактировать его на dblclick, но в том же диалоговом окне. Вы хотите знать, как изменить текущий элемент. –

ответ

1

Многие способы редактирования объекта, в котором текущий объект может измениться в любой момент (например, с помощью двойного щелчка). Вот один из самых простых: сохранить, когда текущий объект изменяется и сохраняется в самом конце. Вот быстрое и грязное решение.

Добавить элемент в форму или глобальный в секции реализации FLastMensagem: TMensagem;

Может хочет, чтобы инициализировать до нуля на создание или инициализации (оставляется вам). Теперь в случае сохранения данных, когда 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; 

 Смежные вопросы

  • Нет связанных вопросов^_^