Dicas - Editando itens do ListBox

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (3)  (0)

Veja nesta dica, como implementar a funcionalidade de edição de itens do ListBox.

Editando itens do ListBox

 

O ListBox foi projetado para apresentar uma coleção de itens (strings) em forma de lista. Itens de um ListBox não podem ser editados diretamente de “dentro” do ListBox. Caso você precise dessa funcionalidade, esta é uma dica de como inserir um Edit dentro de um ListBox.

Resumidamente, dinamicamente criamos um Edit chamado “ListEdit” no evento OnCreate do formulário. ListBox1 é configurado para ser o Parent do ListEdit (no construtor do Edit foi passado o formulário, “Self”, como sendo o Owner).

Em seguida, no evento OnClick do ListBox1 (quando um item é selecionado) posicionamos o Edit exatamente em cima dele. O ListEdit possui o foco, quando a tecla ENTER é pressionada (tecla ENTER = #13) o item “antigo” é removido do ListBox e o novo é inserido. Isso é tudo. Simples e eficiente.

 

type

  TForm1 = class(TForm)

  ...

  private

    ListEdit: TEdit;

    procedure ListEditKeyPress(Sender: TObject; var Key: Char);

  end;

...

{ cria o TEdit e faz o ListBox seu parent }

procedure TForm1.FormCreate(Sender: TObject) ;

begin

  ListEdit := TEdit.Create(self) ;

  ListEdit.Visible := false;

  ListEdit.Ctl3D := false;

  ListEdit.BorderStyle := bsNone;

  ListEdit.Parent := ListBox1;

  ListEdit.Width := ListBox1.ClientWidth;

  ListEdit.OnKeyPress := ListEditKeyPress;

end;

 

{ Item selecionado – posiciona o Edit }

procedure TForm1.ListBox1Click(Sender: TObject) ;

var

  ii : integer;

  lRect: TRect;

begin

  ii := ListBox1.ItemIndex;

  if ii = -1 then

    Exit;

 

  lRect := ListBox1.ItemRect(ii) ;

  ListEdit.Top := lRect.Top + 1;

  ListEdit.Left := lRect.Left + 1;

  ListEdit.Height := (lRect.Bottom - lRect.Top) + 1;

 

  ListEdit.Text := ListBox1.Items.Strings[ii];

  ListBox1.Selected[ii] := False;

 

  ListEdit.Visible := True;

  ListEdit.SelectAll;

  ListEdit.SetFocus;

end;

 

{ efetua a alteração quando e tecla enter é pressionada }

procedure TForm1.ListEditKeyPress(Sender: TObject;

  var Key: Char);

var

  ii: Integer;

begin

  if Key = #13 then

  begin

    ii := ListBox1.ItemIndex;

    ListBox1.Items.Delete(ii) ;

    ListBox1.Items.Insert(ii, ListEdit.Text) ;

    ListEdit.Visible := False;

    Key := #0;

  end;

end;

 

{ oculta o Edit quando o ListBox perde o foco }

procedure TForm1.ListBox1Exit(Sender: TObject) ;

begin

  ListEdit.Visible := False;

end;

 

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?