none
C#, botão "static" - dá pra fazer um botão que se repita em várias tabpages? RRS feed

  • Pergunta

  • Srs, alguém sabe me dizer se dá pra fazer um botão, que se repetirá em várias tabpages?

    Seria um botão pra rolar entre as tabpages, de forma infinita, como nos smartfones. Se for a primeira e clicar <<, passa pra última, se for a última, e clicar >>, passa pra primeira, se for a segunda e clicar >>, passa pra terceira, e assim por diante...

    O desafio é, criar o mesmo botão em todas as tabpages pra que não seja necessário ficar repetindo o evento button_click. Eu sei que não posso criar um botão em cada page com o mesmo nome, então como eu faria isso?

    quinta-feira, 21 de dezembro de 2017 15:42

Respostas

  • Bom dia Tracaja.

    Existem duas maneiras de fazer isso: a mais fácil e a mais difícil.

    Você pode criar o botão fora da TabPage e editar o comportamento desse botão de acordo com o clique nas abas (maneira mais fácil).

    Você pode criar o botão via código e associa-lo a um evento através de uma variável event associada ao botão via código.

    Entendo "botão que se repetirá em várias tabpages" como o primeiro caso.

    Qualquer dúvida, estou à disposição.

    Abs

    • Marcado como Resposta tracaja sexta-feira, 22 de dezembro de 2017 23:34
    sexta-feira, 22 de dezembro de 2017 12:58
  • Tracaja, bom dia!

    Segue um exemplo que eu fiz.

    private int i = 0;
    private int qtdTabPages = 0;
    
    private void Form1_Load(object sender, EventArgs e)
            {
                btnAnterior.Visible = false;
                qtdTabPages = tabControl1.TabCount;
            }
    
    private void btnAnterior_Click(object sender, EventArgs e)
            {
                if (i > 0)
                {
                    i--;
                    tabControl1.SelectTab(i);
    
                    if (i == 0)
                        btnAnterior.Visible = false;
    
                    btnProximo.Visible = true;
                }
            }
    
            private void btnProximo_Click(object sender, EventArgs e)
            {
                if (i < tabControl1.TabCount)
                {
                    i++;
                    tabControl1.SelectTab(i);
    
                    if (i + 1 == tabControl1.TabCount)
                        btnProximo.Visible = false;
    
                    btnAnterior.Visible = true;
                }
            }

    Coloque os botões "Anterior" e "Próximo" fora do componente tabControl.

    Qualquer dúvida, estou a disposição.

    att.

    Felipe


    • Editado Felipe Duarte (FD) sexta-feira, 22 de dezembro de 2017 13:48 ajuste de imagem
    • Marcado como Resposta tracaja sexta-feira, 22 de dezembro de 2017 23:34
    sexta-feira, 22 de dezembro de 2017 13:45
  • Isso mesmo. Eu fiz assim, mas no caso eu sobrepus os controles do próprio tabcontrol, de forma que o meu fica visivel e rola infinitamente.

    Eu queria fazer o botão dentro da área da tabpage, sem ter que fazer botao1, botao2, botao 3....em cada tabpage.

    Isso seria a segunda opção? Daí vai fugir do meu propósito que é minimizar o código.

    Mas beleza, pelo menos já sei que estou pensando mais corretamente.

    Obrigado!

    Segue o meu:

    private void button9_Click(object sender, EventArgs e)
    {
        System.Windows.Forms.TabControl.TabPageCollection pages = tabControl1.TabPages;
     
        foreach (TabPage page in pages)
        {
            if (tabControl1.SelectedIndex == 8)
            {
                tabControl1.SelectedIndex = 0;
                break;
            }
     
            tabControl1.SelectedIndex += 1;
            break;
     
        }
     
    }
     
    private void button8_Click(object sender, EventArgs e)
    {
        System.Windows.Forms.TabControl.TabPageCollection pages = tabControl1.TabPages;
     
        foreach (TabPage page in pages)
        {
            if (tabControl1.SelectedIndex == 0)
            {
                tabControl1.SelectedIndex = 8;
                break;
            }
     
            tabControl1.SelectedIndex -= 1;
            break;
     
        }
     
    }
    

    • Marcado como Resposta tracaja sexta-feira, 22 de dezembro de 2017 23:34
    sexta-feira, 22 de dezembro de 2017 23:32

Todas as Respostas

  • Bom dia Tracaja.

    Existem duas maneiras de fazer isso: a mais fácil e a mais difícil.

    Você pode criar o botão fora da TabPage e editar o comportamento desse botão de acordo com o clique nas abas (maneira mais fácil).

    Você pode criar o botão via código e associa-lo a um evento através de uma variável event associada ao botão via código.

    Entendo "botão que se repetirá em várias tabpages" como o primeiro caso.

    Qualquer dúvida, estou à disposição.

    Abs

    • Marcado como Resposta tracaja sexta-feira, 22 de dezembro de 2017 23:34
    sexta-feira, 22 de dezembro de 2017 12:58
  • Tracaja, bom dia!

    Segue um exemplo que eu fiz.

    private int i = 0;
    private int qtdTabPages = 0;
    
    private void Form1_Load(object sender, EventArgs e)
            {
                btnAnterior.Visible = false;
                qtdTabPages = tabControl1.TabCount;
            }
    
    private void btnAnterior_Click(object sender, EventArgs e)
            {
                if (i > 0)
                {
                    i--;
                    tabControl1.SelectTab(i);
    
                    if (i == 0)
                        btnAnterior.Visible = false;
    
                    btnProximo.Visible = true;
                }
            }
    
            private void btnProximo_Click(object sender, EventArgs e)
            {
                if (i < tabControl1.TabCount)
                {
                    i++;
                    tabControl1.SelectTab(i);
    
                    if (i + 1 == tabControl1.TabCount)
                        btnProximo.Visible = false;
    
                    btnAnterior.Visible = true;
                }
            }

    Coloque os botões "Anterior" e "Próximo" fora do componente tabControl.

    Qualquer dúvida, estou a disposição.

    att.

    Felipe


    • Editado Felipe Duarte (FD) sexta-feira, 22 de dezembro de 2017 13:48 ajuste de imagem
    • Marcado como Resposta tracaja sexta-feira, 22 de dezembro de 2017 23:34
    sexta-feira, 22 de dezembro de 2017 13:45
  • Felipe.

    Essa sua solução é a solução que mencionei como sendo a mais fácil.

    Muito boa implementação, parabéns.

    abs

    sexta-feira, 22 de dezembro de 2017 14:00
  • Isso mesmo. Eu fiz assim, mas no caso eu sobrepus os controles do próprio tabcontrol, de forma que o meu fica visivel e rola infinitamente.

    Eu queria fazer o botão dentro da área da tabpage, sem ter que fazer botao1, botao2, botao 3....em cada tabpage.

    Isso seria a segunda opção? Daí vai fugir do meu propósito que é minimizar o código.

    Mas beleza, pelo menos já sei que estou pensando mais corretamente.

    Obrigado!

    Segue o meu:

    private void button9_Click(object sender, EventArgs e)
    {
        System.Windows.Forms.TabControl.TabPageCollection pages = tabControl1.TabPages;
     
        foreach (TabPage page in pages)
        {
            if (tabControl1.SelectedIndex == 8)
            {
                tabControl1.SelectedIndex = 0;
                break;
            }
     
            tabControl1.SelectedIndex += 1;
            break;
     
        }
     
    }
     
    private void button8_Click(object sender, EventArgs e)
    {
        System.Windows.Forms.TabControl.TabPageCollection pages = tabControl1.TabPages;
     
        foreach (TabPage page in pages)
        {
            if (tabControl1.SelectedIndex == 0)
            {
                tabControl1.SelectedIndex = 8;
                break;
            }
     
            tabControl1.SelectedIndex -= 1;
            break;
     
        }
     
    }
    

    • Marcado como Resposta tracaja sexta-feira, 22 de dezembro de 2017 23:34
    sexta-feira, 22 de dezembro de 2017 23:32
  • Obrigado pela resposta, fiz isso um pouco diferente, funcionou beleza.

    Obrigado!

    sexta-feira, 22 de dezembro de 2017 23:33