Zachowywanie stanu okna
Czasami, pisząc własne aplikacje Windows Forms lub używając takich czcielibyśmy, aby aplikacja była choć trochę bardziej spostrzegawcza i np. zapamiętywała atrybuty okna (położenie, rozmiar oraz stan) gdy przestajemy z nich korzystać. Skoro je przestawiliśmy to znaczy, że tam nam lepiej pasują. Dlatego aplikacja zamiast z uporem pokazywać nam okno zawsze w tym samym miejscu mogła by umilić nam życie. Szczególnie, że z programistycznego punktu widzenia nie jest to operacja trudna i pracochłonna.
Ostatnio w mojej codziennej pracy z TFS korzystam z małego narzędzia - Fissum - dającego mi dostęp do zapytań o WorkItemy poza Visual Studio. Dzięki temu, gdy przeprowadzam kompilację, albo pobieram źródła mogę sobie na boku zarzązać WorkItemami. Wszystko by było fajnie, gdyby nie denerwująca przypadłość tej aplikacji. Codziennie, gdy ją odpalam muszę zmienić pozycjęo okna, z którego najczęściej korzystam, ponieważ aplikacja z uporem pokazuje je na środku ekranu oraz w wielkości jaka mnie nie satysfakcjonuje. Postanowiłem to zmienić ;)
Mając na uwadze przyszłe aplikacje, chciałem zbudować rozwiązanie, które będę mógł łatwo wielokrotnie wykorzystywać. Ponadto chciałem zminimalizować ilość kodu jaki będzie potrzebny, aby dany program wzbogacić o funkcję zapamiętywania stanu okien. Dodatkowym atutem rozwiązania byłoby zachowywanie wyżej wymienionych atrybutów w zależności od zalogowanego użytkownika.
Wykorzystując mechanizm Isolated Storage oraz serializację zbudowałem bardzo proste rozwiązanie, które łatwo wykorzystać w dowolnej aplikacji Windows Forms. Użycie jest banalnie proste. Po tym jak utworzymy obiekt okna podajemy go do specjalnej klasy, która na podstawie identyfikatora (również podanego) spróbuje pobrać zapisane dane o stanie. Jeżeli takie znajdzie to aplikuje je do podanego okna. Wywołanie ma następującą postać:
PersistedWindow.Prepare(myForm, "FormIdentifier");
Sprawa jest prosta.
W załączniku znajdują się dwie klasy implementujące powyższe funkcje.