Budowanie aplikacji w C# i .NET część I

Zgodnie z obietnicą daną tfl przedstawię, w sposób możliwie najprostszy jak stworzyć przykładową aplikację Hosts Editor którą to pokazałem i udostępniłem w moim wcześniejszym wpisie. Wpis jest dla osób zainteresowanych i niezaznajomionych z Visual Studio oraz językiem C# i platformą .NET. Z racji zakresu materiału który tu przedstawię wpis zostanie podzielony na kilka części.

Podstawy

Aby móc pokazać Wam jak stworzyć taką lub podobną aplikację przedstawię kilka danych i informacji niezbędnych do zbudowania takiego programu. Cały program został napisany w języku C# który ma bardzo wiele wspólnego z językiem Java. Program wykorzystuje platformę .NET Framework która jest środowiskiem uruchomieniowym oraz dostarcza liczne biblioteki programistyczne.

Trochę o języku C#

Język C# jest językiem obiektowym kompilowanym do kodu pośredniego (bajtowego) CIL wykonywanym w środowisku uruchomieniowym .NET Framework, Mono lub dotGNU. Uruchomienie takiego programu bez środowiska uruchomieniowego podobnie jak domyślnie w javie jest niemożliwe.

Język ten ma sporo cech wspólnych z językami Object Pascal, Delphi, C++ i Java.
Po szczegóły na jego temat zapraszam na stronę Wikipedii.

Platforma .NET Framework

Jest to - za wikipedią - platforma programistyczna opracowana przez Microsoft, obejmująca środowisko uruchomieniowe (Common Language Runtime – CLR ) oraz biblioteki klas dostarczające standardowej funkcjonalności dla aplikacji.

Środowisko programistyczne

Do pisania aplikacji w C# wykorzystuję środowisko programistyczne Visual Studio Microsoftu. Są również dostępne otwarte środowiska dla C# jak np. MonoDevelop czy SharpDevelop.

Z racji używania systemu Windows 8 wykorzystuję Visual Studio w wersji 11 które wspiera pisanie aplikacji w interfejsie Metro UI. Jeśli będziecie zainteresowanie, to pokażę jak takie aplikacje tworzyć, co więcej, można je budować w HTML5 oraz JavaScript!. W nowych okienkach specjalnie dla aplikacji metro jest stworzona biblioteka WinRT pozwalająca na interakcję z systemem operacyjnym, danymi oraz innymi aplikacjami etc. Mamy możliwość korzystania z niej m.in. w JS. WinRT ciekawie jest opisany na tym blogu.

Wracając do tematu- Visual Studio 11 poza wsparciem dla nowych okienek ma też nowy interfejs nawiązujący do nowego Metro. Jednak jego budowa poza kolorystyką, ikonami i niektórymi elementami nie odbiega od wersji Visual Studio 10. Zarówno wersja 10 jak i 11 jest dostępna do pobrania z dobrychprogramów w wersji trial pod tym linkiem. Istnieje też Visual C# Express które jest całkowicie darmowe i prawie identyczne aczkolwiek nieznacznie okrojone w stosunku do wersji Ultimate, dostępne tutaj. Dla osób zainteresowanych wolną implementacją środowiska dla C# zapraszam do pobrania SharpDevelop jednak jego budowa jest inna niż Visual Studio dla tego pokazane tu metody będą najprawdopodobniej niezgodne z tym środowiskiem.

Dla wersji 10 jest dostępne częściowe tłumaczenie na język polski. Ja z racji przyzwyczajenia wolę wersję angielską.

WPF - co to jest i do czego służy

W celu budowy GUI wykorzystamy WPF czyli Windows Presentation Foundation. WPF jest to nazwa silnika graficznego oraz API dostępnego od wersji 3 .NET Framework wchodzącego w skład WinFX (API oparte na platformie .NET dostępne od Windows Vista).

Za wikipedią -WPF integruje interfejs użytkownika, grafikę 2D i 3D, multimedia, dokumenty (nazwa kodowa Metro) oraz generowanie/rozpoznawanie mowy (do aplikacji sterowanych głosem). W aplikacji udostępnionej w moim poprzednim wpisie wykorzystałem do jej budowy starszą technologię tj. Windows Forms. W tym wpisie pokażę Wam jak stworzyć aplikacje w możliwie najnowszej technologii.

Tworzenie projektu aplikacji w Visual Studio

Jeśli posiadasz już zainstalowane środowisko programistyczne, to po jego uruchomieniu przejdź do File>New>Project.

W nowo otwartym oknie mamy listę dostępnych schematów. Jest to całkiem spora lista zawierająca schematy od prostych konsolowych programów po biblioteki klas, usługi, aplikacje okienkowe, strony www, wtyczki office, silverlight i wiele innych.

Na nasze potrzeby wybieramy Templates>Visual C#>Windows>WPF Application.

W pole name wpisujemy nazwę aplikacji np. Edytor hostów a na samej górze okna wybieramy wersję platformy .NET np. 3.5 (która ma wymagania sprzętowe podobne jak Java w przeciwieństwie do wersji 4, o które zarzuty stawiał RaveStar). Zatwierdzamy projekt klikając OK. Po chwili tworzenia projektu przez Visual Studio ukaże nam się widok projektu z jednym okienkiem aplikacji.

Budowa Visual Studio - czyli co gdzie, kiedy

Po otworzeniu projektu pojawi nam się okno prezentujące się mniej więcej w ten sposób:

W zależności od ustawień Visual Studio niektóre panele otwierają się domyślnie lub też nie. W moim wypadku jest jak na screenie wyżej. W cetrum aplikacji mamy puste okno naszego programu. Po lewej jak i prawej stronie okna mamy zakładki np. document outline, data sources oraz toolbox, proporties, solution explorer, team explorer (tylko w wersji ultimate) i class view.

Jeśli klikniemy w którąkolwiek z zakładek to rozwiną się one w sposób widoczny na zrzucie, tu proporties oraz toolbox. Pinezka na otwartych panelach pozwala na ich przypięcie lub sprawienie aby chowały się automatycznie.

Na dole pomiędzy panelami mamy okienko z kodem XAML. Jest to kod znaczników bazujący na XML dla tego, każdy kto zna XML bardzo szybko się w nim zorientuje, podobnie osoby znające XHTML ew. HTML w sposób w miarę szybki powinny go pojąć. Kod ten pozwala budować interfejs użytkownika w sposób zbliżony do HTML z tym, że nie ma tu czegoś takiego jak CSS i JS. Każdą kontrolkę w .NET możemy za jego pomocą opisać. Jak to działa oraz jakie ma możliwości opiszę w kolejnej części serii.

Na samej górze programu mamy standardowo menu.

File pozwala dodawać projekt, tworzyć nowe, zapisywać, drukować itp. W Edit znajdziemy m.in. opcje wyszukiwanie, kopiowania, usuwania, wklejania itp. Kolejne elementy menu już są zapewne Wam mniej znane, lecz my na potrzeby tej serii wpisów użyjemy tylko kilka z nich, opiszę je przy okazji kolejnych wpisów.

Na belce menu jest opcja Start a obok niej lista z opcjami do wyboru: Debug oraz Relase.

Pierwsza z nich buduje i uruchamia aplikację w trybie odpluskwiania. Jest to tryb podczas którego można przetestować aplikację a Visual Studio automatycznie wykrywa większość błędów i zaznacza miejsca w kodzie gdzie one wystąpiły. W trybie Relase aplikacja jest kompilowana bez odpluskwiacza, w tym trybie buduje się aplikację końcową, przetestowaną i gotową do upublicznienia.

W tym punkcie omówię za co odpowiedzialne są poszczególne panele

Toolbox

Panel ten zawiera listę kontrolek które używamy do budowy programu. Kontrolki możemy dodawać poprzez chwycenie wybranej z listy i upuszczenie w wybranym miejscu w oknie programu.

Document outline

Zawiera listę kontrolek w naszym oknie. Pozwala na ich ukrywanie (zrobienie niewidocznymi). Pozwala również zmieniać ich położenie w hierarchii kontrolek oraz usuwać, edytować, wklejać, zmieniać styl itp.

Data sources

Ten panel zawiera źródła danych w naszej aplikacji np. bazy danych.

Solution Explorer

Zawiera listę plików oraz katalogów w naszym projekcie. Pozwala na dodawanie nowych elementów, wybieramy w tym miejscu co chcemy edytować, usuwać, publikować, dodawać referencje, rozwiązania i wiele, wiele więcej.

Team explorer (dostępny w wersji Ultimate)

Jest to panel który wyświetla nam nasz „team” czyli zespół osób które równocześnie z nami pracują nad danym programem.

Class view

Widok klasy pokazuje nam budowę klasy, jej funkcje, typy etc.

Proporties

Z tego panelu będziemy więcej korzystać, w zależności od zaznaczonego elementu czy obecnie edytowanego pliku pokazuje nam ustawienia dla niego. Przykładowo w tym miejscu możemy zmienić tytuł okna, jego kolorystykę, zachowanie, rozmiar, położenie etc.

Zakończenie

W tym miejscu zakończę pierwszą część serii, w kolejnej opiszę szczegółowo wybrane kontrolki oraz jak je programować, stworzymy GUI dla naszej aplikacji. Mam nadzieję, że wpis się spodoba, jeśli zauważycie jakiekolwiek błędy lub chcielibyście aby którąś kwestię rozwinąć piszcie w komentarzach.

P.S

Seria ta nie ma na celu wykazać wyższości C# i .NET nad innymi technologiami. Celem wpisu jest zgodnie z obietnicą daną TFL przybliżenie całej platformy oraz tego jak aplikacja przedstawiona w jednym z moich wpisów została zbudowana.

Bardzo proszę o niewszczynanie wojny na temat sensowności wykorzystania C# i .NET, nie o to tu chodzi. Jeśli uważasz, że można zrobić to lepiej w innej technologii to opublikuj własny wpis w którym przedstawisz swoją metodę. Miło będzie jeśli przedstawisz również sensowne argumenty za i przeciw.

Chciałbym na zakończenie również zwrócić uwagę na zachowanie RaveStar który jak to określił "Wciąż nie widzę kodu. Czyżby Pan Ctrl+C Ctr+V był autorem? ..." taki komentarz który insynuuje jako bym skopiował całą aplikację jest moim zdaniem niestosowny.

Zwrot "Dlaczego .NETowcy robią z kodu tajemnicę skoro i tak wiadomo, że poza 2+2 tam nic nie ma?" również jest irracjonalny. Nikt z niczego tajemnicy nie robi, a wiele aplikacji w .NET np. na codeplex jest otwarta. Nie każdy publikuje swoją pracę, w końcy trzeba żyć z czegoś. Aplikacja jest całkowicie mojego autorstwa, nie ma tu ani jednej linijki "copy-paste". Z powodu braku czasu, ilość czasu potrzebą na opisanie wszystkiego oraz to, że postanowiłem rozwinąć wpis w większą serię przybliżającą metody użyte do budowy aplikacji nie byłem w stanie wcześniej upublicznić kodu. Pojawi się on z kolejnymi wpisami. Proszę aby RaveStar jeśli może zachował złośliwe komentarze dla siebie.