Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 268
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Autom. Laden & Speichern von Position und Größe eines Forms


Autor: Kosmo
Sprache: C#
Bewertung: 9
(1 Bewertung)
Anzahl der Aufrufe: 17214
  
Kick it on dotnet-kicks.de  

Beschreibung:

Oftmals möchte man das Hauptfenster seiner Anwendung beim Start so wieder vorfinden, wie man es verlassen hat.

Diese Component-Klasse kann das Laden und Speichern von Größe, Position und Zustand (WindowState) eines Forms übernehmen. Dazu zieht man diese Komponente aus der ToolBox in den Designer und stellt das Property "FormToSave" auf die zu speichernde Form. Über den Designer lässt sich auch einstellen was gespeichert werden soll.

Die Daten werden automatisch in einer XML-Datei beim Verlassen der Form (FormClosing-Event) im lokalen Applikationspfad (LocalUserAppDataPath) gespeichert. Beim nächsten Programmstart wird beim Erstellen der Form (Loading-Event) die Daten wieder eingelesen und angewendet.


Abgelegt unter: Fenster, XML, Form, Component, XmlDocument, WindowState, LocalUserAppDataPath.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using System.Xml;

namespace Kosmo
{
    public class FormStateSaver : Component
    {
        private Form form;
        private bool saveSize = true;
        private bool saveLocation = true;
        private bool saveWindowState = true;

        public Form FormToSave
        {
            get { return form; }
            set
            {
                RemoveEventsFromForm();
                form = value;
                AddEventsToForm();
            }
        }

        [DefaultValue(true)]
        public bool SaveSize
        {
            get { return saveSize; }
            set { saveSize = value; }
        }

        [DefaultValue(true)]
        public bool SaveLocation
        {
            get { return saveLocation; }
            set { saveLocation = value; }
        }

        [DefaultValue(true)]
        public bool SaveWindowState
        {
            get { return saveWindowState; }
            set { saveWindowState = value; }
        }

        private void AddEventsToForm()
        {
            if (!DesignMode && form != null)
            {
                form.Load += Form_Load;
                form.FormClosing += Form_FormClosing;
            }
        }

        private void RemoveEventsFromForm()
        {
            if (!DesignMode && form != null)
            {
                form.Load -= Form_Load;
                form.FormClosing -= Form_FormClosing;
            }
        }

        private void Form_Load(object sender, EventArgs e)
        {
            LoadFormState();
        }

        private void Form_FormClosing(object sender, EventArgs e)
        {
            SaveFormState();
        }

        protected string GetXmlPath()
        {
            return Path.Combine(Application.LocalUserAppDataPath, form.Name + ".xml");
        }

        public void LoadFormState()
        {
            if (form == null || (!saveLocation && !saveSize && !saveWindowState))
                return;

            string path = GetXmlPath();
            if (File.Exists(path))
            {
                XmlDocument xml = new XmlDocument();
                xml.Load(path);
                if (xml["Form"] != null)
                {
                    XmlNode root = xml["Form"];
                    if (saveWindowState && root["WindowState"] != null)
                    {
                        form.WindowState = (FormWindowState)Enum.Parse(typeof(FormWindowState), root["WindowState"].InnerText);
                    }
                    if (saveLocation && root["Location"] != null)
                    {
                        if (root["Location"]["X"] != null)
                            form.Left = Convert.ToInt32(root["Location"]["X"].InnerText);
                        if (root["Location"]["Y"] != null)
                            form.Top = Convert.ToInt32(root["Location"]["Y"].InnerText);
                    }
                    if (saveSize && root["Size"] != null)
                    {
                        if (root["Size"]["Width"] != null)
                            form.Width = Convert.ToInt32(root["Size"]["Width"].InnerText);
                        if (root["Size"]["Height"] != null)
                            form.Height = Convert.ToInt32(root["Size"]["Height"].InnerText);
                    }
                }
            }
        }

        public void SaveFormState()
        {
            if (form == null || (!saveLocation && !saveSize && !saveWindowState))
                return;

            XmlDocument xml = new XmlDocument();
            XmlNode root = xml.AppendChild(xml.CreateElement("Form"));
            Rectangle bounds = form.Bounds;
            if (form.WindowState != FormWindowState.Normal)
            {
                bounds = form.RestoreBounds;
            }
            if (saveLocation)
            {
                XmlNode loc = root.AppendChild(xml.CreateElement("Location"));
                loc.AppendChild(xml.CreateElement("X")).InnerText = bounds.X.ToString();
                loc.AppendChild(xml.CreateElement("Y")).InnerText = bounds.Y.ToString();
            }
            if (saveSize)
            {
                XmlNode size = root.AppendChild(xml.CreateElement("Size"));
                size.AppendChild(xml.CreateElement("Width")).InnerText = bounds.Width.ToString();
                size.AppendChild(xml.CreateElement("Height")).InnerText = bounds.Height.ToString();
            }
            if (saveWindowState)
            {
                root.AppendChild(xml.CreateElement("WindowState")).InnerText = form.WindowState.ToString();
            }
            xml.Save(GetXmlPath());
        }
    }
}
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)



Diese Snippets könnten für Sie interessant sein:
[C#] Fenster ohne Titelleiste bewegen
[C#] einmaliges öffnen eines MDI Child
[C#] Handle eines Windowsfensters
[C#] Fenster am Bildschirmrand andocken
[C#] Handle des aktiven Fensters ermitteln
[C#] Desktop anzeigen (alle Fenster minimieren)
[VB.NET] Fensterstatus festlegen
[C#] Fenstertitel im ColorDialog festlegen
[C#] Fenster wirklich in den Vordergrund des Desktops bringen
[C#] Handle eines WPF Fensters ermitteln
[C#] Live Messenger Rrring Funktion (Fenster zittern)
[C#] DirectX-Form
[C#] Objekt in XML speichern (Serialisieren)
[C#] Treeview in XML schreiben
[ASP.net] XML - HTML Transformation
[C#] XML Encoding eines XmlDocument ändern
[C#] XMLDocument in XDocument konvertieren
[C#] Rss Feed in XMLDocument laden
[VB.NET] XML Datei in DataSet einlesen
[VB.NET] Objekt mit dem XmlSerializer serialisieren
[VB.NET] XML Datei mit dem XmlSerializer deserialisieren
[C#] Image zu Base64 konvertieren und zurück
[C#] Generische XML-Serialisierung
[C#] CSV und XML-Datei Datenbank-Import (incl. valid-check)
[C#] Währungskurse in Datenbank speichern
[VB.NET] Einfaches Erstellen einer XML Datei in .Net
[C#] XML in DataTable laden
[C#] Intellisense Unterstützung für XML Dateien für LINQ
[C#] user.config und generische Listen
[C#] Dataset verschlüsseln
[C#] Xml Datei entschlüsseln
[ASP.net] XML Daten über einen Internet Proxy abfragen
[C#] XML-Programmkonfiguration / -Steuerung
[C#] Formatieren von Sonderzeichen für XML
[C#] Binärdatei in XML File speichern
[C#] Binärdatei aus XML Datei auslesen und abspeichern
[C#] leere Knoten aus XML Document entfernen
[C#] XML Kommentare entfernen
[C#] Austauch von kritischen Zeichen in einem String...
[C#] Excel-Export ohne Excel (auch für Web)
[C#] Ini-Datei-Klasse
[C#] TreeView Export To Xml OR Import from XMl
[VB.NET] Bild als XML Datei Speichern
[C#] Ein Object serialisieren
[C#] Ein Object deserialisieren
[C#] Konvertiert Code nach Example für XML-Kommentar
[C#] XMLIO - einfachstes (De)serialisieren von/zu XML-Dateien
[C#] Generisch XML De-/ Serialisieren
[C#] XML generieren mit Linq to XML
[C#] 3 arten der Serialisierung bzw Deserialisierung
[C#] Spracherkennung
[C#] Wunderground Wettervorhersage
[C#] Mit LINQtoXML XML Dateien erzeugen bzw. abfragen
[C#] ini Datei anlegen - mit Dictionary
[C#] Typen mit dem XmlSerializer (de-)serialisieren
[VB.NET] MDI Child Form nur einmal öffnen
[VB.NET] Ansichtsmodus für Forms (Alle Eingabefelder deaktivieren)
[VB.NET] Schliessen des Forms über X-Button verhindern
[C#] Form in den Windowsvordergrund bringen
[VB.NET] Form mit gedrückter linker Maustaste bewegen
[C#] Windows-Forms Panel frei positioniereren
[C#] Fixes Form in Höhe und Breite verdoppeln, Inhalt skalieren
[C#] Form ohne Rahmen verschieben
[VB.NET] Füllen von Comboboxen aus einem Textfile
[VB.NET] Eigene Form aus ClassLibrary DLL Aufrufen
[C#] Größe einer rahmenlosen Form ändern
[C#] DesignMode im Kontruktor
[C#] XMLDocument in DataSet konvertieren

schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.