prosty kalkulator- występuje błąd

0

Cześć,
poniżej jest kod programu, gdy wykonuję działanie na liczbie po przecinku występuję błąd, proszę o pomoc.
kod programu:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Kalkulator
{
    public partial class Form1 : Form
    {
        Double WartoscWyswietlacza = 0;
        String OperatorArytmetyczny = " ";
        bool JestOperatoremArytmetycznym = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void button_Click(object sender, EventArgs e)
        {
            if ((wyswietlacz.Text == "0") || (JestOperatoremArytmetycznym))
                wyswietlacz.Clear();
            JestOperatoremArytmetycznym = false;
            Button button = (Button)sender;

            if (button.Text == ".")
            {
                if (!wyswietlacz.Text.Contains("."))
                    wyswietlacz.Text = wyswietlacz.Text + button.Text;
            }
            else
                wyswietlacz.Text = wyswietlacz.Text + button.Text;
        }

        private void operator_click(object sender, EventArgs e)
        {
            Button button = (Button)sender;

            if (WartoscWyswietlacza != 0)
            {
                button19.PerformClick();
                OperatorArytmetyczny = button.Text;
                WartoscWyswietlacza = Double.Parse(wyswietlacz.Text);
                JestOperatoremArytmetycznym = true;
            }
            else
            {
                OperatorArytmetyczny = button.Text;
                WartoscWyswietlacza = Double.Parse(wyswietlacz.Text);
                JestOperatoremArytmetycznym = true;
            }
        }

        private void button12_Click(object sender, EventArgs e)
        {
            wyswietlacz.Text = "0";
        }

        private void button13_Click(object sender, EventArgs e)
        {
            wyswietlacz.Text = "0";
            WartoscWyswietlacza = 0;
        }

        private void button19_Click(object sender, EventArgs e)
        {

            switch (OperatorArytmetyczny)
            {
                case "+":
                    wyswietlacz.Text = (WartoscWyswietlacza + Double.Parse(wyswietlacz.Text)).ToString();
                    break;
                case "-":
                    wyswietlacz.Text = (WartoscWyswietlacza - Double.Parse(wyswietlacz.Text)).ToString();
                    break;
                case "*":
                    wyswietlacz.Text = (WartoscWyswietlacza * Double.Parse(wyswietlacz.Text)).ToString();
                    break;
                case "/":
                    if (Double.Parse(wyswietlacz.Text).ToString() == "0")
                    {

                    }
                    else
                        wyswietlacz.Text = (WartoscWyswietlacza / Double.Parse(wyswietlacz.Text)).ToString();
                    break;
                default:
                    break;
            }
        }

        private void label3_Click(object sender, EventArgs e)
        {

        }
    }
}
5

W opisie posta fajnie jakbyś podał najważniejszy dla nas komunikat, czyli treść błędu, która zazwyczaj wszystko dokładnie mówi co jest nie tak :) W Twoim przykładzie jednak bardzo łatwo się domyślić, że chodzi o to, że Twój kod nie potrafi parsować liczby, która zawiera przecinek (domyślnie liczby zmiennoprzecinkowe zawierają kropkę). Błąd jest zapewne w tej linijce:

WartoscWyswietlacza = Double.Parse(wyswietlacz.Text);

Swoją drogą, niezbyt fajnie się czyta ten kod. Przy okazji kilka uwag:

  • Eventy typu button12_Click, button19_Click, label3_Click naprawdę zbyt wiele nie mówią ;)
  • Double WartoscWyswietlacza = 0, String OperatorArytmetyczny = " ", bool JestOperatoremArytmetycznym = false - to są pola, a nie właściwości, więc zgodnie z konwencją powinny się nazywać odpowiednio wartoscWyswietlacza, operatorArytmetyczny, jestOperatoremArytmetycznym (w przypadku publicznych pól) lub _wartoscWyswietlacza, _operatorArytmetyczny, _jestOperatoremArytmetycznym (w przypadku pól prywatnych)
  • Pisz kod tylko w języku angielskim, nie nazywaj zmiennych po polsku
1
XardasLord napisał(a):
  • Double WartoscWyswietlacza = 0, String OperatorArytmetyczny = " ", bool JestOperatoremArytmetycznym = false - to są pola, a nie właściwości, więc zgodnie z konwencją powinny się nazywać odpowiednio wartoscWyswietlacza, operatorArytmetyczny, jestOperatoremArytmetycznym (w przypadku publicznych pól) lub _wartoscWyswietlacza, _operatorArytmetyczny, _jestOperatoremArytmetycznym (w przypadku pól prywatnych)

Wybacz, ale troszkę tutaj zagmatwałeś. Jeżeli mamy pola określone jako private lub protected (takie jak w kodzie) używamy tzw. stylu Wielbłąda (pierwsza litera mała). W innym wypadku pola nazywamy zaczynając od dużej litery (styl Pascala).

W konwencji nazewniczej w C# nie ma czegoś takiego jak rozpoczynanie nazw prywatnych pól od "_".

1

Dzięki za informację. Dzisiaj popołudniu napisze od nowa kod i w razie problemów poproszę o pomoc.

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