CentrumXP.pl » Witamy
CentrumXP.pl
 
Szukaj
Subskrypcja
Powiadomienie e-mailem o nowościach na CentrumXP.pl:
E-mail: Zapisz
Czy zamierzasz pobrać Internet Explorer 9?


CentrumXP.pl » Microsoft .NET » Visual C# w praktyce » Dodaj do ulubionych Dodaj do ulubionych   Dodaj do ulubionych Wersja do wydruku

Kalkulator w C#

Autor: Marcin Hałaczkiewicz    Opublikowano: 10 maja 2006    Odsłon: 123662    »Skomentuj...
Strona:
Zobacz również:

Analogowy zegarek

Budzik w C#

Commander w C#

Komunikator w C#

Mini Paint w C#

Notatnik w C#

Przeglądarka internetowa w C#

Przeglądarka zdjęć w C#

Przetwarzanie obrazów

Snake w C#

Tetris w C#

Wygaszacz ekranu w C#

»Uzyskaj pomoc na forum

W tym artykule zajmiemy się pisaniem prostego kalkulatora w języku C#. Programik będzie wyposażony jedynie w podstawowe opcje, gdyż celem jest pokazanie jak pisać aplikację tego typu, a nie wyposażyć ją we wszelkie matematyczne funkcje.

Chcielibyśmy, aby nasze liczydło umiało dodawać, odejmować, mnożyć i dzielić. Interfejs oczywiście ma być graficzny. Okno programu będzie posiadało przyciski odpowiadające cyfrom, działaniom, zmianie znaku, kropce dziesiętnej, znakowi równa się oraz kontrolkę Anuluj. Tak więc odpalamy Visual C# Express Edition, z menu File wybieramy New Project, klikamy na Windows Application i w polu Name wpisujemy nazwę programu, czyli Kalkulator.

Przyciski kalkulatora nie będą standardowymi przyciskami z okna Toolbox, ponieważ nie chcemy, aby po kliknięciu były one wybrane, czyli metoda Focus() ma zawsze zwracać wartość false.
Funkcja Focus() mówi nam czy kontrolka w danym momencie jest aktywna. Na przykład pole TextBox jest wybrane, gdy w jego wnętrzu miga kursor. Gdy aktywny przycisk jest podświetlony, naciśnięcie klawisza enter spowoduje to samo co kliknięcie na kontrolkę. Właśnie tego musimy uniknąć - dlaczego - o tym później.
Tak więc chcemy mieć własny typ przycisków. Wybierzmy z menu Project opcję AddClass i w polu Name podajmy jej nazwę - Przycisk. Przechodzimy teraz do pliku z nowo utworzoną klasą (otworzy się automatycznie). U góry dopiszmy using System.Windows.Forms; Wyprowadzamy naszą klasę z klasy Button. Następnie tworzymy konstruktor naszej klasy i wpisujemy w nim SetStyle(ControlStyles.Selectable, false); Ta linijka kodu spowoduje, że przycisków nie będzie można wybrać, czyli otrzymamy to o co nam chodzi. Tak powinien w całości wyglądać kod nowej klasy:

using System.Windows.Forms;
namespace Kalkulator
{
    class Przycisk : Button
    {
        public Przycisk()
        {
            SetStyle(ControlStyles.Selectable, false);
        }
    }
}

Po zapisaniu pliku możemy go zamknąć, nie będziemy go już modyfikować. Przechodzimy do widoku formy (Form1.cs) i zaglądamy do zakładki ToolBox. Jeśli nie jest widoczna nigdzie z boku ekranu to wybieramy menu View a następnie ToolBox. Pod nagłówkiem Kalkulator Components znajdziemy stworzoną przez nas kontrolkę. Tworzymy 18 przycisków. 10 z nich nazywamy cmd0, cmd1, cmd2...cmd9, a w polu Text wpisujemy odpowiednią cyfrę. Wszystkie te właściwości znajdziemy w oknie Properties. Kolejnym przyciskom nadajemy nazwy cmdSuma, cmdRoznica, cmdIloczyn, cmdIloraz cmdKropka, cmdZnak, cmdWynik, cmdAnuluj. Wyświetlamy na nich odpowiedni symbol. Dla cmdZnak może to być +/-, a dla cmdAnuluj po prostu Anuluj. Dodatkowo dla przycisków działań oraz cmdWynik i cmdZnak ustawiamy właściwość Enabled na false. Robimy to po to, by zaraz po uruchomieniu programu były one nieaktywne. Uaktywnimy je dopiero po wybraniu jakiejś cyfry. Wszystko po to, aby program nie pozwalał użytkownikowi na wciskanie przycisków nie po kolei. Najpierw ma być naciśnięta cyfra/y, później działanie, znowu cyfra/y i kolejne działanie lub =.
Teraz dodajemy kontrolkę TextBox, nadajemy jej nazwę txtWynik, kasujemy zawartość pola Text i zmieniamy wartość Enabled na false, dodatkowo ustawiamy BackColor na White oraz RightToLeft na Yes. W ten szybki sposób otrzymaliśmy gotowe pole do wyświetlania wyniku. Ma być ono nieaktywne (właściwość Enabled), aby nie można było nic do niego wpisać ani go wybrać. Jednak nieaktywność tej kontrolki powoduje, że jej tło staje się szare. Dlatego właśnie wymuszamy biały kolor po prostu ustawiając go we właściwości BackColor. Jeśli chodzi o przestawianie RightToLeft na Yes - powoduje to wyświetlanie tekstu "od prawej do lewej". Zmieniliśmy to tylko ze względów estetycznych.
Chcielibyśmy jeszcze, aby na pasku tytułu okna z aplikacją była wyświetlana jej nazwa. W tym celu klikamy w puste miejsce formy i w jej właściwościach ustawiamy pole Text na Kalkulator. Teraz układamy elementy naszego programu w sensowny sposób. Może to wyglądać np. tak:


1 2 3 Dalej» 

Aktualna ocena to: 3,24

Oceń artykuł...
Porażka Kiepski Taki Sobie Dobry Super!

Tagi:  

A teraz:    Dodaj do ulubionych Dodaj do ulubionych    Wydrukuj Wydrukuj    Wyślij link znajomemu Wyślij link znajomemu    Skomentuj Skomentuj

Komentarze do Kalkulator w C#

Dodaj komentarz»

m010ch 16 czerwca 2006, 23:24

Szczerze mówiąć, to chyba najgorszy tutek z tutejszych. Po pierwsze - mam wrażenie, że to można zrobić znacznie prościej i szybciej (program straaasznie "muli" u mnie), autor dziwnie kręci, prawie nie komentuje kodu, stosuje jakieś praktyki i nie wyjaśnia ich zasadności, itp. p.s. konia z wozem temu kto mi znajdzie kontrolkę EditBox w VC#2005EE :> Ja to zrobiłem na TextBox'ie.

Marcin Hałaczkiewicz 17 czerwca 2006, 12:30

Szczerze, to mi też się ten artykuł nie podoba. Ale był to pierwszy program jaki kiedykolwiek napisalłem w C# i w .NET, więc proszę o wyrozumiałość. btw oczywiście, że chodzi o TextBox a nie EditBox

Adam 27 sierpnia 2006, 23:20

C# dopiero poznaje i miedzy innymi z kursu tutaj zamieszczonego ale ten przyklad nie jest jakis super... Uruchamiajac cmdWynik_Click powodujemy cmdKropka.Enabled = false; jednak pozniej juz tego nie zmieniamy wiec powtorne urzycie cmdKropka nie jest mozliwe. Nalezaloby dopisac do pokazznaki() linijke: cmdKropka.Enabled = true; Autor poswiecil sporo estetyce i niezawodnosci ale pomimo ze tylko kilka razy uruchomilem pisana aplikacje to wylapalem cos takiego: po wprowadzeniu liczby, wybraniu dzialania, wprowadzeniu liczby i wybraniu "=" mozemy ponownie wprowadzic liczbe jednak nie mozemy wybrac dzialania tzn teoretycznie tak ale aplikacja wykona "=" z dzialaniem zapamietanym przy pierwszym dzialaniu. Ja widze przynajmniej dwa sposoby rozwiazania tego malego niedopatrzenia.

Adam 27 sierpnia 2006, 23:38

Mam jeszcze jeden ciekawy blad: wybieramy cyfre/liczbe i zmieniamy znak na minus, dopisujemy kolejna cyfre i znowu zmieniamy znak, tym razem na plus i tutaj nagle wyswietlana liczba w txtWynik zmniejsza sie o (wybrana cyfra/liczba w pierwszej fazie * 2) a przeciez zmieniamy tylko znak. I do tego na razie nie doszedlem "dlaczego tak" ale widac ze zaczynam zabawe z C# :)

vandalizmo 30 sierpnia 2006, 16:24

na dziendobry: metoda Focus() nie mówi o tym czy kontrolka jest wybrana tylko ustawia focus na kontrolkę - do tego pierwszego służy property TextBox.Focused. po drugie zamiast wydziwiać z textboxem (enabled=false, backcolor=white) proponuje używać locked=true...

bct 23 listopada 2007, 12:58

a mi by sie nie chcialo 10x klikac na kazdym przycisku i wpisywac w funkcji cyfry(1), cyfry(2) ..., skoro mozna zaznaczyc wszystkie 10 guzikow, wybrac im jedna metode a w niej napisac tylko jedna linijke: cyfry( (sender as przycisk).tag); i w kazdym guziku w zmiennej tag poustawiac odpowiednie wartosci, czyli 1,2,3 itd- o wiele elastyczniejsze rozwiazanie

Kalkulator 3 maja 2008, 14:28

Nie umiem wrobić tego kalkulatora niestety głupio mi jest nie dawajcie tego do pobrania proszę ?

H 3 maja 2008, 15:12

C# dopiero poznaje i miedzy innymi z kursu tutaj zamieszczonego ale ten przyklad nie jest jakis super... Uruchamiajac cmdWynik_Click powodujemy cmdKropka.Enabled = false; jednak pozniej juz tego nie zmieniamy wiec powtorne urzycie cmdKropka nie jest mozliwe. Nalezaloby dopisac do pokazznaki() linijke: cmdKropka.Enabled = true; Autor poswiecil sporo estetyce i niezawodnosci ale pomimo ze tylko kilka razy uruchomilem pisana aplikacje to wylapalem cos takiego: po wprowadzeniu liczby, wybraniu dzialania, wprowadzeniu liczby i wybraniu "=" mozemy ponownie wprowadzic liczbe jednak nie mozemy wybrac dzialania tzn teoretycznie tak ale aplikacja wykona "=" z dzialaniem zapamietanym przy pierwszym dzialaniu. Ja widze przynajmniej dwa sposoby rozwiazania tego malego niedopatrzenia

Acca 23 kwietnia 2011, 11:16

Zamiast używania const int PLUS = 1; itd. wystarczy użyć enum"a...


Dodaj swój komentarz

»Zasady udzielania komentarzy

Autor:  
Komentarz:
Dodaj komentarz
© 2012 Onex Group
Onex Group O Onex Group  |  O CentrumXP.pl  |  Kontakt  |  Reklama
Nasze serwisy: CentrumXP.plXboxSpot.pl  |  Jama Mastaha