Wie nehme ich ein Formular, das derzeit minimiert ist, und es in seinen vorherigen Zustand wiederherstellen. Ich kann keinen Weg finden zu bestimmen, ob der vorherige WindowState
Normal
oder Maximized
war; aber ich weiß, dass die Informationen irgendwo gespeichert werden müssen, weil Windows kein Problem mit Apps in der Taskleiste hat.C# programmgesteuert Formular nicht minimieren
Antwort
Es gibt keine verwaltete API dafür. Der Weg dazu ist PInvoke GetWindowPlacement und überprüfen Sie für WPF_RESTORETOMAXIMIZED
.
Für Details siehe Microsoft How To (die die Technik in VB demonstriert).
In C#, wäre dies:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
private struct WINDOWPLACEMENT
{
public int length;
public int flags;
public int showCmd;
public System.Drawing.Point ptMinPosition;
public System.Drawing.Point ptMaxPosition;
public System.Drawing.Rectangle rcNormalPosition;
}
public void RestoreFromMinimzied(Form form)
{
const int WPF_RESTORETOMAXIMIZED = 0x2;
WINDOWPLACEMENT placement = new WINDOWPLACEMENT();
placement.length = Marshal.SizeOf(placement);
GetWindowPlacement(form.Handle, ref placement);
if ((placement.flags & WPF_RESTORETOMAXIMIZED) == WPF_RESTORETOMAXIMIZED)
form.WindowState = FormWindowState.Maximized;
else
form.WindowState = FormWindowState.Normal;
}
this.WindowState = FormWindowState.Normal;
Sie haben auch:
this.WindowState = FormWindowState.Minimized;
this.WindowState = FormWindowState.Maximized;
Ah, ich habe die Frage falsch verstanden:
Restore WindowState from Minimized sollte das sein, was Sie suchen. Es sagt, dass Sie in der Taskleiste Verhalten wie dies nachahmen kann:
SendMessage(form.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
Das ist nicht seine Frage nicht beantworten - er fragt, ob sie normal gehen oder maximiert, wenn das Formular zur Zeit minimiert wird ... –
ich meine Antwort aktualisiert. Ich habe die Frage missverstanden. –
Dies ist eine viel sauberere Lösung - sehr einfach zu implementieren. –
Wenn Sie den vorherigen Zustand speichern möchten, wann immer es eine Änderung ist (maximieren/minimieren), werden Sie in die SizeChanged
Ereignis Haken haben, nach this post on MSDN . Sie können die WindowState
dort bekommen und speichern.
Es gibt eine bessere Möglichkeit, als dies selbst zu speichern. Es ist bereits von der Windows-API erfasst. –
Sie können die Fenster Zustandsänderungen durch das Ereignis Resize verfolgen. Wie folgt aus:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
prevState = currState = this.WindowState;
}
protected override void OnResize(EventArgs e) {
if (currState != this.WindowState) {
prevState = currState;
currState = this.WindowState;
}
base.OnResize(e);
}
private FormWindowState prevState, currState;
}
- 1. Delphi Formular minimieren Problem
- 2. Formular programmgesteuert
- 3. Gibt es eine Möglichkeit, ein Fenster programmgesteuert zu minimieren
- 4. C# Minimieren if-Anweisung
- 5. Füllen Sie PDF-Formular programmgesteuert
- 6. Scipy minimieren Nicht
- 7. wie programmgesteuert ändern das Hintergrundbild auf Formular C#
- 8. C# Login-Formular funktioniert nicht
- 9. Minimieren des Speicherbedarfs in C-Programmen
- 10. Mehrere Dateieingabefelder programmgesteuert in einem Formular senden
- 11. Eingabe in ein Drupal-Formular programmgesteuert einfügen
- 12. Minimieren Sie alle geöffneten Fenster in C#
- 13. Wie Sie die Schaltfläche zum Minimieren in C# deaktivieren?
- 14. C# Beim Schließen der Taskleiste in die Taskleiste minimieren
- 15. C# Bericht programmgesteuert erstellen
- 16. C# programmgesteuert zu Bild
- 17. Programmgesteuert Neustart IIS7 (C#)
- 18. Entfernen eines nicht leeren Verzeichnis programmgesteuert in C oder C++
- 19. Handle Rdp ActiveX minimieren Ereignis
- 20. Minimieren Sie ein Fenster in WPF?
- 21. C# Warum schließt form.Close() das Formular nicht?
- 22. Deaktivieren Minimieren & Maximieren auf WinForm?
- 23. Compact-Framework: Minimieren und Wiederherstellen funktioniert nicht
- 24. "Minimieren" vertikale VIM Fenster spaltet
- 25. Abrufen eines C++ Klassennamens programmgesteuert
- 26. C#: Duplikat geöffnetes Formular
- 27. Entfernen von Steuerelementen aus einem Formular C#
- 28. Jframe in C# -Formular
- 29. Zeit programmgesteuert mit C# festlegen
- 30. C# -Datalist-Element programmgesteuert ändern
@Dan: Danke - Ich reparierte die Fehler - (Ich tippte im laufenden Betrieb und kopierte von pinvoke.net, was das Ref/Out-Problem falsch hatte ...) –
@Dan: Klingt so, dass es für dich funktioniert hat , mindestens ;) –