Cześć. Mówcie co jest złego w moim programie i co mam poprawić żeby było lepiej. Jeżeli chodzi o działanie programu to mam jeden problem.
Wciskanie "=" kilka razy po wykonaniu działania powoduje wykonywanie działania na wyniku i pierwszej liczbie czyli 2 + 3 = = = daje 5 7 9 a w standardowych kalkulatorach funkcjonuje to tak że dodawana byłaby druga liczba.
Czy trzeba wprowadzać jakąś dodatkową zmienną pomocniczą aby to osiągnąć nie psując przycisku i reszty programu "="?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Kalkulator
{
public partial class Form1 : Form
{
enum Dzialania { dodawanie, odejmowanie, mnozenie, dzielenie,nic};
double pierwsze;
double drugie;
Dzialania dzialanie;
bool czyjestkropka = false;
bool czyusuwacstare = false;
bool czymoznadzialac = true;
public Form1()
{
InitializeComponent();
textBox1.Text = "0";
}
private void WprowadzLiczbe(object sndr)
{
if ((czyusuwacstare==true)||(textBox1.Text == "0"))
{
pierwsze = Convert.ToDouble(textBox1.Text);
textBox1.Text = ((Button)sndr).Text;
czyusuwacstare = false;
czyjestkropka = false;
czymoznadzialac = true;// klawisze działań mogą przeprowadzać obliczenia jedynie po wprowadzeniu nowych danych
}
else
{
textBox1.Text += ((Button)sndr).Text;
}
}
// Metoda wywoływana po wciśnięciu jednego z przycisków działania(+ - * /)
private void UstawDzialanie(Dzialania jakiedzialanie)
{
// Jeśli można działać oraz rodzaj działania jest ustawiony następuje obliczanie
if(czymoznadzialac==true)
{
WykonajDzialanie();
czymoznadzialac = false;// Gdy false, przycisk dzialania moze zmieniac tylko rodzaj dzialania ale nie przeprowadzi obliczen
}
dzialanie = jakiedzialanie;// Rodzaj działania może być zawsze zmieniony
czyusuwacstare = true;
}
private void WykonajDzialanie()
{
switch(dzialanie)
{
case Dzialania.dodawanie:
drugie = Convert.ToDouble(textBox1.Text);
textBox1.Text = Convert.ToString(pierwsze + drugie);
break;
case Dzialania.odejmowanie:
drugie = Convert.ToDouble(textBox1.Text);
textBox1.Text = Convert.ToString(pierwsze - drugie);
break;
case Dzialania.mnozenie:
drugie = Convert.ToDouble(textBox1.Text);
textBox1.Text = Convert.ToString(pierwsze * drugie);
break;
case Dzialania.dzielenie:
drugie = Convert.ToDouble(textBox1.Text);
textBox1.Text = Convert.ToString(pierwsze / drugie);
break;
}
}
private void button10_Click(object sender, EventArgs e)
{
WprowadzLiczbe(sender);
}
private void button1_Click(object sender, EventArgs e)
{
WprowadzLiczbe(sender);
}
private void button2_Click(object sender, EventArgs e)
{
WprowadzLiczbe(sender);
}
private void button9_Click(object sender, EventArgs e)
{
WprowadzLiczbe(sender);
}
private void button6_Click(object sender, EventArgs e)
{
WprowadzLiczbe(sender);
}
private void button7_Click(object sender, EventArgs e)
{
WprowadzLiczbe(sender);
}
private void button8_Click(object sender, EventArgs e)
{
WprowadzLiczbe(sender);
}
private void button3_Click(object sender, EventArgs e)
{
WprowadzLiczbe(sender);
}
private void button4_Click(object sender, EventArgs e)
{
WprowadzLiczbe(sender);
}
private void button5_Click(object sender, EventArgs e)
{
WprowadzLiczbe(sender);
}
private void button14_Click(object sender, EventArgs e)// Przycisk C
{
textBox1.Text = "0";
czyjestkropka = false;
czyusuwacstare = true;
czymoznadzialac = false;
dzialanie = Dzialania.nic;
}
private void button13_Click(object sender, EventArgs e)// Przycisk =
{
WykonajDzialanie();
czymoznadzialac = false;
}
private void button11_Click(object sender, EventArgs e)// Przycisk +
{
UstawDzialanie(Dzialania.dodawanie);
}
private void button12_Click(object sender, EventArgs e)// Przycisk -
{
UstawDzialanie(Dzialania.odejmowanie);
}
private void button15_Click(object sender, EventArgs e)// Przycisk *
{
UstawDzialanie(Dzialania.mnozenie);
}
private void button16_Click(object sender, EventArgs e)// Przycisk /
{
UstawDzialanie(Dzialania.dzielenie);
}
private void button17_Click(object sender, EventArgs e)// Przycisk ,
{
if(czyjestkropka==false)
{
textBox1.Text += ",";
czyjestkropka = true;
czyusuwacstare = false;
}
}
}
}