Visual C# .NET – przykłady aplikacji

April 5, 2007

Witam.
Nareszcie święta, teraz będę mógł poświęcić więcej czasu na to co lubię, czyli programowanie. Jako, że ostatnio czytałem trochę o C#, postanowiłem napisać artykuł, w którym przedstawię i opiszę kilka przykładowych aplikacji (dokładnie: notatnik i kalkulator). Jeżeli chcesz czytać dalej, dobrze jest znać przynajmniej podstawy C#. Jeżeli nie znasz wogóle tego języka zapoznaj się z zawartością tego linku:
Visual C# .NET – jak zacząć?

Następną potrzebną rzeczą oprócz znajomości samego języka jest środowisko programistyczne. Polecam Microsoft Visual C# 2005 Express Edition. W poznaniu środowiska pomoże Ci poniższy film. Przedstawiony jest tam cały proces od pobrania środowiska do tworzenia w nim projektów. Nawet Ci co nie znają angielskiego obserwując czynności tam wykonywane mogą naprawdę wiele zrozumieć.

I. Prosty edytor tekstu
Pierwszą aplikacją jaką pragnę Ci zaprezentować jest prosty edytor tekstu z funkcjami: otwórz plik, zapisz, drukuj, wytnij, wklej itp.

Pełne źródło programu: Bardzo prosty edytor tekstu w C# (source)
Wersja skompilowana: Bardzo prosty edytor tekstu w C# (bin)

Kod w postaci HTML (pokolorowany): Kliknij tutaj

Otwórz powyższy link. Może nie będzie najwygodniej, jednak gdybym chciał ten kod tutaj wkleić możesz się domyślić jak ten wpis by wyglądał 😉

1. Zmienna CurrentFileName
Na samym początku mamy deklarację zmiennej CurrentFileName typu string. Następnie w metodzie public Form1() po InitializeComponent(); mamy przypisanie zmiennej CurrentFileName wartości nothing. Przyjąłem, że ta zmienna będzie trzymała informację czy plik, który jest edytowany w naszym programie został już zapisany. Jeżeli został zapisany zmienna będzie miała w sobie ścieżkę do tego pliku, jeżeli nie został jeszcze zapisany zmienna będzie przechowywała wartość nothing.

2. Nowy dokument
Przyglądnijmy się metodzie nowyToolStripMenuItem_Click. Jest ona wywoływana, gdy użytkownik kliknie w górnym menu: Plik->Nowy. Na początku deklaracja zmiennej MsgBoxText, a następnie przypisanie jej wartości. W zmiennej będzie treść komunikatu. Następnie instrukcją warunkową if sprawdzamy, czy kontrolka richTextBox1 została zmodyfikowana (wpisano coś do niej, usunięto itp.). Jeżeli tak to wyświetla się komunikat z pytaniem czy zapisać zmiany w dokumencie, jeżeli użytkownik kliknie na przycisk Tak, sprawdzamy czy dokument nie był wcześniej zapisywany (wtedy wywołamy metodę zapiszJakoToolStripMenuItem_Click(sender, e);, gdzie pojawi się okienko do wyboru gdzie ma być plik zapisany), natomiast gdy plik został już wcześniej zapisany to jak pisałem na początku w zmiennej CurrentFileName będzie ścieżka do tego pliku. Wtedy po prostu nadpisujemy plik bez wyświetlania żadnych okienek. Poniżej widać słowo kluczowe else, tyczy się ono instrukcji if, w której sprawdzaliśmy, czy kontrolka richTextBox1 została zmodyfikowana. Kod po else wykona się gdy nie została ona zmodyfikowana. Widzimy tam metodę, która po prostu czyści zawartość kontrolki richTextBox1.

3. Zawijanie wierszy
Odnajdź w kodzie metodę zawijanieWierszyToolStripMenuItem_Click. W pierwszej linijce widzimy, jak wartości WordWrap kontrolki richTextBox1 przypisywana jest zanegowana wartość WordWrap. Coś jak a = nieprawda, że a, czyli jeżeli a miało wartość true (prawda) to przypisywana jest wartość false (fałsz). Właściwość WordWrap odpowiada za to, czy w kontrolce richTextBox tekst ma być zawijany czy nie. Poniżej analogiczna systuacja, tylko, że z inną kontrolką i właściwością. Następne linijki, sprawdzamy instrukcją warunkową if, czy właściwość Checked kontrolki zawijanieWierszyToolStripMenuItem ma wartość true (prawda) i odpowiednio zmieniamy ustawienia suwaków (ScrollBars). Poniżej mamy kilka metod typu Undo();, Cut();, Copy(); czy Paste(); opisywać ich nie potrzeba, każdy powinien się pomyślić co one robią.

4. Czcionka
Znajdź metodę czcionkaToolStripMenuItem_Click. Najpierw widzimy, że jest wyświetlane okno wyboru czcionki, następnie wybrana czcionka jest ustawiana jako czcionka w komponencie richTextBox1.

5. Zapisz jako…
Przyjżyjmy się teraz metodzie zapiszJakoToolStripMenuItem_Click. Na początku wywołanie okna zapisywania pliku i instrukcją warunkową if sprawdzenie zwróconej wartości przez okno dialogowe. Jeżeli zwrócona wartość to OK wtedy zapisujemy plik. Poniżej widzimy przypisanie do zmiennej CurrentFileName ścieżki zapisanego pliku. Rolę tej zmiennej opisałem w punkcie pierwszym.

6. Otwórz
Teraz odnajdź metodę otwórzToolStripMenuItem_Click. Służy ona do otwierania pliku i wczytywania jego zawartości do komponentu richTextBox1. Działanie analogiczne jak w Zapisz jako…, tylko zamiast zapisywać, otwieramy plik.

7. Zapisz
Bardzo prosta metoda zapiszToolStripMenuItem_Click. Sprawdzamy czy plik już był wcześniej zapisywany (poprzez sprawdzenia wartości zmiennej CurrentFileName), jeżeli był to nadpisujemy tamten plik, jeżeli nie był, wywołujemy metodę zapiszJakoToolStripMenuItem_Click.

8. Godzina/data
Metoda godzinadataToolStripMenuItem_Click wstawia aktualną godzinę i datę do dokumentu. Deklarujemy zmienną CurrTime i przypisujemy jej wartość aktualnej daty i godziny (DateTime.Now). Następnie wstawiamy tą datę wcześniej ją przekształcając do odpowiedniego formatu za pomocą String.Format(…);.
Więcej o formatowaniu czasu i daty:
Formatting Date and Time Values In .NET by Bradley L. Jones

9. Drukuj
Zajmiemy się teraz metodami drukujToolStripMenuItem_Click i printDocument1_PrintPage. Przed nimi widzisz dwie zadeklarowane zmienne. Pierwsza (fileToPrint) będzie zawierała zawartość pliku do wydrukowania, a druga (printFont) czcionkę jaką tekst ma być wydrukowany. Poniżej w metodzie drukujToolStripMenuItem_Click do zmiennej printPath przypisujemy ścieżkę do katalogu systemowego. Następnie zapisujemy nasz dokument w tym katalogu w pliku o nazwie temp.txt. Teraz zmiennej fileToPrint przypisujemy zawartość naszego pliku temp.txt za pomocą System.IO.StreamReader();. Poniżej zmiennej printFont przypisujemy czcionkę z komponentu richTextBox1. Następnie drukujemy plik (printDocument1.Print();) i zamykamy zmienną fileToPrint z treścią naszego dokumentu (fileToPrint.Close();). Na końcu usuwamy plik temp.txt za pomocą File.Delete(…);. Wszystko było proste, tylko zapomnieliśmy o metodzie printDocument1_PrintPage, która odpowiada za drukowanie dokumentu. Na początku widzimy zadeklarowane potrzebne zmienne do drukowania, następnie za pomocą pętli while ze zmiennej fileToPrint czytane są poszczególne wersy, jeden po drugim. Czynność jest powtarzana zanim zmienna count nie stanie się większa lub równa zmiennej linesPerPage. Wtedy program dowiaduje się, że ma doczynienia z więcej niż jedną stroną.

II. Kalkulator
Następna aplikacja to kalkulator z funkcją dodawania, odejmowania, mnożenia, dzielenia, reszty z dzielenia i kwadratu.

Pełne źródło programu: Kalkulator w C# (source)
Wersja skompilowana: Kalkulator w C# (bin)

Kod w postaci HTML (pokolorowany): Kliknij tutaj

Poniżej opiszę najważniejsze fragmenty kodu.


//dodawanie

if (radioButton1.Checked)

{

int a, b, wynik;   

if (int.TryParse(textBox1.Text, out a) == false |   

    int.TryParse(textBox2.Text, out b) == false)

MessageBox.Show("Wprowadzono nieprawidłową wartość.", "Info", 0);   

else

{

int.TryParse(textBox2.Text, out b);   

wynik = a + b;   

textBox3.Text = wynik.ToString();   

}

}

Powyższy kod dodaje wartości wpisane w textBox1.Text i textBox2.Text. Na początku mamy instrukcję warunkową if. Sprawdza ona, czy zaznaczona jest kontrolka radioButton1. Jeżeli jest zaznaczona aplikacja wie, że będzie zaraz dodawała. Niżej jest deklaracja zmiennych a, b i wynik typu int. Poniżej następna instrukcja warunkowa. Sprawdza ona, czy w pola na pewno wpisano poprawne liczby całkowite (bo na takich program operuje). Do konwersji typu string (napis) na int (liczbę całkowitą) użyliśmy metody TryParse. Jej pierwszy argument to wartość, która ma być zamieniona na typ int, a drugi to zmienna, która będzie miała wartość 0 gdy konwersja się nie powiedzie lub skonwertowaną wartość gdy się powiedzie. Następnie mamy znak | (tzw. lub), a po nim analogiczna konwersja drugiej wartości. Gdy metoda TryParse zwróci wartość false (konwersja nie powiedzie się) wyświetla się komunikat o wprowadzeniu niepoprawnych danych. Jeżeli się powiedzie (else) to wartość zmiennej wynik przyjmuje wartość sumy wartości zmiennych a i b. Następnie do właściwości Text kontrolki textBox3 przypisywana jest wartość zmiennej wynik skonwertowana na string metodą ToString(). Podobnie jest z innymi działaniami. Myślę, że nie muszę ich już opisywać. Można wspomnieć jeszcze, że w kodzie podnoszącym do potęgi drugiej (do kwadratu), w instrukcji warunkowej metoda TryParse jest użyta tylko do kontrolki textBox1, gdyż druga staje się nieaktywna w poniższym kodzie:


private void radioButton6_CheckedChanged(object sender,   

EventArgs e)

{

textBox2.Enabled = !textBox2.Enabled;   

}

To już wszystko. Aplikacje nie są na wysokim poziomie i nie jest ich dużo (tylko dwie 😉 ). Myślę jednak, że pomogą początkującemu w nauce tego pięknego języka programowania jakim jest C#. Jeżeli znalazłeś jakiś błąd w tekście czy w aplikacjach napisz to w komentarzach lub bezpośrednio do mnie.

Dziękuję i pozdrawiam, Mo4x.


Pierwszy kontakt z Javą i C#

March 31, 2007

Ludzie już programy sobie piszą, a u mnie dopiero pierwszy kontakt. Ostatnio dość dużo słyszałem o tych językach, więc postanowiłem je trochę poznać (przynajmniej z powodu, żeby mieć swoje zdanie o nich). Jako, że szkoła zajmowała mi ostatnio zbyt dużo czasu, dlatego teraz jestem trochę w tyle. W tym wpisie postanowiłem przyglądnąć się Javie i C#.

Java (wymowa – posłuchaj) – opinie są podzielone. Dla niektórych wolna i wogóle do d**y, a według innych “niepodległy” język przyszłości. Ściągnąłem NetBeans (54.7 MB), zainstalowałem, odpaliłem. Proces tego IDE praktycznie nic nie robiąc pożerał coś koło 100 MB pamięci co było odczuwalne przy 256 MB RAMu. Najechałem na górne menu, które wysunęło się z dwu sekundowym opóźnieniem. Postanowiłem chwilkę nic nie klikać, po 5 sekundach IDE zaczęło w normalnie działać, chociaż zdarzały się momenty sprawiające wrażenie jakby się zawiesiło. Napisałem konsolowe Hello World. Co do składni języka, nie jest fatalna. Postanowiłem napisać coś okienkowego. Zrobiłem prostą aplikację okienkową z buttonem. Na początku, przy odpalaniu pojawiał się błąd w stylu “could not find the main class”, nie pamiętam dokładnie. Jednak się nie poddam. Przeinstalowałem wszystko jeszcze raz. Ufff… Skompilowałem i uruchomiłem projekt. W aplikacji była nieco opóźniona, o sekundę czy dwie reakcja kliknięcia na button. Ciekawe dlaczego, ale nie będę o tym teraz rozmyślał. Wystarczy. Odinstalowałem pamięciożerne NetBeans i postanowiłem, że javą nie będę się zajmował. Przynajmniej narazie 😉 Przedstawiłbym swoje screen’y z NetBeans, ale piszę to gdy już nie mam go zainstalowanego na komputerze. Screeny można znaleść natomiast na stronie NetBeans, czyli tutaj. Co mogę powiedzieć o samym języku java… Ceniony za wieloplatformowość, ostatnio wogóle stał się bardzo popularny. Plusem jest również szybkość tworzenia aplikacji. Niektórzy narzekają na powolność programów stworzonych w javie. To wszystko, miało być krótkie przyglądnięcie się, po więcej informacji o języku zapraszam na wikipedię.

Linki z którymi warto się zapoznać:
NetBeans IDE
Java – kurs programowania
Java – krótka charakt. języka

C# (wymowa “C” – posłuchaj, wymowa “#” – posłuchaj) – Wiele ostatnio słyszałem o tym języku, sam jednak się nigdy z nim nie spotkałem. Postanowiłem go sprawdzić 🙂 Ściągnąłem Microsoft Visual C# 2005 Express Edition w wersji Network install (a jest jakaś inna?). Całkowity rozmiar pobranych plików to ~58,8 MB (2,80 MB setup, który pobierał IDE o rozmiarze 56 MB). W instalacji było do wyboru jeszcze Microsoft MSDN 2005 Express Edition (248 MB) i Microsoft MySql Server 2005 Express Edition x86 (55 MB), jednak uznałem, że pobieranie tego jest zbędne. MSDN mam online (msdn.microsoft.com) a MySql Server’a nie potrzebuję. Instalacja przebiegła pomyślnie. Odpaliłem IDE, przypomina Visual C++. Co ja widzę… Z lewej komponenty, z prawej okienko właściwości danego obiektu. Jako programista środowisk RAD takich jak Delphi czy BCB poczułem się jak w domu 😉 Podpowiedzi typu CodeInsight i inne udogodnienia w tworzeniu kodu. Na pewno przyjemnie będzie mi się pracowało z tym IDE 😀
Screenshot1
Screenshot2
Screenshot3
Screenshot4

Co do samego języka C#, jak zapewne wiesz jest on mocno zorientowany obiektowo. Ma trochę z javy, a trochę z C++. Aplikacje napisane w tym języku można uruchamiać na różnych platformach co jest dużym plusem. W testach szybkości jakie widziałem szybszy od Javy (są jednak ludzie, którzy się z tym nie zgadzają). Ogólnie język przypadł mi do gustu i zamierzam się w nim szkolić 🙂

Na koniec kilka linków z którymi warto się zapoznać:
Microsoft Visual C# 2005 Express Edition
Programowanie w C#.NET – kurs
C# – krótka charakt. języka