C# - 전체 화면 winform 앱이 항상 작업 표시줄을 가리지 않는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/118130

문제

저는 Windows Vista와 C#.net 3.5를 사용하고 있는데 친구에게 XP에서 프로그램을 실행하게 했는데 같은 문제가 발생했습니다.

그래서 SystemTray의 아이콘을 사용하여 백그라운드에서 실행 중인 C# 프로그램이 있습니다.나는 낮은 수준의 키보드 후크를 가지고 있으므로 두 개의 키(이 경우 Ctrl+windows)를 누르면 응용 프로그램의 기본 양식이 당겨집니다.양식은 콤보 키 누르기 짝수 핸들러에서 전체 화면으로 설정됩니다.

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

그래서 기본적으로 작동합니다.CTR+Windows를 누르면 어떤 프로그램에 초점을 맞춰도 해당 양식이 나타납니다.그러나 때때로 작업 표시줄이 여전히 양식 위에 표시되는데, 이는 원하지 않습니다.해당 키 콤보를 누를 때 항상 전체 화면이 되도록 하고 싶습니다.

나는 그것이 원래 응용 프로그램에 초점을 맞춘 것과 관련이 있다고 생각합니다.하지만 기본 양식을 클릭해도 작업 표시줄이 그대로 남아 있는 경우가 있습니다.그래서 초점이 정말 문제인지 궁금합니다.때때로 작업 표시줄이 고집스러워서 내 프로그램 뒤에 앉아 있기를 원하지 않는 것 같습니다.

이 문제를 어떻게 해결할 수 있는지 아는 사람이 있나요?

편집하다:자세한 내용- 웹 브라우저가 전체 화면 모드로 넣을 때 또는 PowerPoint를 프레젠테이션 모드로 넣을 때와 동일한 효과를 얻으려고 노력하고 있습니다.

Windows 양식에서는 테두리 스타일을 없음으로 설정하고 창을 최대화하여 이를 수행합니다.하지만 어떤 이유로 인해 창이 작업 표시줄을 가리지 않는 경우도 있습니다.절반의 시간은 그럴 것입니다.

기본 창이 맨 위에 있는 경우 클릭하면 다른 창은 그 뒤로 떨어지게 됩니다. 작업 표시줄이 숨겨져 있으면 원하지 않습니다.

도움이 되었습니까?

해결책

이것을 시도하십시오 (어디 this 귀하의 양식입니다):

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

그러면 양식이 전체 화면으로 설정되고 작업 표시줄이 덮이게 됩니다.

다른 팁

저는 많은 솔루션을 시도했지만 그 중 일부는 Windows XP에서 작동하지만 모두 Windows 7에서는 작동하지 않았습니다.결국 나는 그렇게 하기 위한 간단한 방법을 작성합니다.

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;
        }
    }

코드 순서가 중요하며 WindwosState 및 FormBorderStyle의 위치를 ​​변경하면 작동하지 않습니다.

이 방법의 장점 중 하나는 TOPMOST를 false로 두어 다른 양식이 기본 양식보다 우선할 수 있다는 점입니다.

그것은 내 문제를 완전히 해결했습니다.

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();
        }
}

내가 아는 한, 작업 표시줄은 "작업 표시줄을 다른 창 위에 유지" 설정에 따라 창 위 또는 아래에 있습니다.(적어도 XP에서는 그렇게 표현됩니다.) 이 설정을 감지하고 필요한 경우 전환할 수 있는지 확인해 볼 수 있을까요?

다음과 같이 양식의 크기를 조정하고 z 순서 앞으로 가져오세요.

        Rectangle screenRect = Screen.GetBounds(this);
        this.Location = screenRect.Location;
        this.Size = screenRect.Size;
        this.BringToFront();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top