Contar o Número de Itens Selecionados no ListView
17/10/2019
0
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
Curtir tópico
+ 0
Responder
Post mais votado
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.
Emerson Nascimento
Responder
Mais Posts
18/10/2019
Luiz Vichiatto
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;
Responder
18/10/2019
Lucas Bernieri
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.
Responder
Clique aqui para fazer login e interagir na Comunidade :)