winform podstawowy kalkulator ,problem z odejmowaniem.

0

Witam piszę sobie podstawowy kalkulator (taki jak w windowsie) .Dodawanie działa dobrze ale nie mam pojęcia jak zabrać się za odejmowanie...

 private void plus_Click(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(textBox1.Text))
            {
                MessageBox.Show("Wprowadź dane !");

            }
            else
            {
                wynik += Convert.ToInt32(textBox1.Text);
                textBox1.Text = "";
                ostatnia = '+';
            }
        } 

wyżej kod na dodawanie.Ale jak zrobić odejmowanie ? zrobić 2 zmienne ? ( póki co mam 1 zmienna double wynik )
Jeżeli są jakieś podpowiedzi to bardzo bym prosił ;)
Pozdrawiam

1

Zależy, jak wygląda Twój kalkulator. Jeśli podobnie do windowsowego, to możesz zrobić jeśli będziesz zapamiętywał wpisywane liczby z głównego textboxa, a dla samego odejmowania zrobisz osobny button. Robisz sobie osobną właściwość lub funkcję, które zwracają i ustawiają wartość wyniku. Dajmy na to chcesz zrobić 10-5:

  • klikasz 10, które pojawia się w textboxie. Liczba ta zostaje przekazana do właściwości lub funkcji, gdzie jest dodawana np. do listy
  • naciskasz znak odejmowania, co jednocześnie czyści textboxa
  • wpisujesz kolejną liczbę (np. 5) i postępjesz podobnie, jak w pkt. pierwszym.
  • kiedy naciskasz przycisk "=", zostaje wyświetlony wynik, który jest wynikiem odejmowania od siebie kolejnych liczb w liście.
0

Właśnie zrobiłem tak na początku,lecz moja druga 'zmienna' była w texboxie.kiedy zrobimy coś takiego : 2-2= (to wszystko kolejność wciskania buttonów) to wszystko będzie ok ale kiedy zrobiły np. 3+3-3 to już nie działa.Mówiąc w skrócie,wszystko jest ok kiedy po odejmowaniu wciśniemy ''='.Czy można to jakoś zmienić aby można było zrobić takie zadanko jak teraz wyżej ;)?
Pozdrawiam

a tu cały (prawie) kod :

 private double wynik = 0;
        char ostatnia;
        private void plus_Click(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(textBox1.Text))
            {
                MessageBox.Show("Wprowadź dane !");

            }
            else
            {
                wynik += Convert.ToInt32(textBox1.Text);
                textBox1.Text = "";
                ostatnia = '+';
            }
        }

        private void rownasie_Click(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(textBox1.Text))
            {
                MessageBox.Show("Wprowadź dane !");

            }
            else
            {
                switch (ostatnia)
                {
                    case '+':
                        {
                            wynik += Convert.ToDouble(textBox1.Text);
                            textBox1.Text = wynik.ToString();
                            wynik = 0;
                            break;
                        }
                    case '-':
                        {
                            wynik -= Convert.ToDouble(textBox1.Text);
                            textBox1.Text = wynik.ToString();
                            wynik = 0;
                            break;
                        }
                }
            }
         }

        private void button1_Click(object sender, EventArgs e)
        {
            wynik = 0;
            textBox1.Text = "";

        }

        private void minus_Click(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(textBox1.Text))
            {
                MessageBox.Show("Złe dane !");
            }
            else
            {
                wynik = Convert.ToDouble(textBox1.Text);
                textBox1.Text = "";
                ostatnia = '-';
            }
        }

Pozdrawiam

0

Możesz sobie zrobić klasę Działania. Nie mam teraz dostępu do kompilatora, ale mniej więcej coś takiego:

class Dzialania{
   private int wynik = 0;
   
   public int dodaj{
      set { wynik += value; }
   }
   
   public int odejmij{
      set { wynik -= value; }
   }
   
   public void ZwrocWynik(){
      Console.WriteLine(wynik.ToString());
   }
   
}

Analogicznie, przy używaniu przycisku z dodawaniem, wywołujesz właściwość dodaj, a przy odejmowaniu tę drugą. Kiedy chcesz wypisać wynik używasz metody ZwrocWynik.

0

No właśnie.Kalkulator działa dobrze tylko trzeba wcisnąć po każdym działaniu '=' . Chciałem tego uniknąć ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1