C# Калкулатор с бутони за памет

Имам някои затруднения да накарам моя калкулатор да има възможност да съхранява стойности. Калкулаторът работи за всичко, с изключение на това и аз съм доста закъсал. Мисля, че може да се наложи да декларирам някои константи или нещо, което ми липсва в момента. Аз съм супер нов в това и оценявам помощта. Ето моят код. Благодаря за всяка помощ, момчета. В момента не получавам грешки, но нищо не работи! Трябва също така да направя така, че "M" да се появява в текстово поле, когато има стойност, съхранена в паметта, но реших, че е по-лесно да започна с тази част.

private void digitCalculate_Click(object sender, EventArgs e)
    {

        Button ButtonThatWasPushed = (Button)sender;
        string ButtonText = ButtonThatWasPushed.Text;
        decimal EndResult = 0;
        decimal MemoryStore = 0;

        if (ButtonText == "MC")
        {
            //Memory Clear
            MemoryStore = 0;
            return;
        }

        if (ButtonText == "MR")
        {
            //Memory Recall
            txtDisplay.Text = MemoryStore.ToString();
            return;
        }

        if (ButtonText == "MS")
        {
            // Memory subtract
            MemoryStore -= EndResult;
            return;
        }

        if (ButtonText == "M+")
        {
            // Memory add 

            MemoryStore += EndResult;
            return;

        }

    }

person Stephen.J7    schedule 06.12.2013    source източник


Отговори (2)


Просто променете променливата MemoryStore на глобална променлива. В момента той се декларира отново при всяко натискане на бутон, което означава, че данните се губят между натисканията на бутоните. Преместете го извън функцията и трябва да работи добре.

person Ben Ramcharan    schedule 06.12.2013

Трябва да имате променлива на ниво формуляр за decimal MemoryStore = 0;, тъй като имате променлива на ниво функция, тя ще се инициализира на 0, когато щракнете върху бутона digitCalculate

    decimal MemoryStore = 0;
    decimal EndResult = 0;

    public Form1()
    {
        InitializeComponent();
    }

    private void digitCalculate_Click(object sender, EventArgs e)
    {

        Button ButtonThatWasPushed = (Button)sender;
        string ButtonText = ButtonThatWasPushed.Text;
        //decimal EndResult = 0;
        //decimal MemoryStore = 0;

И също така имайте предвид, че

  • MC = Изчистване на паметта настройва паметта на 0
  • MR = Извикването от паметта използва номера в паметта
  • MS = Memory Store поставя номера на дисплея в паметта

Трябва да промените "MS" логиката и да добавите "M-"

    if (ButtonText == "MS")
    {
        MemoryStore = Decimal.Parse(txtDisplay.Text);
        return;
    }

    if (ButtonText == "M-")
    {
        // Memory subtract
        MemoryStore -= EndResult;
        txtDisplay.Text = MemoryStore.ToString();
        return;
    }

    if (ButtonText == "M+")
    {
        // Memory add 

        MemoryStore += EndResult;
        txtDisplay.Text = MemoryStore.ToString();
        return;

    }
person Damith    schedule 06.12.2013
comment
Така че, когато добавя този ред, получавам, че MemoryStore е присвоен, но стойността му никога не се използва. - person Stephen.J7; 06.12.2013
comment
също трябва ли да преместя decimal EndResult = 0; и навън? Пробвах и не помогна - person Stephen.J7; 06.12.2013
comment
Опитах го и играх още малко. Изглежда, че трябва да работи, но просто не е.... :( Дори не знам къде може да е проблемът. Все пак благодаря за помощта! - person Stephen.J7; 06.12.2013