public MainForm() { InitializeComponent(); OperationHandlers = new Dictionary <String, BinaryOperation> { }; foreach (var control in OperationPanel.Controls) { var button = control as Button; var tag = button.Tag as String; if (tag == "Number") { button.Click += OnNumberButtonClick; } if (tag == "BinaryOperation") { button.Click += OnOperatorButtonClick; var operation = new BinaryOperation(button.Text); OperationHandlers.Add(button.Text, operation); } button.Click += (object sender, EventArgs e) => UpdateLabels(); Input = new InputHandler(); } }
private IOperation MultiplyOrDivision() { var operation = AnyOperation(); while (_position < _expression.Length) { if (CurrentOperator("*")) { operation = new BinaryOperation(operation, "*", AdditionOrSubtraction()); } else if (CurrentOperator("/")) { var rightOperation = AdditionOrSubtraction(); if (rightOperation.Calculate().Equals(0)) { throw new Exception(String.Format("Деление на 0 в операции {0}/{1}", operation, rightOperation)); } operation = new BinaryOperation(operation, "/", rightOperation); } else { break; } } return(operation); }
public BackSpaceCommand(BinaryOperation op) { _Op = op; _Op.PropertyChanged += (s, e) => { if (CanExecuteChanged != null) { CanExecuteChanged(this, EventArgs.Empty); } }; }
private double Evaluate() { if (!(CurrentOperation is null)) { right = Input.ToDouble(); if (left.HasValue && right.HasValue) { var result = CurrentOperation.Evaluate(left.Value, right.Value); Input.init(result); CurrentOperation = null; left = result; return(result); } else { return(0); } }
private IOperation AdditionOrSubtraction() { var operation = MultiplyOrDivision(); while (_position < _expression.Length) { if (CurrentOperator("+")) { operation = new BinaryOperation(operation, "+", AdditionOrSubtraction()); } else if (CurrentOperator("-")) { operation = new BinaryOperation(operation, "-", AdditionOrSubtraction()); } else { break; } } return(operation); }
private void OnOperatorButtonClick(object sender, EventArgs e) { var button = sender as Button; if (CurrentOperation is null) { CurrentOperation = OperationHandlers[button.Text]; left = Input.ToDouble(); if (left is null) { return; } History = left.ToString() + CurrentOperation.ToString(); Input.init(left.GetValueOrDefault()); } else { var result = Evaluate(); CurrentOperation = OperationHandlers[button.Text]; History = result.ToString() + CurrentOperation.ToString(); Input.init(result); } }