private void EngineerGrid_Click(object sender, RoutedEventArgs e)
        {
            // обработчик работает только для кнопок
            Button btn = e.Source as Button;

            // Если не кнопка
            if (btn == null)
            {
                return;
            }
            string value;

            try
            { value = btn.Content.ToString(); }
            catch
            {
                StatusBarChangingDelegate update = new StatusBarChangingDelegate(StatusBarChanging);
                update("Error on buttons");
                return;
            }
            // Для кнопок у которых есть значение (контент)
            if (String.IsNullOrEmpty(value))
            {
                return;
            }

            EngineerResultator(value);
            return;
        }
 private void EngineerMode_Click(object sender, RoutedEventArgs e)
 {
     if (!isEngineerMode)
     {
         StatusBarChangingDelegate update = new StatusBarChangingDelegate(StatusBarChanging);
         update("Switched to Engineer Mode");
         ModeSwitcher();
     }
     return;
 }
        private void ActivityGrid_Click(object sender, RoutedEventArgs e)
        {
            // обработчик работает только для кнопок
            Button btn = e.Source as Button;

            // Если не кнопка
            if (btn == null)
            {
                return;
            }
            // Для кнопок у которых есть значение (контент)
            string value;

            try
            { value = btn.Content.ToString(); }
            catch
            {
                StatusBarChangingDelegate update = new StatusBarChangingDelegate(StatusBarChanging);
                update("Error on buttons");
                return;
            }
            if (String.IsNullOrEmpty(value))
            {
                return;
            }
            //Свичи
            switch (value)
            {
            //Очистка последнего символа
            case "Del":
                if (!String.IsNullOrEmpty(CalcTextBox.Text))
                {
                    CalcTextBox.Text = CalcTextBox.Text.Substring(0, CalcTextBox.Text.Length - 1);
                }
                if (String.IsNullOrEmpty(CalcTextBox.Text))
                {
                    CalcTextBox.Text += '0';
                }
                break;

            //Очистка поля
            case "C":
                CalcTextBox.Text = "0";
                memoryValue      = 0;
                memoryOpreation  = "";
                memorised        = false;
                break;

            default:
                ActivityResultator(value);
                break;
            }
            return;
        }
        private void NumbersGrid_Click(object sender, RoutedEventArgs e)
        {
            // обработчик работает только для кнопок
            Button btn = e.Source as Button;

            // Если не кнопка
            if (btn == null)
            {
                return;
            }
            // Для кнопок у которых есть значение (контент)
            string value;

            try
            { value = btn.Content.ToString(); }
            catch
            {
                StatusBarChangingDelegate update = new StatusBarChangingDelegate(StatusBarChanging);
                update("Error on buttons");
                return;
            }
            if (String.IsNullOrEmpty(value))
            {
                return;
            }
            //Свичи
            switch (value)
            {
            case "+/-":
                try
                {
                    double i = Double.Parse(CalcTextBox.Text);
                    i = (-i);
                    CalcTextBox.Text = i.ToString();
                }
                catch
                {
                    CalcTextBox.Text = "Error";
                }
                break;

            case ",":
                if (!CalcTextBox.Text.Contains('.'))
                {
                    CalcTextBox.Text += ".";
                }
                break;

            // добавялем новое значение в текстовое поле и удаляем стартовый 0
            default:
                CalcTextBox.Text = CalcTextBox.Text.TrimStart('0') + value;
                break;
            }
        }
        private void EngineerResultator(string operation)
        {
            if (operation == "Sqrt")
            {
                try
                {
                    CalcTextBox.Text = Math.Sqrt(Double.Parse(CalcTextBox.Text)).ToString();
                }
                catch
                {
                    CalcTextBox.Text = "Error";
                }
                return;
            }
            else if (operation == "x^2")
            {
                CalcTextBox.Text = (Double.Parse(CalcTextBox.Text) * Double.Parse(CalcTextBox.Text)).ToString();
                return;
            }
            else if (operation == "x^y" && !memorised)
            {
                memoryValue      = double.Parse(CalcTextBox.Text);
                memoryOpreation  = operation;
                memorised        = true;
                CalcTextBox.Text = "0";
                return;
            }
            else if (operation == "x^y" && memorised)
            {
                double j;
                switch (memoryOpreation)
                {
                case "x^y":
                    j           = Math.Pow(memoryValue, double.Parse(CalcTextBox.Text));
                    memoryValue = j;
                    break;

                case "/":
                    j           = memoryValue / double.Parse(CalcTextBox.Text);
                    memoryValue = j;
                    break;

                case "*":
                    j           = memoryValue * double.Parse(CalcTextBox.Text);
                    memoryValue = j;
                    break;

                case "+":
                    j           = memoryValue + double.Parse(CalcTextBox.Text);
                    memoryValue = j;
                    break;

                case "-":
                    j           = memoryValue * double.Parse(CalcTextBox.Text);
                    memoryValue = j;
                    break;

                default:
                    CalcTextBox.Text = "Error";
                    return;
                }
                memoryOpreation  = operation;
                CalcTextBox.Text = "0";
                return;
            }
            else if (operation == "1/x")
            {
                CalcTextBox.Text = (1 / Double.Parse(CalcTextBox.Text)).ToString();
                return;
            }
            else if (operation == "3√x")
            {
                CalcTextBox.Text = Math.Pow(Double.Parse(CalcTextBox.Text), (1.0 / 3)).ToString();
                return;
            }
            else if (operation == "x!")
            {
                int i = 0;
                try
                { i = int.Parse(CalcTextBox.Text); }
                catch
                {
                    CalcTextBox.Text = "Error";
                    StatusBarChangingDelegate update = new StatusBarChangingDelegate(StatusBarChanging);
                    update("Only round allowed");
                }
                if (factorialWorker.IsBusy != true)
                {
                    // Start the asynchronous operation.
                    factorialWorker.RunWorkerAsync(CalcTextBox.Text);
                }
            }
            else
            {
                return;
            }
        }