Programowanie w języku C# » Artykuły

Csharp - programowanie pod Windows - podstawy

  • 2013-12-09 18:52
  • 9 komentarzy
  • 6139 odsłon
  • Oceń ten tekst jako pierwszy
/* 
 * C# (CSHARP) TUTORIAL NR 01
 * -------------------------------------------------------------------------------
 * Zakres omówionych pojęć:
 * 1) Podstawowe pojęcia dotyczące C#.
 * 2) Dodawanie komponentów i nadawanie im podstawowych właściwości. 
 * 3) Podstawowe funkcje graficzne.
 * 4) Odczytywanie współrzędnych myszki.
 * 
 *              wersja 1.0.2
 *                                            made by taipan
 * -------------------------------------------------------------------------------
 * W następnych tutorialach powinienem omówić jak łączy się poszczególne obiekty
 * ze sobą. Ale nie wiem, czy jeszcze powstanie następny tutorial ;) 
 */
 
// Przestrzenie, z których będziemy korzystać
// Potrzebne są one aby móc korzystać z różnych funkcji.
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
 
// Deklaracja nowej klasy, której od razu przepisujemy formatkę.
// Inaczej trzeba by było ją tworzyć w programie.
public class Wprowadzenie : Form
{
    // TUTAJ DEKLARUJEMY WSZYSTKIE NOWE OBIEKTY, KTÓRE WYSTĘPUJĄ W WIĘCEJ NIŻ
    // JEDNEJ METODZIE.
    // WYJĄTEK STANOWI GŁÓWNA FORMATKA (this), KTÓREJ NIE TRZEBA W OGÓLE DEKLAROWAĆ,
    // PONIEWAŻ ISTNIEJE SAMA PRZEZ SIĘ :)
    Form nazwa_formatki = new Form();
    Label wspolrzedne_myszki = new Label();
 
    int x = 1;  // deklaracja zmiennej potrzebnej do metody "zdarzenie buttona", która będzie potrzebna do iteracji
                // x nie może znajdować się w metodzie, ponieważ x zawsze przyjmowałoby wartości
                // jakie jej na dano na samym początku i nie mogłoby rosnąć
 
    // Nazwa metody taka sama jak nazwa klasy sprawia, że jest ona główną metodą.
    public Wprowadzenie()
    {
 
        /* this - poprzez rekurencję odwołuje się do samej siebie
            Zamknięcie formatki głównej powoduje zamknięcie wszystkich
            formatek innych */
        this.Text = "Formatka Nr 1";
        // Nadanie rozmiaru formatce (x,y).
        // x - szerokosc
        // y - wysokosc
        this.Size = new Size(500,400);
        // Color zdefiniowany za pomocą palety RGB.
        this.BackColor = Color.FromArgb(20,80,210);
        // Bez tego, główna formatka pojawiałaby się na końcu,
        // przez co zasłaniałaby inne formatki.
        this.Show();
 
        // Poniewaz zadeklarowalismy juz formatkę w klasie, więc tutaj nie trzeba
        // znowu jej tworzyć, ponieważ jest już utworzona.
        nazwa_formatki.Text = "Formatka Nr 2";
        nazwa_formatki.Size = new Size(600,500);
        nazwa_formatki.Show();
 
        // tworzenie buttonow
        Button nazwa_buttonu = new Button();
        nazwa_buttonu.Text = "Tekst na buttonie";
        nazwa_buttonu.Size = new Size(200,30);
        // Location = new Point(wartosc x, wartosc y)
        // wartosc x - pikseli, liczac od lewej komponentu, na ktory sie chce sie to dodac
        // wartosc y - pikseli, liczac od gory komponentu, na ktory sie chce sie to dodac
        nazwa_buttonu.Location = new Point(100,100);
        // Click - deklaracja zdarzenia po kliknieciu na komponent
        // Zdarzenia są tworzone jako metody.
        nazwa_buttonu.Click += new EventHandler(zdarzenie_buttona);
        // Dodanie komonentu do programu, wzór 1. 
        nazwa_formatki.Controls.Add(nazwa_buttonu);
 
        // tworzenie pol tekstowych
        Label nazwa_tekstu = new Label();
        // zmiana czcionki na labelu
        nazwa_tekstu.Font = new Font("Times New Roman", 12, FontStyle.Bold);
        // zmiana koloru czcionki
        nazwa_tekstu.ForeColor = Color.Blue;
        // nadanie tekstowi tła (background)
        nazwa_tekstu.BackColor = Color.White;
        nazwa_tekstu.Location = new Point(200, 10);
        nazwa_tekstu.Size = new Size(200, 20);
        nazwa_tekstu.Text = "Tekst na labelu";
        // Dodanie komonentu do programu, wzór 2. 
        nazwa_formatki.Controls.AddRange(new Control[] { nazwa_tekstu });
 
        // tworzenie pol formularzy (textBox)
        TextBox nazwa_texboxa = new TextBox();
        nazwa_texboxa.Text = "Tekst w textboxie";
        nazwa_texboxa.Location = new Point(0, 150);
        nazwa_formatki.Controls.AddRange(new Control[] { nazwa_texboxa });
 
        // tworzenie listy nierozwijanej (listboxa)
        ListBox nazwa_listboxa = new ListBox();
        // dodawanie wartości więcej niż jednej do listboxa 
        nazwa_listboxa.Items.AddRange(new object[] { "Wartosc 1", "Wartosc 2", "Wartosc 3", "Wartosc 4", "itd." } );
 
        // tworzenie listy rozwijanej (combobox)
        ComboBox nazwa_comboboxa = new ComboBox();
        nazwa_comboboxa.Location = new Point(0, 250);
        // tekst na komboboxie (nie jest on brany jako wartość comboboxa, tzn.
        // po wybraniu, której z wartości, ten tekst zniknie)
        nazwa_comboboxa.Text = "Wartości wpisane w comboboxie";
        // dodawanie wartości więcej niż jednej do comboboxa (tak samo jak w listboxie)
        nazwa_comboboxa.Items.AddRange(new object[] { "Wartosc 1", "Wartosc 2", "Wartosc 3", "Wartosc 4", "itd." } );
 
        // wzór dodawania wielu komponentów za jednym razem
        nazwa_formatki.Controls.AddRange(new Control[] { nazwa_listboxa, nazwa_comboboxa });
 
        // Deklaracja zdarzeń:
        // zdarzenie Paint - oznacza, ze na komponencie bedzie mozna rysowac
        // O pisaniu innego typu zdarzen niz Resize, Click i Paint nie bede pisal.
        // Poza tym zdarzenia to dosyc rozlegly, ale nietrudny rozdzial :)
 
        // rysowac bedziemy na formatce glównej (this)
        this.Paint += new PaintEventHandler(bierzemy_sie_za_rysowanie);
 
        // zdarzenie resize będzie nam odświeżalo okno podczas zmiany rozmiarów
        this.Resize += new EventHandler(Odswiezanie);
 
        // obsluga myszy
        nazwa_formatki.MouseMove += new MouseEventHandler(ruch_myszki);
        wspolrzedne_myszki.Location = new Point(nazwa_formatki.Width-150,nazwa_formatki.Height-80);
        wspolrzedne_myszki.Size = new Size(100,50);
        nazwa_formatki.Controls.Add(wspolrzedne_myszki);
 
    }
 
    /* Deklaracja metody (w tym przypadku wywołanego przez jakieś zdarzenie).
        Są dwa specyfikatory dostępu dla metod:
        public - składnik dostępny jest również poza klasą;
        private - (przeciwieństwo public) składnik nie dostępny jest również poza klasą.
       Slowo "void" mówi kompilatorowi, że funkcja nie zwraca żadnych wartości. */
    public void zdarzenie_buttona(object sender, EventArgs e)
    {
        // Zróbmy, że klikając na button zmieni się kolor nowej formatki
        // Stwórzmy od razu proste warunki i iteracje, dzięki którym, za każdym
        // razem jak klikniemy na button, coś się zmieni.
        // Można robić to na wiele sposobów, ja napisałem to akurat w ten :)
 
        if (x%2 == 0) // jeżeli wynik z dzielenia przez 2 = 0, wtedy zrób to...
        {
            // tu mozna wypisywac cokolwiek co chce sie zmienic, podobnie w warunku "else"
            nazwa_formatki.BackColor = Color.PaleGreen;
        }
        else // w innym wypadku...
        {
            nazwa_formatki.BackColor = Color.FromArgb(220,220,210);
        }
        x++; // z wywołaniem tej metody x rośnie o 1
    }
 
    public void bierzemy_sie_za_rysowanie(object sender, PaintEventArgs nazwa_argumentu_grafiki)
    {
        // wszystko będzie rysowane na 
        // zainicjowanie grafiki
        Graphics grafika = nazwa_argumentu_grafiki.Graphics;
 
        // wprowadzenie wygładzania rysunków, w tym przypadku grafika będzie
        // rysowana z najwyższą dokładności, jednak bardzo to zwalnia program
        grafika.SmoothingMode = SmoothingMode.HighQuality;
 
        // Rysowanie tekstu:
        Font czcionka = new Font("Arial", 12);
        grafika.DrawString("jakiś tekst", czcionka, new SolidBrush(Color.Black), ClientSize.Width-100, ClientSize.Height/2-20);
 
        // NA POCZĄTKU NAUCZYMY SIĘ RYSOWAĆ FIGURY ZA POMOCĄ OŁÓWKA (pen)
 
        // pen jest również obiektem, więc trzeba go stworzyć
        Pen olowek_bialy = new Pen(Color.White);
 
        // narysowanie strzalki (lub innych obiektow) na koncu linii:
        olowek_bialy.EndCap = LineCap.ArrowAnchor;
 
        // grubośc linii:
        olowek_bialy.Width = 5;
 
        // rodzaj linii (np. linia przerywana):
        olowek_bialy.DashStyle = DashStyle.Dot;
 
        // Mamy już ołówek, więc możemy nim rysować rożne figury. Dla kazdego
        // obiektu tworze rozne olowki, aby latwo bylo sie zorientowac na formatce co do czego,
        // ale ciagle mozna uzywac tego samego jednego olowka.
 
        // rysowanie prostej linii (czym ma rysowac, polozenie poczatkowe od lewej, polozenie poczatkowe od gory, polozenie koncowe od lewej, polozenie koncowe od gory)
        grafika.DrawLine(olowek_bialy,0,0,this.Width-100,this.Height-100);
 
        // rysowanie prostokąta (dla kwadratu szerokosc = wysokosc) niewypełnionego (czym ma rysowac, polozenie od lewej, polozenie od gory, szerokosc, wysokosc)
        Pen olowek_czerowny = new Pen(Color.Red);
        grafika.DrawRectangle(olowek_czerowny,10,10,100,40);
 
        // rysowanie elipsy (dla koła szerokosc = wysokosc) niewypełnionej (czym ma rysowac, polozenie od lewej, polozenie od gory, szerokosc, wysokosc)
        Pen olowek_czarny = new Pen(Color.Black);
        grafika.DrawEllipse(olowek_czarny,10,80,50,80);
 
        // rysowanie łuku (czym ma rysowac, polozenie od lewej, polozenie od gory, szerokosc, wysokosc, kat 1, kat 2)
        Pen olowek_zloty = new Pen(Color.Gold);
        grafika.DrawArc(olowek_zloty,300,250,103,35,10,90);
 
        // rysowanie krzywej Beziera (używana do wektorowego zapisu grafiki komputerowej)
        Pen olowek_rozowy = new Pen(Color.Pink);
        grafika.DrawBezier(olowek_rozowy,40,20,50,77,10,140,190,180);
 
        // rysowanie dowolnych figur
        Pen olowek_zielony = new Pen(Color.Green);
        Point[] punkty = new Point[5] 
        {
            new Point(214, 34),
            new Point(314, 100),
            new Point(424, 67),
            new Point(240, 60),
            new Point(100, 40),    
        };
        grafika.DrawPolygon(olowek_zielony, punkty);
 
        // Inne rozne figury, ktore mozna rysowac za pomoca olowka mozna znalezc w pomocy
        // albo w podpowiedziach, ktore pojawiaja sie zaraz po napisaniu "grafika.".
 
 
        // TERAZ BEDZIEMY RYSOWAC Z FIGURY Z WYPELNIENIEM
        // 1) Najpierw definiujemy czym maly wypelnic
        // 2) Definiujemy co mamy wypelnic
 
        // zdefiniowanie samego koloru do wypelniania
        SolidBrush sam_kolor = new SolidBrush(Color.Black);
 
        // rysowanie wypelnionego prostokata
        grafika.FillRectangle(sam_kolor, 10, 250, 30, 20);    
 
        HatchBrush wzorki = new HatchBrush (HatchStyle.ZigZag, Color.Wheat, Color.Transparent);
        grafika.FillEllipse(wzorki, 350, 250, 40, 30);    
 
        // mozna tez rysowac w ten sposob:
        grafika.FillEllipse(new SolidBrush(Color.White), 200,250,30,50);
 
 
        // Z grafiki to tyle, aha. Może jeszcz powiem jak się dodaje obrazki. Nic prostszego :)
        // Rysowac obrazki mozna az na 30 sposobow!!!    
        // jezeli wyskoczy blad, to znaczy, ze nie musicie zmienic sciezke dostepu do obrazka
        grafika.DrawImage(Image.FromFile("c:/windows/Bąbelki.bmp"), Width-50, 10, 40, 80);
 
    }
 
    private void ruch_myszki(object sender, MouseEventArgs wartosc)
    {
 
        wspolrzedne_myszki.Text = "wspolrzedne x: "+wartosc.X+"n wspolrzedne y: "+wartosc.Y;
 
    }
 
    private void Odswiezanie(Object sender, EventArgs e)
    {
        Invalidate();
    }
 
    // Od tej meotdy zaczyna się działanie programu.
    private static void Main()
    {
        // która metodą ma wykonywać jako główną
        Application.Run(new Wprowadzenie());
    }
}

9 komentarzy

mirek19800731 2008-03-28 17:43

chcialem zaznaczyc ze uruchomilem i dziala

mirek19800731 2008-03-10 08:26

a ja jestem kompletnie zielony i poprosze pomoc w uruchomieniu tego na visual studio 2005 jak wczytam plik rozumiem to dac do pliku z rozszerzeniem .cs jako class  natomiast nie umiem tego skompilowac no chyba ze z lini komend a jak sie ma sprawa z windowsowa wersja , dla mnie to na razie czarna magia ale pewnie dla kogos to latwe i moze zaoszczedzic mi grzebania wielogodzinnego , jak sie robi nowy projekt to jest ok  bo samo srodowisko dba co i jak dolaczyc i gdzie ale jak sie ma 1 plik to ja nie umiem go uruchomic

Kooba 2005-09-04 15:31

Bardzo mi sie podoba ten język, życzę mu wszystkiego najlepszego :)

Z tego co zauważyłem to programy troche wolno sie włączają  za pierwszym razem (pośrednia kompilacja czy coś takiego ?) no i trzeba mieć tego nieszczęsnego frameworka na kompie (co w praktyce == WinXP SP2).. ale poza tym jest spoko :)

Marooned 2005-06-30 19:08

hehe - jaki ja nieświadomy byłem półtora roku temu :) a teraz za kasę w C# klepię :D ależ czas pędzi...

Vogel 2004-06-29 17:29

Ja tylko wspomnę o www.go-mono.pl :)
I jeszcze jedno: C# to chyba klon javy... Napisałem program w C# i chciałem go przerobić na kod javy... Zmian było dosłownie kilka :)

taipan 2003-11-06 21:38

   Tutorial napisałem dla kilku osób na studiach, dlatego jest taki frywolny ;)
   Co do samego języka, to C#, podobnie jak Java, został stworzony do kreacji wieloplatformowego kodu. Ale pochodzi z rodziny C i C++, a nie Javy, chociaż wiele rzeczy jest identycznych. Tym co ma C# a nie ma Java, jest to, że język ten umożliwia łatwą współpracę kodu napisanego w języku z kodem napisanym w innym języku. Poza tym C# i Windows są bardzo blisko związane ze sobą (Java, niestety, nie ma pełnej integracji z systemem). Język jest bardzo przyjemny.
   Gwoli informacji, to niedawno wyszła polska wersja C# pod platformę .NET.

flabra 2003-11-06 12:25

Ja rozumiem :> , ale w końcu co to jest ten hasz (#) kompresja ++ (lze?). Nie no spoko, tylko zartuję. Zaraz ściągnę sobie kompilator. Fajny art. Ja chcę więcej!!!

Marooned 2003-11-06 08:39

Widzę, że C# bardzo mocno przypomina Javę.

Brakuje tagów <cpp> - pomimo innego języka tutaj najprawdopodobniej by się sprawdziły i polepszyłyby czytelność artu.

Poza tym - artykuł dobry.

Nie wiem, czy nie lepiej byłoby go wrzucić do działu C++, chociaż "Z pogranicza" może i jest lepszym wyborem...

Adam Boduch 2003-11-06 10:36

Prosze, podczas pisania artykulow, kody zrodlowe wpisuj pomiedzy znaczniki <cpp> oraz </cpp>. Ufff....