/// <summary> /// Работа с памятью. /// </summary> /// <param name="calc">Наш класс.</param> /// <param name="res">Результат предыдущей операции.</param> /// <param name="str">Номер ячейки памяти.</param> /// <param name="mm">Операции с мапятью.</param> /// <param name="resn">Извлекаемое из памяти значение.</param> /// <param name="syop">Текущая система счисления.</param> private static void Mem(Xryo calc, Object res, String str, MemActions mm, ref object resn, SystemOp syop) { try { var n = Convert.ToByte(str); // При работе с памятью переводим все к 10-ой системе счисления. resn = calc.SSConvert(res, syop, SystemOp.Dec); // ReSharper disable once InconsistentNaming var _res = Convert.ToDouble(resn); try { calc.Memory(mm, ref _res, n); } // Если операция была М+ или М-, а память пуста. catch { switch (mm) { case MemActions.MP: calc.Memory(MemActions.MS, ref _res, n); break; case MemActions.MM: _res = -_res; calc.Memory(MemActions.MS, ref _res, n); break; default: ErrorEvent("Ошибка памяти!"); break; } } // Если необходимо извлечь значение из памяти. if (mm == MemActions.MR) { resn = calc.SSConvert(_res, SystemOp.Dec, syop); } } catch { ErrorEvent("Ошибка памяти!"); } }
/// <summary> /// Разбор нажатых кнопок памяти. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnmem_Click(object sender, EventArgs e) { var conv = tb1.Text; var btn = (Button)sender; switch (btn.Text) { case "MC": _mem = MemActions.MC; Mem(Calc, conv, "0", _mem, ref _resn, _syop); lbl_mem.Visible = false; break; case "MR": _mem = MemActions.MR; Mem(Calc, conv, "0", _mem, ref _resn, _syop); tb1.Text = Convert.ToString(_resn); break; case "MS": _mem = MemActions.MS; Mem(Calc, conv, "0", _mem, ref _resn, _syop); lbl_mem.Visible = true; break; case "M+": _mem = MemActions.MP; Mem(Calc, conv, "0", _mem, ref _resn, _syop); lbl_mem.Visible = true; break; case "M-": _mem = MemActions.MM; Mem(Calc, conv, "0", _mem, ref _resn, _syop); lbl_mem.Visible = true; break; } }