Contar o Número de Itens Selecionados no ListView
Olá,
Gostaria de saber como contar o número de itens selecionados em um ListView no Delphi.
Estou utilizando o seguinte código no evento OnSelectItem do ListView.
O código funciona, porém o programa fica muito lento com o uso desse código.
E no evento OnCreate do Form:
No ListView estou utilizando a opção MultiSelect := True;
Gostaria de saber como contar o número de itens selecionados em um ListView no Delphi.
Estou utilizando o seguinte código no evento OnSelectItem do ListView.
O código funciona, porém o programa fica muito lento com o uso desse código.
//Loop para mostrar quantos itens estao selecionados
for i := 0 to ListView.Items.Count-1 do
begin
if ListView.Items[i].Selected = True then
ItensSel := ItensSel+1;
end;
//Mostra no StatusBar o numero de itens selecionados
Status.Panels[1].Text := IntToStr(ItensSel) + ' Selecionado(s)';
//Após mostrar no StatusBar redefine a variavel ItensSel para 0
ItensSel := 0;E no evento OnCreate do Form:
ItensSel := 0;
No ListView estou utilizando a opção MultiSelect := True;
Lucas Bernieri
Curtidas 0
Melhor post
Emerson Nascimento
18/10/2019
da forma que está, a cada clique, o programa irá varrer todos os itens e recontar tudo. sugiro uma alteração de drástica, porém performática:
crie a variável e a inicialize da forma que você fez, no OnCrete do form.
no OnSelectItem, verifique se o item está selecionado:
- se estiver, incremente a variável
- se NÃO estiver, decremente a variável.
- 'imprima' o conteúdo
crie a variável e a inicialize da forma que você fez, no OnCrete do form.
no OnSelectItem, verifique se o item está selecionado:
- se estiver, incremente a variável
- se NÃO estiver, decremente a variável.
- 'imprima' o conteúdo
type
TForm2 = class(TForm)
ListView1: TListView;
StatusBar1: TStatusBar;
procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FItensSelecinados: integer;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
FItensSelecinados := 0;
end;
procedure TForm2.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
if Selected then
Inc(FItensSelecinados)
else
Dec(FItensSelecinados);
StatusBar1.Panels[1].Text := IntToStr(FItensSelecinados) + ' Selecionado(s)';
end;
end.GOSTEI 1
Mais Respostas
Luiz Vichiatto
17/10/2019
Olá Lucas
Acho que é melhor você colocar no evento OnClick do ListView
Por ficar demorado, vai depender da quantidade de itens que tem a lista
**************************************
Acho que é melhor você colocar no evento OnClick do ListView
Por ficar demorado, vai depender da quantidade de itens que tem a lista
ItensSel := 0; //Mude para cá a inicialização
for i := 0 to ListView.Items.Count-1 do
if ListView.Items[i].Selected = True then
ItensSel := ItensSel+1;
//Mostra no StatusBar o numero de itens selecionados
Status.Panels[1].Text := IntToStr(ItensSel) + ' Selecionado(s)';
**************************************
Olá,
Gostaria de saber como contar o número de itens selecionados em um ListView no Delphi.
Estou utilizando o seguinte código no evento OnSelectItem do ListView.
O código funciona, porém o programa fica muito lento com o uso desse código.
E no evento OnCreate do Form:
No ListView estou utilizando a opção MultiSelect := True;
Gostaria de saber como contar o número de itens selecionados em um ListView no Delphi.
Estou utilizando o seguinte código no evento OnSelectItem do ListView.
O código funciona, porém o programa fica muito lento com o uso desse código.
//Loop para mostrar quantos itens estao selecionados
for i := 0 to ListView.Items.Count-1 do
begin
if ListView.Items[i].Selected = True then
ItensSel := ItensSel+1;
end;
//Mostra no StatusBar o numero de itens selecionados
Status.Panels[1].Text := IntToStr(ItensSel) + ' Selecionado(s)';
//Após mostrar no StatusBar redefine a variavel ItensSel para 0
ItensSel := 0;E no evento OnCreate do Form:
ItensSel := 0;
No ListView estou utilizando a opção MultiSelect := True;
GOSTEI 0
Lucas Bernieri
17/10/2019
da forma que está, a cada clique, o programa irá varrer todos os itens e recontar tudo. sugiro uma alteração de drástica, porém performática:
crie a variável e a inicialize da forma que você fez, no OnCrete do form.
no OnSelectItem, verifique se o item está selecionado:
- se estiver, incremente a variável
- se NÃO estiver, decremente a variável.
- 'imprima' o conteúdo
crie a variável e a inicialize da forma que você fez, no OnCrete do form.
no OnSelectItem, verifique se o item está selecionado:
- se estiver, incremente a variável
- se NÃO estiver, decremente a variável.
- 'imprima' o conteúdo
type
TForm2 = class(TForm)
ListView1: TListView;
StatusBar1: TStatusBar;
procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FItensSelecinados: integer;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
FItensSelecinados := 0;
end;
procedure TForm2.ListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
if Selected then
Inc(FItensSelecinados)
else
Dec(FItensSelecinados);
StatusBar1.Panels[1].Text := IntToStr(FItensSelecinados) + ' Selecionado(s)';
end;
end.Funcionou certinho aqui, muito obrigado.
GOSTEI 0