Marcar/Desmarcar todos checklistbox?

Delphi

09/12/2010

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.  
//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
  Funcionando esta, mas imagino que dê pra melhorar o codigo, só que não consegui fazer.
 
  Alguém tem alguma idéia?
Adriano Dolce

Adriano Dolce

Curtidas 0

Respostas

Murillo Mayer

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

Adriano Dolce

09/12/2010

Obrigado por responde amigo, mais ja resolvi aqui desta forma  
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';
  Valeu mesmo.
GOSTEI 0
POSTAR