2008-09-22 9 views
21

Ich benutze Windows Vista und C# .net 3.5, aber ich hatte meinen Freund das Programm auf XP laufen und hat das gleiche Problem.C# - Warum wird eine Vollbild-Winform-App IMMER die Taskleiste nicht abdecken?

Also habe ich ein C# -Programm, das ich im Hintergrund mit einem Symbol im SystemTray ausgeführt habe. Ich habe einen Low-Level-Keyboard-Hook, wenn ich zwei Tasten (Ctr + Windows in diesem Fall) drücke, wird es das Hauptformular der Anwendung ziehen. Das Formular wird Vollbild in den Combo-Taste drückt auch Handler sein:

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

So funktioniert es im Grunde. Wenn ich CTR + Windows drücke, wird das Formular angezeigt, egal auf welches Programm ich mich konzentriert habe. Aber manchmal wird die Taskleiste immer noch über das Formular angezeigt, was ich nicht möchte. Ich möchte, dass immer Vollbild angezeigt wird, wenn ich diese Tastenkombination drücke.

Ich denke, es hat etwas damit zu tun, welche Anwendung ursprünglich Fokus hatte. Aber selbst wenn ich auf mein Hauptformular klicke, bleibt die Taskleiste manchmal dort. Ich frage mich, ob der Fokus wirklich das Problem ist. Es scheint nur so, als ob die Taskleiste manchmal stur ist und nicht hinter meinem Programm sitzen will.

Wer hat irgendwelche Ideen, wie ich das beheben kann?

EDIT: Weitere Details- Ich versuche, den gleichen Effekt zu erzielen, den ein Webbrowser hat, wenn Sie es in den Vollbildmodus versetzen, oder wenn Sie PowerPoint in den Präsentationsmodus versetzen.

In einem Windows-Formular tun Sie das, indem Sie den Rahmenstil auf keinen setzen und das Fenster maximieren. Aber manchmal wird das Fenster die Taskleiste aus irgendeinem Grund nicht abdecken. Die Hälfte der Zeit wird es tun.

Wenn ich das Hauptfenster oben habe, fallen die anderen dahinter, wenn ich darauf klicke, was ich nicht möchte, wenn die Taskleiste ausgeblendet ist.

Antwort

18

Versuchen Sie, diese (wo this Ihre Form ist):

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

Das wird eingestellt das Formular auf Vollbild, und es wird die Taskleiste abdecken.

+1

Damit dies funktioniert, möchten Sie sicherstellen, dass das Formular * nicht * maximiert ist. –

+0

Oh, das einzige Problem ist, dass ich es nicht TopMost haben kann, weil ich andere Fenster habe, die darüber sind, die TopMost sind, und wenn ich auf 'this' klicke, dann werden alle anderen Fenster dahinter gehen. – Joel

+2

Heh. Kleinere Details dort. Ich habe meine Zweifel darüber, ob was du willst * ohne * TopMost gemacht werden kann, wenn der Benutzer "Die Taskleiste über anderen Fenstern halten" aktiviert hat. Sie können jedoch auch mehrere TopMost-Fenster haben, und das aktive Fenster ist das äh, TopMostest. –

0

Soweit ich weiß, ist die Taskleiste entweder über oder unter Windows basierend auf der Einstellung "Halte die Taskleiste über anderen Fenstern". (Zumindest ist das die Formulierung in XP.) Ich nehme an, Sie könnten versuchen, zu sehen, ob Sie diese Einstellung erkennen und bei Bedarf umschalten können.

+4

Es ist eine schlechte Übung, die vom Benutzer gewählten Einstellungen basierend auf Ihren Vorlieben zu ändern.Es ist besser herauszufinden, wie die APIs verwendet werden, um das gewünschte Verhalten auf die richtige Weise zu erreichen. – Wedge

+0

Diese Einstellung gilt nur für Anwendungen mit Fenster, nicht für Anwendungen mit Vollbild. Denn wenn ich Spiele spiele oder meinen Webbrowser auf den Vollbildmodus bringe, verdeckt er die Taskleiste. – Joel

+0

Vollbild-Apps wie Spiele wechseln den Anzeigemodus auf DirectX oder OpenGL oder etwas ganz anderes als das Windowing-System, das dem Programm den unverschlüsselten Zugriff auf Videopuffer ermöglicht. Dies ist innerhalb des Fenstersystems, so dass die Einstellung, die ich erwähnt habe, zutrifft. – jdmichal

0

versuchen, das Formular Ändern der Größe und an der Vorderseite der z-Reihenfolge wie so bringen:

 Rectangle screenRect = Screen.GetBounds(this); 
     this.Location = screenRect.Location; 
     this.Size = screenRect.Size; 
     this.BringToFront(); 
1
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(); 
     } 
} 
2

Ich habe so viele Lösungen ausprobiert, funktioniert einige von ihnen auf Windows XP und alle von ihnen funktionierten nicht auf Windows 7. Schließlich schreibe ich eine einfache Methode, dies zu tun.

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

die Reihenfolge der Code ist wichtig und wird nicht funktionieren, wenn Sie den Ort der WindwosState und Formborderstyle ändern.

Einer der Vorteile dieser Methode besteht darin, TOPMOST auf false zu lassen, damit andere Formulare über das Hauptformular gelangen können.

Es hat mein Problem absolut gelöst.

Verwandte Themen