Калькулятор C# с кнопками памяти

У меня возникли некоторые трудности с тем, чтобы мой калькулятор мог хранить значения. Калькулятор работает для всего, кроме этого, и я совсем застрял. Я думаю, что мне, возможно, придется объявить некоторые константы или что-то, что мне сейчас не хватает. Я супер новичок в этом и ценю помощь. Вот мой код. Спасибо за любую помощь, ребята. Прямо сейчас я не получаю никаких ошибок, но ничего не работает! Я также должен сделать так, чтобы в текстовом поле появлялась буква «М», когда в памяти хранится значение, но я решил, что с этой части проще начать.

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 = Memory Clear устанавливает память на 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
также я должен переместить десятичное значение EndResult = 0; снаружи тоже? Я пробовал, и это не помогло - person Stephen.J7; 06.12.2013
comment
Я попробовал и еще немного поиграл. Похоже, он должен работать, но это не так.... :( Я даже не знаю, в чем может быть проблема. Спасибо за помощь! - person Stephen.J7; 06.12.2013