Sie können auch die Windows-Registrierung verwenden, um den anwendungsspezifischen Status zu speichern. In der Registrierung befinden sich pro Benutzer und pro Maschine Schlüssel - beide oder beide sind für Sie verfügbar. Einige Benutzer verwenden beispielsweise die Registrierung, um den Standort und die Größe des Anwendungsfensters beim Beenden zu speichern. Wenn die App neu gestartet wird, können Sie das Fenster entsprechend seiner letzten bekannten Größe positionieren und skalieren. Dies ist ein kleines Beispiel für den Zustand, den Sie in der Registrierung speichern können.
es tun Sie verschiedene APIs für die Speicherung und den Abruf verwenden würde. Insbesondere rufen SetValue und GetValue die Microsoft.Win32.RegistryKey-Klasse auf. Es kann Bibliotheken geben, die hilfreich sind, um einen komplexen Zustand der Registrierung zu erhalten. Wenn Sie einfache Fälle (ein paar Strings und Zahlen) haben, dann ist es einfach, es einfach selbst zu machen.
private static string _AppRegyPath = "Software\\Vendor Name\\Application Name";
public Microsoft.Win32.RegistryKey AppCuKey
{
get
{
if (_appCuKey == null)
{
_appCuKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(_AppRegyPath, true);
if (_appCuKey == null)
_appCuKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(_AppRegyPath);
}
return _appCuKey;
}
set { _appCuKey = null; }
}
private void RetrieveAndApplyState()
{
string s = (string)AppCuKey.GetValue("textbox1Value");
if (s != null) this.textbox1.Text = s;
s = (string)AppCuKey.GetValue("Geometry");
if (!String.IsNullOrEmpty(s))
{
int[] p = Array.ConvertAll<string, int>(s.Split(','),
new Converter<string, int>((t) => { return Int32.Parse(t); }));
if (p != null && p.Length == 4)
{
this.Bounds = ConstrainToScreen(new System.Drawing.Rectangle(p[0], p[1], p[2], p[3]));
}
}
}
private void SaveStateToRegistry()
{
AppCuKey.SetValue("textbox1Value", this.textbox1.Text);
int w = this.Bounds.Width;
int h = this.Bounds.Height;
int left = this.Location.X;
int top = this.Location.Y;
AppCuKey.SetValue("Geometry", String.Format("{0},{1},{2},{3}", left, top, w, h);
}
private System.Drawing.Rectangle ConstrainToScreen(System.Drawing.Rectangle bounds)
{
Screen screen = Screen.FromRectangle(bounds);
System.Drawing.Rectangle workingArea = screen.WorkingArea;
int width = Math.Min(bounds.Width, workingArea.Width);
int height = Math.Min(bounds.Height, workingArea.Height);
// mmm....minimax
int left = Math.Min(workingArea.Right - width, Math.Max(bounds.Left, workingArea.Left));
int top = Math.Min(workingArea.Bottom - height, Math.Max(bounds.Top, workingArea.Top));
return new System.Drawing.Rectangle(left, top, width, height);
}
Dieser Code verwendet Microsoft.Win32.Registry.CurrentUser, und so setzt sie und ruft benutzerspezifischen App-Einstellungen. Wenn Sie den maschienenweiten Status festlegen oder abrufen, möchten Sie Microsoft.Win32.Registry.LocalMachine.
Und denken Sie daran, Berechtigungen für die Konfigurationsdatei zu ermöglichen. Erwarten Sie, dass app.exe.config nur für Administratoren schreibbar ist. – Richard
Danke.Welchen Abschnitt würde ich benötigen, um die Einstellungen in Properties.Settings.Default zu erhalten? –
Ich sehe, ich habe deine Frage nicht gut genug gelesen. Die von mir vorgeschlagene Methode ist für allgemeine Änderungen an Konfigurationsdateien. Ich habe meine Antwort aktualisiert, um eine andere (bessere) Möglichkeit zum Ändern der Einstellungen für den Assembly-Bereich anzuzeigen. –