0
respostas

Comportamento apagando aba selecionada

Talvez você tenha notado que ao clicar com o botão direito na aba que pretende apagar, ela precisa estar selecionada para que ocorra o comportamento esperado. Caso contrário, o programa irá ignorar a aba clicada e se baseará na aba selecionada.

Contornei isto com o código abaixo:

if (e.Button == MouseButtons.Right)
{
    // Código da aula...

    // Percorremos todas as páginas de tbcAplicacoes
    for (int i = 0; i < tbcAplicacoes.TabCount - 1; i++)
    {
        //GetTabRect irá retornar um retângulo para a aba da página,
        //verificamos se o local em que clicamos está dentro da área deste retângulo
        if (tbcAplicacoes.GetTabRect(i).Contains(e.Location))
        {
            //Ao encontrarmos, selecionamos a página
            tbcAplicacoes.SelectTab(i);
        }
    }

Isto basicamente faz com que a página seja selecionada ao clicarmos nela com o botão DIREITO também (o mesmo comportamento ocorre nas guias do Visual Studio 2019).


Outra forma:

for (int i = 0; i < tbcAplicacoes.TabCount - 1; i++)
{
    if (tbcAplicacoes.GetTabRect(i).Contains(e.Location))
    {
    // Atribuímos o índice da página clicada na variável Global, indicePagina
        indicePagina = i;
    }
}

Nas chamadas de ApagaDireita e ApagaEsquerda, você passará como parâmetro a variável indicePagina.

No evento que apaga todas, exceto selecionada, deve-se inverter a ordem: primeiro ApagaDireita, depois ApagaEsquerda.

No evento que apaga a selecionada (neste caso está mais para "clicada") ficará: tbcAplicacoes.TabPages.Remove(tbcAplicacoes.TabPages[indicePagina]);

Agora o programa se baseará na página clicada, mas não irá selecioná-la quando clicamos nela com o botão direito. Comportamento semelhante ao do Chrome, por exemplo.