• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Knitter

[Resolvido] Esconder as abas de um TabControl

15 mensagens neste tópico

Boas,

Precisava de criar uma interface em que na esquerda existe uma árvore com alguns nós e na direita deveria ser escolhido um painel diferente a cada nó que o utilizador escolha.

Estava a usar um TabControl para mostrar os painéis dado que seria mais simples mudar a página visível com todas as funcionalidades que esse controlo oferece, agora deparo-me com um problema, como esconder as abas do controlo. Não quero que apareçam os títulos de cada página.

Existe alguma forma de atingir o objectivo que pretendo com o controlo que estou a usar ou uma forma melhor para o atingir?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Precisava de criar uma interface em que na esquerda existe uma árvore com alguns nós e na direita deveria ser escolhido um painel diferente a cada nó que o utilizador escolha.

Estava a usar um TabControl para mostrar os painéis dado que seria mais simples mudar a página visível com todas as funcionalidades que esse controlo oferece, agora deparo-me com um problema, como esconder as abas do controlo. Não quero que apareçam os títulos de cada página.

Existe alguma forma de atingir o objectivo que pretendo com o controlo que estou a usar ou uma forma melhor para o atingir?

Já andei a pesquisar sobre isso e cheguei à conclusão que não era possível ou que dava muito trabalho (override ao Draw do controlo e não sei o quê).

A solução que utilizei foi criar várias forms e adicionar esse control via código. Também podes criar várias frames e utilizar o Visible.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hum... não acredito que uma coisa tão comum seja assim tão complicada, é que o que estou a tentar fazer não é mais que um wizard, quero mostrar um conjunto de passos definidos em vários painéis.

Não mais ideias?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, esse artigo é referente a um componente específico, neste caso ao UltraWinToolbars, que não estou a usar.

Resolvi o problema de outra forma, através de um componente específico para criar wizards, que neste momento está adaptado às necessidades do projecto.

Mais tarde irei investigar essas soluções, nomeadamente a de usar containers que não percebi bem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu por acaso estou a fazer um controlo (apesar de nunca mais ter pegado nele desde há uns meses) que faz mais ou menos a mesma coisa que um TabControl, mas com um aspecto mais à-lá-thunderbird (janela de preferências), talvez depois lhe adicione uns métodos/propriedades para esconder os botões de troca de páginas e mudar a página por código, acho que é o que tu queres. Se tiveres interessado: http://www.portugal-a-programar.pt/index.php?showtopic=11386 (bem que esta precisar de mais uns comentários para eu voltar a carga lol ;))

Quanto ao link que te dei, tens razão, vi mal, sorry... Mas eu sei que há maneiras de o fazer isto porque quando comecei a desenvolver o controlo que falei acima, comecei por fazer um derivado do TabControl (depois larguei a ideia e comecei a fazer uma cena diferente) e fiz isso que queres, só não me lembro como. Vou investigar mais um pouco ou achas que não vale a pena? :P

EDIT:

Acho que encontrei o que querias, crias uma subclasse do TabControl com o seguinte código:

public class MyTabControl : TabControl {
private const TCM_ADJUSTRECT = 0x1328;

protected override void WndProc(ref Message m) {
	if (m.Msg == TCM_ADJUSTRECT && !DesignMode) {
		m.Result = (IntPtr)1;
	} else {
		base.WndProc(ref m);
	}
}
}

Depois acho que sabes fazer o resto... Durante o tempo de execução as tabs vão estar escondidas, durante o tempo de desenho vais vê-las. Podes facilmente alterar este comportamento como podes ver pelo código do if.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não quererás elaborar mais nesse assunto?

Tenho andado pouco por cá. Quando disse containers, estava a referir-me ao controlo Panel. Toma lá um exemplo meio tosco:

    public partial class Form1 : Form
    {
        Panel myPanel;

        public Form1()
        {
            InitializeComponent();

            myPanel = new Panel();
            TextBox tb = new TextBox();
            myPanel.Controls.Add(tb);
            Controls.Add(myPanel);

            tb.Click += new EventHandler(tb_Click);
        }

        void tb_Click(object sender, EventArgs e)
        {
            myPanel.Visible = !myPanel.Visible;
        }
    }

As coordenadas da TextBox passam a ser relativas à origem do Panel. Quando a propriedade Visible do Panel é colocada a false, todos os controlos que o têm como Parent desaparecem também.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A ideia de usar os painéis foi a primeira depois de ver que não conseguia esconder as abas, mas isso significa que teria de reinventar a roda, neste caso teria de implementar quase todas as funcionalidades que o componente TabControl contém, algo que não me apetece fazer.

A necessidade não é tanta que me obrigue a isso e parece-me trabalho desnecessário.

Para já vou estar a usar o componente que encontrei, é a solução mais simples para o objectivo. Sinceramente pensava que fosse mais simples fazer o que quero, e até estava à espera que me mandassem olhar melhor para as propriedades :D, parece que o Java me deixa mal habituado, e como a única vez que usei outra tecnologia para isto foi em Delphi e foi bastante simples assumi que fosse igual.

Esse código é interessante, já tinha visto algumas alternativas em código mas envolviam muito mais alterações ao componente, tantas que resolvi mudar de ideia :D.

Bem, acho que tenho as soluções que queria, obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas tu não lês-te a minha última resposta? Achas aquilo trabalho desnecessário? É bué simples e faz exactamente o que queres... E para trocares de tabs em design time é porreiro, porque assim consegues facilmente trabalhar em cada "painel" diferente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu é que não leste o que eu escrevi, e se voltares a ler com atenção verificas que escrevi que achava desnecessário implementar com painéis o toda a funcionalidade de um TabControl. Em nada me referi ao teu código, que, como também escrevi mais abaixo e na única linha em resposta a ti, é mais o simples do que os que tinha visto até este momento.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu li, mas não reparei bem nessa linha e não vi que era dirigida a mim :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sei que estou desenterrando um tópico, mas encontrei uma solução simples para esse problema

Criei as abaspelo modo design normal e em tempo de execução uso os códigos abaixo.

Ocultar:

tabCentral.Controls.Remove(tab);

Mostrar

tabCentral.Controls.Add(tab);

                   

Estou fazendo exatamente a mesma coisa, uma árvore que chama as abas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ae pessoal... Como disse o colega acima vamos ressuscitar o topico. hehehe,

Bom estava eu e meu colega de desenvolvimento discutindo isto e chegamos a conclusão de por um Panel na frente das abas ou na propriedade Locaction -> Y acrescentar o numero -22 (isso mesmo -22).

Isto resolve nossos problemas em partes pois o Control + Tab ainda funciona. Para resolver isto, ponha um flag para bloquear.

Conclusão: A POG FUNCIONA! ( PROGRAMAÇÃO ORIENTADA A GAMBIARRA)

Att.,

Darcy Buss Neto

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora