Mudar estado de itens CCheckGroup.

Rodolfo Andrade  

Olá, por gentileza, tenho um objeto CCheckGroup m_check_group1.

Gostaria de criar um botão para selecionar todos ou nenhum dos itens deste objeto. Tentei o seguinte trecho, mas estou recebendo o erro: "'CCheckGroup::RowState' - cannot call protected member function"

void CPanelDialog::OnClickButton3(void) {
   int i;
   
   if(m_check_group1.Value() == 0) {
      for(i = 0;i<m_check_group1.ControlsTotal();i++) m_check_group1.RowState(i,true);
   } else for(i = 0;i<m_check_group1.ControlsTotal();i++) m_check_group1.RowState(i,false);
}

Ou seja, pelo que entendi na documentação, eu precisaria percorrer todos os itens do objeto e alterar o estado de cada um deles, assim eu estaria consequentemente alterando Value(). Seria isso mesmo? Alguém tem alguma outra ideia para me ajudar?

Elmo de Moraes  

Essa operação RowState é uma operação protegida (protected), por isso o erro de compilação.

Case não entenda o conceito de visibilidades dos atributos e métodos de classes leia mais na documentação em https://www.mql5.com/pt/docs/basis/oop

Tente usar o método Check ao invés de RowState, acredito que funcione. 

void CPanelDialog::OnClickButton3(void) {
   int i;
   
   if(m_check_group1.Value() == 0) 
   {
      for(i = 0;i<m_check_group1.ControlsTotal();i++) 
         m_check_group1.Check(i,1);
   } 
   else 
   {
     for(i = 0;i<m_check_group1.ControlsTotal();i++) 
        m_check_group1.Check(i,0);
   }
}
Documentação sobre MQL5: Elementos Básicos da Linguagem / Programação Orientada a Objetos
Documentação sobre MQL5: Elementos Básicos da Linguagem / Programação Orientada a Objetos
  • www.mql5.com
Elementos Básicos da Linguagem / Programação Orientada a Objetos - Documentação sobre MQL5
Rodolfo Andrade  

Olá, ElmoDeMoraes, muito obrigado pela ajuda, o caminho parece ser este mesmo, mas ainda não está 100%. O primeiro detalhe é que a iteração i<m_check_group1.ControlsTotal() não deu certo. Consegui contornar isso colocando um outro valor neste local (função própria). Mas o principal problema está sendo com m_check_group1.Value() que não está sendo atualizado através de m_check_group1.Check(i,true). Conseguimos ver isto através de um Print() logo em seguida, veja:

void CPanelDialog::OnClickButton3(void) {
   int i;
   
   if(m_check_group1.Value() == 0) {
      for(i = 0;i<candle.getPatternsNumber();i++) m_check_group1.Check(i,true);
      Print(m_check_group1.Value()); // está retornando 0 e deveria retornar algo > 0
   } else {
      for(i = 0;i<candle.getPatternsNumber();i++) m_check_group1.Check(i,false);
      Print(m_check_group1.Value()); // Não entra aqui pois .Value() está sempre igual a 0;
   }
}

O problema é que se eu não conseguir atualizar via código este método .Value(), infelizmente estarei sem solução novamente. O amigo tem alguma outra sugestão?

Razão: