poniedziałek, 13 kwietnia 2009

Przechowywanie i edycja ustawień aplikacji w .NET (prosto, szybko, sprawnie i elegancko)(przykłady oparte o .NET, w języku C#)

Chyba każda (nie trywialna) aplikacja potrzebuje przechowywać swoje ustawienia. Niektórzy, aby to osiągnąć tworzą bardzo skomplikowane rozwiązania, które są później trudne do zrozumienia i jeszcze trudniejsze do modyfikacji, czy utrzymania, a przecież jeśli piszemy aplikację na platformie .NET jest to takie proste.

W tym krótkim artykule pokazany zostanie właśnie bardzo prosty sposób opisujący jak można przechowywać te ustawienia i jeszcze prostszy sposób jak je zmieniać.

Do dzieła (jak dodać ustawienia?) ...

Na platformie .NET zaproponowano sposób w jaki można przechowywać ustawienia aplikacji, ustawienia te powinny być przechowywane w pliku z rozszerzeniem ".config". Jest to plik, dokument XML, którego nazwa powstaje w następujący sposób: nazwa pliku wykonywalnego aplikacji (razem z rozszerzeniem "exe") + ".config".

W Visual Studio taki plik może być dodany przy pomocy prostego kreatora. W Solution Explorer klikamy prawym przyciskiem myszy na projekcie, wybieramy Add.. -> New Item …

i pojawia się okno podobne do poniższego:

Wybieramy: "Application Configuration File" i klikamy przycisk "Add". Po tej operacji, możemy już edytować ustawienia. W tym celu wyieramy projekt (w Solution Explorer) -> Properties -> Settings.settings. Dwuklik i powinien pojawić się edytor jak poniżej:

Tutaj można zefiniować ustawienia jakie tylko chcemy. Ważne jest, że ustawienie zakresu dla każdej opcji, czyli czy ma być to ustawienie użytkownika (User), czy aplikacji (Application). Ustawienia użytkownika mogą być zmieniane przez konkretnego użytkownika i przechowywane są osobno dla każdego użytkownika aplikacji. Globalne ustawienia (ważne dla wszystkich użytkowników) przechowywane są i ustawiane globalnie dla wszystkich użytkowników jednocześnie.

A jak te ustawienia zmieniać?

Nie chciałbym wchodzić zanadto w szczegóły, ale zastanówmy się jakie są możliwości zmian tych ustawień w gotowej aplikacji.

Pierwszą możliwością jest edycja pliku .config, co sprowadza się do edycji dokumentu XML. Nie jest to zbyt dobry pomysł, użytkownik musi wiedzieć co to jest XML, jak go modyfikować, do tego dochodzi jeszcze ryzyko, że coś zepsuje.

Drugą możliwością jest przygotowanie odpowiedniego edytora (pewnego GUI dla edycji tych ustawień). Oczywiście może to być bardzo dużo pracy, a dodatkowo, w przypadku zmian ustawień (ich nazw, dodania nowego lub usunięcia istniejącego) trzeba zmienić również stworzony edytor.

Na szczęście na platformie .NET jest dostępny pewien edytor, który może automatycznie dostosować się istniejących ustawień, a jest nim ... PropertyGrid. Jak to zrobić? Bardzo prosto.

Najpier tworzymy okno które ma słyżyć edycji ustawień. Do tego okna dodajemy kontrolkę ProperyGrid i ustawiamy, aby obiektem prezentowany przez tą kontrolkę były nasze ustawienia, np. w ten sposób:

this.propertyGrid1.SelectedObject = Properties.Settings.Default;

Dodatkowo nasze okno powinno mieć przycisk "OK" lub "Save settings", służący do zapisu ustawień, czyli wykonujący kod podobny do poniżsego:

Properties.Settings.Default.Save();

Na końcu warto zwrócić uwagę, na temat klokalizacji, gdzie ustawienia są zapisywane. Nowy plik ".config" tworzony jest u zapisywany jest w katalogu, podobnym do poniższego:

"Documents and Settings\User name\Local settings\Application Data\Application name\"

Nowy plik ".config" nie przechowuje wszystkich ustawień, a jedynie ustawienia przypiusane danemu użytkownikowi.

Przykładowa aplikacja

Przykładowa aplikacja (Settings test, dostępna tutaj) pokazuje omówione elementy (prezentacja i edycja ustawień) w praktyce. Wyświetla tylko jedno okno, służące do edycji ustawień tej aplikacji W kontrolce właściwości możemy modyfikowac uistawienia należące do użytkownika, a naciśniecie przycisku "Save Settings" powoduje zapisanie ustawień.

Każdy może sobie sprawdzić czy ustawienia na pwno się zapisują, poprzez ich zmianę, wciśniecię przysisku zapisu i ponowne uruchomienie aplikacji. Pobierz przykładowy kod.

Podsumowanie

Mam nadzieję, że spodobał wam się ten prosty sposób umożliwienia użytkownikowi modyfikacji ustawień aplikacji.

Historia

7 komentarzy:

  1. Ciekawy tekst, brakowało mi informacji o pliku .config

    OdpowiedzUsuń
  2. Cieszę się że się podobało.
    Jeżeli chodzi o plik config, to zaledwie początek wiadomości, kolejną interesującą właściwością jest możliwość ustawienia logowania aplikacji poprzez ten plik. Ten problem poruszałem już we wcześniejszym artykule: "Śledzenie i logowanie zdarzeń na platformie .NET"

    OdpowiedzUsuń
  3. wlasnie czytam sobie calego Twojego bloga i jestem pod duzym wrazeniem :))

    Akurat co do przechowywania ustawien uzytkownika tą metodą to uważam, że sama w sobie jest do bani. Szczegolnie ta auto-lokalizacja pliku .config
    Pomysl Microsoftu byl dobry ale niedopracowali go odpowiednio imho.

    Polecam Ci rozszerzenie pomyslu Microsoftu, zaproponowane pod tym linkiem.
    http://glenncarney.wordpress.com/2007/10/13/updated-c-application-settings-utility-class/

    Od momentu odkrycia, korzystam z niego non-stop.
    Moim zdaniem to rozwiazanie wymiata w porownaniu prostota/mozliwosci.


    Pozdrawiam

    OdpowiedzUsuń
  4. Przyznam, że mi się ta metoda podoba, ale żeby podjąć dyskusję muszę zapoznać się z Twoją propozycją, a to dopiero po powrocie z urlopu - za jakieś 2 tygodnie.

    Pozdrawiam.

    OdpowiedzUsuń
  5. Zrzuty ekranu wcięło...

    OdpowiedzUsuń
  6. Niestety nie ma obrazków - poszły się "kochać" ;).

    OdpowiedzUsuń
  7. niestaty nie moge znaleźć już tych obrazków, więc nie naprawię :(

    OdpowiedzUsuń

Posty powiązane / Related posts