none
Problema ao deixar Control Visible RRS feed

  • Pergunta

  • Bom dia pessoal,

    estou enfrentando um problema...

    Criei um componente parecido com um tabcontrol, que dependendo do item selecionado faz aparecer um control da lista this.Controls

    então quando é alterado o index do "selecionado", na propriedade "set" eu faco um foreach e deixo todos os controls false, e depois deixo o só atual em verdadeiro.

    foreach (Control ctrl in this.Controls)
    {
        ctrl.Visible = false;
    }
    mSelectedTab = (cpTabPage)Controls[value];
    
    mSelectedTab.Visible = true;
    

    o Problema é que quando eu dou 

    mSelectedTab.Visible = true;

    alguns itens da coleção this.Controls trocam de posição...

    Segue os prints para melhor visualização...

    antes de dar o visible...

    depois de dar o visible = true;

    Estava fazendo uns teste e deixei assim

    foreach (Control ctrl in this.Controls)
    {
        ctrl.Visible = true;
        ctrl.Visible = false;
    }
    
     

    dava um visible = true e depois um visible = false, se eu deixar assim tudo funciona, a ordem dos itens no this.Controls, não é alterado.. porém na troca de item o componente fica "piscando"....

    Não faço ideia do que possa ser...

    Se alguem souber o que pode estar ocorrendo...

    Agradeço pela atenção...

    att,

    Marco

    quinta-feira, 5 de junho de 2014 13:51

Todas as Respostas

  • Quando você seta o Visible = false, ele não renderiza o seu componente, pode ser por isso que ele muda as posições. Nesse caso, é melhor você trabalhar com o controle do CSS, colocando o display = none, ao invés do visible = false.
    quinta-feira, 5 de junho de 2014 15:31
  • Oi Alexandre, esqueci de mencionar que a aplicação é em windows forms... então não tem como usar o controledo CSS...


    quinta-feira, 5 de junho de 2014 15:45
  • Entendi. Nesse caso, pelas imagens, tá difícil identificar o problema. Teria que analisar a rotina onde os controles estão sendo criados.
    quinta-feira, 5 de junho de 2014 15:52
  • Marco, boa noite.

    Na realidade ele dá uma piscada só não é isso ?

    Se for ver pelo seu código, isso é normal já que você faz todos eles sumirem primeiro e depois faz um aparecer.

    O ideal é você fazer o selecionado ser visualizado na frente e depois sumir com o restante.

    Será que isso não resolve o problema?

    Testa lá e nos conte o resultado.

    Abraços !


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS, MCSD
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.

    quinta-feira, 5 de junho de 2014 22:14
  • olá, testando percebi que se eu seleciona-se aba1, aba2, aba3, na sequencia.. não acontecia isso.. então resolvi que quando adicionasse a aba, ele seleciona-se a aba inserida..

    public override void Add( Control value )
    {
       cpTabPage p = value as cpTabPage;
       p.SendToBack();
       base.Add( p );
      (this.owner as cpTabControl).SelectedIndex = (this.owner as cpTabControl).Controls.Count - 1; 
    }

    Isso resolveu mas não sei o porque rsrsrsrsrsrrs...

    Obrigado pela ajuda

    att,

    Marco

    • Sugerido como Resposta Diego Murakami segunda-feira, 23 de junho de 2014 13:57
    segunda-feira, 9 de junho de 2014 16:35
  • olá, testando percebi que se eu seleciona-se aba1, aba2, aba3, na sequencia.. não acontecia isso.. então resolvi que quando adicionasse a aba, ele seleciona-se a aba inserida..

    public override void Add( Control value )
    {
       cpTabPage p = value as cpTabPage;
       p.SendToBack();
       base.Add( p );
      (this.owner as cpTabControl).SelectedIndex = (this.owner as cpTabControl).Controls.Count - 1; 
    }

    Isso resolveu mas não sei o porque rsrsrsrsrsrrs...

    Obrigado pela ajuda

    att,

    Marco

    segunda-feira, 9 de junho de 2014 16:36