Witam, jak wy zapamiętujecie ustawienia programu na stałe ? Chyba popełniłem błąd bo moje wszystkie ustawienia zapisują się do pliku txt a zauważyłem, że istnieje takie coś jak properties settings i tam powinno się to robić.
Zapisz to w jakiejś klasie i skorzystaj z serializacji danych np. do XML. Domyślnie serializowane są publiczne własności (no chyba, że mają [XmlIgnore]
) i klasa musi mieć domyślny konstruktor. Podczas odczytu przy Deserialize
zostanie z automatu utworzony obiekt takiej klasy oraz uzupełnione jej własności. Przykłady znajdziesz, bo jest tego pełno.
Możesz też dokładać rzeczy do app.config'a
.
Tworzenie jakichś własnych wymyślnych formatów do prostej konfiguracji to trochę takie wynajdowanie koła na nowo.
Możesz rzucić okiem na klasę ConfigurationManager
XML albo jakaś baza danych
Ja robie tak: jak mało opcji i mało będę zmieniał poza aplikacją to: ConfigurationManager (link u kolegi na górze),
jak więcej danych robię klasę zbiorczą i obiekt serializjuje do XML'a.
XML jest bardziej elastyczny, można go łatwiej przesyłać/podmieniać, w przyszłości przy centralizacji można do bazy wrzucić/pobrać.
P
usm_auriga napisał(a):
Witam, jak wy zapamiętujecie ustawienia programu na stałe ? Chyba popełniłem błąd bo moje wszystkie ustawienia zapisują się do pliku txt a zauważyłem, że istnieje takie coś jak properties settings i tam powinno się to robić.
Ustawienia programu zapisuję w Settings (dostępne w Properties projektu).
Odczytuję przy starcie a zapisuję przy wyjściu/zmianie tak jak potrzeba.
Odczyt ustawień:
private void FrmMain_Load(object sender, EventArgs e)
{
//FrmMain position and size
this.StartPosition = FormStartPosition.Manual;
this.Left = Properties.Settings.Default.MainWindowLeftPosition;
this.Top = Properties.Settings.Default.MainWindowTopPosition;
this.Width = Properties.Settings.Default.MainWindowWidth;
this.Height = Properties.Settings.Default.MainWindowHeight;
if (Properties.Settings.Default.IsMaximized == true)
{
this.WindowState = FormWindowState.Maximized;
}
}
Zapis ustawień:
Properties.Settings.Default.MainWindowLeftPosition = this.Left;
Properties.Settings.Default.MainWindowTopPosition = this.Top;
Properties.Settings.Default.MainWindowHeight = this.Height;
Properties.Settings.Default.MainWindowWidth = this.Width;
if (this.WindowState == FormWindowState.Maximized)
{
Properties.Settings.Default.IsMaximized = true;
}
else
{
Properties.Settings.Default.IsMaximized = false;
}
Properties.Settings.Default.Save();
Najlepiej plain text czy jakis formatowany jak typu xml, zeby mozna bylo latwo edytowac z palca bez potrzeby wlaczania aplikacji.
Ja zapisuję zazwyczaj w rejestrze. Pamiętaj, że ważne jest też, gdzie zapisujesz te dane. Powinieneś pliki zapisywać w katalogu appdata.
Na jeszcze jedną rzecz zwrócę uwagę. (oprocz tego co wyzej zasugerowalem) czytając pomysł Kolegi o rejestrze (który tez jest dobry).
Jeżeli aplikacja może być uruchamiana przez wielu użytkowników można rozważyć zapisywanie ustawień w katalogu użytkownika (folder pobieramy z wykorzystaniem Environment.SpecialFolder).
Dzięki temu jedna aplikacja ma rożne ustawienia dla rożnych użytkowników.
A drugą zaleta (też ważna)... nie zawsze w lokalizacji aplikacji można zapisywać (brak praw dostępu, albo nośnik nie zapisywany).
P
Jak widzisz pomysłów dostarczone przez Kolegów jest kilka. Sam musisz pomyśleć na czym Ci zależy i co użyjesz.
Podsumowując, nie ważne jak będziesz zapisywał. Czy to będzie plik XML, czy rejestr, czy plik INI. Ważne, żeby zapisywać takie dane w odpowiednich miejscach (rejestr - klucz HKCU, pliki - folder AppData) i robić to w sposób wygodny. Czyli bez sensu jest tworzenie pliku tekstowego np. takim kodem:
List<string> settings = new List<string>();
settings.Add("FormWidth=" + form.Width.ToString());
//i dalej zapis do pliku
bo masz już do tego gotowe mechanizmy. Więc tak, jak mówi poprzednik, "sam musisz pomyśleć na czym Ci zależy i co użyjesz".
Już wiesz, że masz do dyspozycji XML, serializację, Settings, czy też rejestr.
...
Jeżeli aplikacja może być uruchamiana przez wielu użytkowników można rozważyć zapisywanie ustawień w katalogu użytkownika (folder pobieramy z wykorzystaniem Environment.SpecialFolder).Dzięki temu jedna aplikacja ma rożne ustawienia dla rożnych użytkowników
...
Niestety ludzie piszący pod windę rzadko kiedy mają takie przebłyski.
Mieliście racje, będzie trzeba wpisywać użytkownika i zapisywać ustawienia, szef tak kazał.
Polecam Settings. Działa prawie automagicznie.
Od razu się zapisuje w odpowiednich folderach nawet z numerem wersji programu + jest prosty sposób na aktualizację ustawień ze starszej wersji do nowszej.