|
|
Kalkulator w C#
|
|
Autor:
Marcin Hałaczkiewicz
Opublikowano:
10 maja 2006
Odsłon:
123662
»Skomentuj...
|
Strona:
|
 |
 |
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:
Aktualna ocena to: 3,24
Tagi:
|
Komentarze do Kalkulator w C#
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