Press "Enter" to skip to content

Podstawy c# – czyli jak zapalić na ekranie lampkę od capslocka ;)

Pomysł na aplikację wyszedł w trakcie jednej z rozmów z moim narzeczonym, dłuższy czas temu. Chodziło o to, żeby wygodnie zasygnalizować, czy świeci się capslock. Oczywiście informuje nas o tym dioda na klawiaturze, ale chcieliśmy coś większego. Aplikacja wyszła całkiem prosta, a więc nadaje się do wyjaśnienia kilku podstaw.

Zaczniemy od „narysowania” interfejsu w XAML – czyli języku opisującym interfejs w silverlight czy WPF. Całość niech będzie dodaniem w sekcji Window takiej linijki na koniec.

Title="caps viewer" Height="126" Width="143" ResizeMode="NoResize" KeyUp="zapal" Name="okno" Background="Green" Topmost="True">

Co tutaj mamy? Na początku tytuł, który się pojawi w belce tytułowej. Możemy tam wpisać cokolwiek, lub zostawić puste. Nie wpłynie to na wygląd naszej aplikacji. Kolejne 2 parametry to wymiary okna, które również możemy dopasować do swoich potrzeb. Tutaj dobierane na oko. Kolejnym parametrem, jest tryb zmiany rozmiaru. Tutaj piszemy, że nie chcemy, aby użytkownik za pomocą myszy lub przycisków ktokolwiek rozszerzał, zwężał, wydłużał, skracał czy minimalizował naszą aplikację. Kolejny parametr, służy do wskazania która funkcja się wywoła, w momencie gdy wciśniemy przycisk i zabierzemy z niego palec. W tym przypadku będzie to funkcja, która w kodzie ma nazwę zapal. Dodam, że musi to być funkcja prywatna (inaczej tworzy drugą, pustą do wypełnienia) i musi należeć do tej klasy. Dalej mamy nazwę okna, do której będziemy mogli się odwołać w kodzie, kolor tła, które zależnie od zdarzenia będziemy mogli zmienić w celu sygnalizacji, oraz parametr odpowiedzialny za to, by okno było zawsze na wierzchu (jeżeli chcecie żeby nie było, ustawcie na false, lub usuńcie). Wszystkie parametry, które nie zostały wprost określone w kodzie xaml czy c#, przyjmą parametry domyślne. Jest ich sporo, możecie poczytać o nich w dokumentacji, lub przejrzeć okienko properties dla okna w edytorze wizualnym.
Sama funkcja zapal, umieszczona (jako jedyna) wewnątrz klasy okna (w której domyślnie jest tylko funkcja wywołująca inicjalizację komponentu) wygląda następująco.

private void zapal(object sender, KeyEventArgs e)
       {
           if (Keyboard.GetKeyStates(Key.CapsLock) == KeyStates.Toggled)
           {
               okno.Background = Brushes.Yellow;
           }
           else okno.Background = Brushes.Green;
       }

Czyli w skrócie, mamy event, który sprawdza stan klawiszy, jeśli capslock się świeci, to ma ustawić tło okna na żółte, w przeciwnym razie zielone. Żeby zoptymalizować kod, możemy np. uruchamiać event tylko przy zmianie wartości samego capsa;) ale to zostawiam jako zadanie domowe.
Ostatnią sprawą są wymagane przez aplikacje usingi.

using System.Windows; //bo mamy okno
using System.Windows.Input; //żeby się bawić klawiaturą
using System.Windows.Media; //żeby się bawić kolorami

Pozostałe można wywalić. Czemu? Nie używamy kolekcji, linq, ani żadnych kontrolek itp.
Jakie były najciekawsze elementy tego krótkiego kodu? Zablokowanie rozmiaru, pozostawienie naszej aplikacji zawsze na wierzchu, wykrycie capslocka i zmianę tła aplikacji w kodzie. Tak samo można zmieniać tło np. dla kontrolek.
Mam nadzieję, że komuś się coś stąd przyda;)
Powodzenia i miłego kodzenia.