Marcar/Desmarcar todos checklistbox?
Pessoal, estou tratando so checked de um CheckListBox, mais queria ver se pode melhorar este código, achei um tanto estranho ter que fazer 2 for para marcar e desmarcar todos. E se não faço assim e por exemplo marcar apenas um item na lsita, não consigo, fazer funcionar corretamente, visto que uso apenas um button para os dois comandos, então a solução que achei foi com 2 FOR mesmo.
Fiz duas condições distintas (checked e not checked) usando o caption do botão, por causa que estou usando apenas um botão para executar as duas funções no checklistbox.
Funcionando esta, mas imagino que dê pra melhorar o codigo, só que não consegui fazer.
Alguém tem alguma idéia?
//Se o botão estever com este caption então marca todos os checkbox if btbMarcarTodosChk.Caption = 'Desmarcar Todos' then begin for i := 0 to chklistTributo.Items.Count -1 do begin //Entra na condição do bloco apenas os checkbox que estiverem com os itens enabled if chklistTributo.ItemEnabled[i] = True then begin //Se todos checkBox estiverem TRUE então mude para FALSE e altere o caption do botão btbMarcarTodosChk.Caption := 'Marcar Todos'; chklistTributo.Checked[i] := False; end; // End ItemEnabled end; // End For Exit; // Deve sair depois de executar o loop (Evita de entra na outra condição do caption) end; // End caption //Se o botão estever com este caption então desmarca todos os checkbox if btbMarcarTodosChk.Caption = 'Marcar Todos' then begin for i := 0 to chklistTributo.Items.Count -1 do begin //Entra na condição do bloco apenas os checkbox que estiverem com os itens enabled if chklistTributo.ItemEnabled[i] = True then begin //Se todos checkBox estiverem FALSE então mude para TRUE e altere o caption do botão btbMarcarTodosChk.Caption := 'Desmarcar Todos'; chklistTributo.Checked[i] := True; end; // End ItemEnabled end; // End For Exit; // Deve sair depois de executar o loop end; // End caption
Alguém tem alguma idéia?
Adriano Dolce
Curtidas 0
Respostas
Murillo Mayer
09/12/2010
tenta esse codigo aki. Não sei se funciona... pq to sem o delphi aqui na empresa pra testar... mas da uma olhada. Qqr coisa, tenta dar uma adaptada.
var marcar : boolean; marcar := true; // incializa a variavel if btbMarcarTodosChk.Caption = 'Desmarcar Todos' then begin marcar:= false; // se for pra desmarcar a var é false end; for i := 0 to chklistTributo.Items.Count -1 do begin //Entra na condição do bloco apenas os checkbox que estiverem com os itens enabled if chklistTributo.ItemEnabled[i] <> marcar then begin //Se todos checkBox estiverem TRUE então mude para FALSE e altere o caption do botão chklistTributo.Checked[i] := marcar; end; // End ItemEnabled end; // End For end; // End caption if btbMarcarTodosChk.Caption = 'Desmarcar Todos' then begin btbMarcarTodosChk.Caption := 'Marcar Todos'; end else if btbMarcarTodosChk.Caption = 'Marcar Todos' then begin btbMarcarTodosChk.Caption := 'Desmarcar Todos' end;
GOSTEI 0
Adriano Dolce
09/12/2010
Obrigado por responde amigo, mais ja resolvi aqui desta forma
Valeu mesmo.
for i := 0 to chklistTributo.Items.Count -1 do if chklistTributo.ItemEnabled[i] = True then chklistTributo.Checked[i] := btbMarcarTodosChk.Caption = 'Marcar Todos'; if btbMarcarTodosChk.Caption = 'Desmarcar Todos' then btbMarcarTodosChk.Caption := 'Marcar Todos' else btbMarcarTodosChk.Caption := 'Desmarcar Todos';
GOSTEI 0