Pergunta

Estou usando o Windows Vista e C # .NET 3.5, mas eu tinha o meu amigo executar o programa em XP e tem o mesmo problema.

Então, eu tenho um programa C # que tenho rodando em segundo plano com um ícone na Bandeja do sistema. Eu tenho um gancho de teclado de baixo nível para que quando eu pressionar duas chaves (CTR + janelas neste caso) que vai puxar de formulário principal do aplicativo. O formulário está definido para ser tela cheia na imprensa chave combinação, mesmo manipulador:

this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;

Por isso, basicamente, funciona. Quando eu bati CTR + do Windows que traz a forma, não importa o programa que eu tenho dado foco para. Mas, às vezes, a barra de tarefas ainda vai aparecer sobre a forma, o que eu não quero. Eu quero que seja sempre em tela cheia quando eu bati que combinação de teclas.

Eu acho que tem algo a ver com o aplicativo tem o foco originalmente. Mas mesmo quando eu clico no meu formulário principal, a barra de tarefas, por vezes, permanece lá. Então eu me pergunto se o foco é realmente o problema. Parece apenas que, por vezes, a barra de tarefas está a ser teimoso e não quer sentar-se atrás do meu programa.

Alguém tem alguma idéia de como posso resolver isso?

EDIT: Mais details- Estou tentando conseguir o mesmo efeito que um navegador web tem quando você colocá-lo em modo de tela cheia, ou quando você colocar powerpoint para o modo de apresentação.

Em uma janela de formar você faz isso, colocando o estilo de borda a nenhum e maximizar a janela. Mas às vezes a janela não cobrirá a barra de tarefas, por algum motivo. Metade do tempo ele vai.

Se eu tiver a principal janela de nível superior, os outros vão ficar para trás quando eu clicar sobre ele, o que eu não quero, se a barra de tarefas está escondido.

Foi útil?

Solução

Tente isto (onde this é a sua forma):

this.Bounds = Screen.PrimaryScreen.Bounds;
this.TopMost = true;

Isso vai definir o formulário para fullscreen, e vai cobrir a barra de tarefas.

Outras dicas

Eu tentei tantas soluções, algumas delas funciona no Windows XP e todos eles não funcionaram no Windows 7. Depois de tudo que eu escrever um método simples para fazê-lo.

private void GoFullscreen(bool fullscreen)
    {
        if (fullscreen)
        {
            this.WindowState = FormWindowState.Normal;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Bounds = Screen.PrimaryScreen.Bounds;
        }
        else
        {
            this.WindowState = FormWindowState.Maximized;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
        }
    }

a ordem do código é importante e não vai funcionar se você alterar o local de WindwosState e FormBorderStyle.

Uma das vantagens deste método está deixando a TOPMOST em falso que permitem outras formas para vir a forma principal.

É absolutamente resolveu o meu problema.

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.F11)
        if (FormBorderStyle == FormBorderStyle.None)
        {
            FormBorderStyle = FormBorderStyle.Sizable;
            WindowState = FormWindowState.Normal;
        }
        else
        {
            SuspendLayout();
            FormBorderStyle = FormBorderStyle.None;
            WindowState = FormWindowState.Maximized;
            ResumeLayout();
        }
}

Tanto quanto eu sei, a barra de tarefas é acima ou abaixo janelas com base na "Manter a barra de tarefas sobre as outras janelas" configuração. (Pelo menos, essa é a formulação do XP). Eu suponho que você poderia tentar ver se você pode detectar essa configuração e alternar-lo se necessário?

Tente redimensionar a forma e trazê-lo para a frente da ordem z assim:

        Rectangle screenRect = Screen.GetBounds(this);
        this.Location = screenRect.Location;
        this.Size = screenRect.Size;
        this.BringToFront();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top