Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

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. 

programowanie

Komentarze

0 nowych
  #1 08.04.2012 08:48

jak tylko widzę dotneta to muszę go zjechać :)

Demagog   4 #2 08.04.2012 10:59

Fajny, merytoryczny wpis, czyli to co berdzo lubię, a czego brak. Nie ma w/g mnie co się czepiać .NET i C#.
Pod linuxem jest Python, Ruby, Perl, czy ostatecznie bash.
A pod Windozę jest .NET i Powershell.
Choć i tak to w/g mnie branie ciężkiej artylerii do odstrzału komara.
A tutek dobry. Ląduje w zakładkach na lepsze czasy. :)

Druedain   14 #3 08.04.2012 11:21

@Demagog A mnie się zawsze wydawało, że to są języki wieloplatformowe (jak i dziesiątki innych niewymienionych przez Ciebie). Popularniejsze? Nadal najpopularniejsze są prawdopodobnie: Java, C, C++. Czy tego ktoś chce, czy nie… I nie są one przyspawane do jednej słusznej platformy ;)

@patryk9200 Wygląda to tak jakby domyślny układ elementów VS był ustawiony pod duże ekrany 4:3. Nie przeszkadzają Ci to, że masz tu tak wąski pasek na kod programu? Ja np. od pewnego czasu zaczynam od tego, że widok edytora mam na całą dostępną wysokość ekranu, a resztę rozmieszczam obok. Przy ekranach panoramicznych przestrzeni po bokach jest sporo, największym problemem jest mała wysokość.

Druga sprawa, to pisząc postscriptum powinno być PS, ewentualnie P.S., bo reszta form jest niepoprawna.

Druedain   14 #4 08.04.2012 11:23

PS Czym robiłeś zrzuty ekranu?

patryk9200   8 #5 08.04.2012 15:55

@Druedain - Akurat to, że mam tam tyle miejsca to moja decyzja, XAML tylko sporadycznie używam, a lubię widzieć co się tam dzieje. Można kod w osobnej karcie otworzyć, nie ma problemu.
W Visual Studio możesz dowolnie układać panele, a to jaki masz układ, to jest Twoja decyzja :)
XAML rozwinąłem tylko na potrzeby wpisu. Domyślnie mam go ukryty. Część zrzutów robiłem standardowo Print Screnem, natomiast odkryłem wczoraj ciekawy skrót w Windows 8 który robi zrzuty i automatycznie je zapisuje bez jakiejkolwiek interakcji z mojej strony :). Wystarczy wcisnąć przycisk Windows i Print Screen na klawiaturze. Dodatkowo jest efekt przyciemnienia całego ekranu dzięki temu wiemy, czy screen się zapisał. Jeśli chodzi o wycinanie, to robiłem to... nieśmiertelnym Paintem.

patryk9200   8 #6 08.04.2012 15:55

@Demagog. Dzięki wielkie! :)

patryk9200   8 #7 08.04.2012 15:57

Jeśli będę miał wystarczająco czasu to przedstawię też jak uruchamiać aplikacje .NET na Mono oraz...
kompilację kodu PHP do CIL dzięki czemu skrypty PHP stają się znacząco wydajniejsze.

  #8 08.04.2012 16:10

Nice -- no to czekamy na 2 część w której mam nadzieje pokażesz jak jakąś podstawową aplikacje napisać :) - -Nice

sgj   11 #9 08.04.2012 16:45

"natomiast odkryłem wczoraj ciekawy skrót w Windows 8 który robi zrzuty i automatycznie je zapisuje bez jakiejkolwiek interakcji z mojej strony :)."

Wypadałoby się jeszcze nauczyć używać PrtScr w połączeniu z altem.

patryk9200   8 #10 08.04.2012 17:35

@sgj, znam go od dawien dawna, niestety mam pewną aplikację przez którą ten skrót nie działa poprawnie.

patryk9200   8 #11 08.04.2012 17:47

@RaveStar - owszem, można taki program stworzyć, ale jaki jest jego sens w kontekście tego wpisu?
W tej serii bardziej chcę przybliżyć budowę Visual Studio oraz sam język C# bez zagłębiania się w jak np. zasugerowałeś lazy loading, ew. jeśli znajdę sporo czasu na nową serię to owszem takie smaczki opiszę. Jednak najpierw dokończę tę serię i inne które mam od pewnego czasu w planie.
Nawet przykłady kodu które pokażę będą naprawdę bardzo proste, chociaż można to samo zrobić szybciej i lepiej, to ze względu na to, ze chcę w sposób prosty pokazać jak można zbudować taką aplikacje nie sugerując się wydajnością czy możliwościami innej implementacji. Postaram się tak, żeby było to w miarę zrozumiałe dla osób znające inne języki w tym np. PHP.

Jednocześnie, było by ciekawie, jeśli Ty np. w javie a jeśli potrafisz w np. C# lub innym wybranym języku takie lub inne rozwiązania przedstawił. Myślę, że była by to bardzo ciekawa seria, a jednocześnie mogli byśmy siebie wzajemnie uzupełniać. Również przedstawienie różnic między językami programowania było by interesujące, tzn. same fakty bez ew. sugestii który język lepszy, bo jak oboje to wiemy, duży wpływ maja tu własne przekonania, potrzeby i zainteresowania.

Demagog   4 #12 08.04.2012 21:38

@Druedain
Racja po twojej stronie przyznaje.
Te języki, które wymieniłem są w/g mnie najlepsze, bo mają najwięcej bibliotek, szybko się w nich pisze.
No i pod linuchem robi się to poprostu najwygodniej.
Możesz nawet sobie coś takiego napisać w Ocamlu, albo w czystym asemblerze.
Ale pytanie brzmi: po co?

@patryk9200

Jestem za, a nawet przeciw. Może ktoś (np. takie beztalencie, jak ja) nauczy się czegoś.

patryk9200   8 #13 09.04.2012 11:37

@all, a pisaniem aplikacji na Windows 8 w HTML5 i JavaScript jesteście zainteresowani? :D

  #14 09.04.2012 14:03

@patryk9200

Jasne! Jestem ciekaw czy MS dołożył coś do JSa od siebie.

siararadek   3 #15 09.04.2012 14:14

Mógłbyś patryk zamieścić, bo sam coś skrobię w WPF i z chęcią zobaczyłbym jak to wygląda w JS :)

patryk9200   8 #16 09.04.2012 21:16

@siararadek ok, postaram się coś naskrobać ;D

Druedain   14 #17 10.04.2012 13:06

@Demagog Na Linuksa przeniosłem się jakieś dwa lata temu. Bardzo niechętnie zresztą… Po prostu łatwiej było mi tam pewien program napisać (MinGW ogarnąłem, ale GTK+ na Windowsie już nie – oczywiście to nie jest argument przeciw Windowsowi, tylko przeciwko trudom ogarniania tych rzeczy (z perspektywy początkującego programisty)). Później poszło z górki. Też uważam, że w przypadku wielu języków dużo prościej jest wystartować wybierając Linuksa niż Windowsa :)
Nie zgodzę się jednak w przypadku Rubiego. Wybrać konkretną implementację i zacząć tworzyć jest łatwo, ale dla administratora to jest istne piekło. Obecnie masz około 150 różnych implementacji Rubiego i teraz wyobraź sobie, że przychodzi do Ciebie 10 programistów, którzy oczekują takiej, a takiej implementacji, w takiej, a takiej wersji. Standaryzacja w pewnym stopniu hamuje innowacyjność, ale jest za to niesamowicie pragmatyczna. Z drugiej wolę nie wiedzieć jak to wygląda z Rubym na Windowsie :P

DonM$   10 #18 16.04.2012 19:21

Jako programista .net muszę powiedzieć, że jako kurs ten wpis się nie sprawdzi, korzystanie z nadchodzącej wersji vs to zły pomysł, zwykły śmiertelnik to raczej powinien użyć vc# express 2010, czyli to co obecnie jest dostępne.
Ogólnie jak chcesz kogoś coś nauczyć to dużo z tego nie wyniesie, ale jeżeli cykl ma tylko przybliżyć jak zrobiłeś program i trochę wyjaśnić .net to dobry pomysł.