//ПРОВЕРКА ВВЕДЕННОСТИ ДАННЫХ
        private async void saveData_Click(object sender, RoutedEventArgs e)
        {
            if (saveDataFlag == true)
            {
                saveDataFlag = false;

                isCurrentData = false;
                if (lastName.Text != "" && lastName.Text != "Фамилия" &&
                    firstName.Text != "" && firstName.Text != "Имя" &&
                    secondName.Text != "" && secondName.Text != "Отчество" &&
                    group.Text != "" && group.Text != "Группа")
                {
                    Regex regFIO   = new Regex("^([А-Я]|[A-Z])([а-я]|[a-z])+$");
                    Regex regGroup = new Regex("^[А-ЯA-Z 0-9\\-]*$");//"^([А-Я]|[A-Z]){2,}(\\-| )?\\d{1,2}\\-\\d{2}$"
                    if (regFIO.IsMatch(lastName.Text) &&
                        regFIO.IsMatch(firstName.Text) &&
                        regFIO.IsMatch(secondName.Text) &&
                        regGroup.IsMatch(group.Text))
                    {
                        curRec.Content = lastName.Text + " " + firstName.Text + " " + secondName.Text + " " + group.Text;
                        isCurrentData  = true;
                    }
                }

                if (isCurrentData == true)
                {
                    DataPopupText.Content = "ДАННЫЕ СОХРАНЕНЫ";
                }
                else
                {
                    DataPopupText.Content = "ДАННЫЕ НЕ СОХРАНЕННЫ";
                    curRec.Content        = "*Учетная запись";
                }
                DataPopupText.Background = isCurrentData == true?SpecialColor.green() : SpecialColor.red();

                DataPopup.IsOpen = true;
                await Task.Delay(2000);

                DataPopup.IsOpen = false;

                saveDataFlag = true;
            }
        }
        //подтверждение ответа
        private async void confirmAnswer_Click(object sender, RoutedEventArgs e)
        {
            if (test1)
            {
                return;
            }

            test1 = true;

            TestControl test_one = new TestControl();

            // Создаем словарь исходных данных
            if (checkAnswer.Variables == null)
            {
                checkAnswer.Variables = questions.getQuestionParams(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID);
            }

            // Создаем счетчик попыток для каждой неизвестной переменной, которую необходимо найти.
            if (numTry == null)
            {
                numTry = new List <int>();
                foreach (var item in questions.getQuestionFinds(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum))
                {
                    numTry.Add(0);
                }
            }

            if (mainPict == null)
            {
                mainPict = new List <string>();
                foreach (var i in questions.getQuestionFinds(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, 2))
                {
                    mainPict.Add(questions.getVariantsImgPath(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID)[choiceNextPage.loadID][1].ToString());
                }
            }

            // Создаем список неизвестных переменных
            if (questionFindList == null)
            {
                questionFindList = questions.getQuestionFinds(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum);
            }

            if (questionFormulasDict == null)
            {
                questionFormulasDict = questions.getQuestionFormuls(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum);
            }

            if (graphicHintList == null)
            {
                graphicHintList = questions.getTipsPath(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID);
            }


            // Рассчитывем введенную формулу
            checkAnswer.Formula = answer.Text;
            string formualaInput = checkAnswer.Check();


            if (questionFormulasDict.Count > 0)
            {
                // Строка правильной формулы
                checkAnswer.Formula = questionFormulasDict[test_one.SelectedIndex()]["0"];

                string formulaCorrectExport = checkAnswer.Formula;
                string formulaCorrect       = checkAnswer.Check();


                // Проверяем на ошибку "NullOrEmpty Error!" - если была передана пустая строка
                if (formualaInput == "NullOrEmpty Error!")
                {
                    AnswerPopupContent.Background = SpecialColor.orange();
                    AnswerPopupContent.Content    = "ОШИБКА";
                    test_one.AnswerTipsClear();
                    test_one.AnswerTip($"Ошибка! Введена пустая строка", "orange");
                }


                // Проверяем на ошибку "Syntax Error!" - если была выявлена синтаксическая ошибка
                else if (formualaInput == "Syntax Error!")
                {
                    AnswerPopupContent.Background = SpecialColor.orange();
                    AnswerPopupContent.Content    = "ОШИБКА";
                    test_one.AnswerTipsClear();
                    test_one.AnswerTip($"Была выявлена синтаксическая ошибка!", "orange");
                }


                // Проверяем на ошибку "Bracket Error!" - если была выявлена ошибка правильности написания скобок
                else if (formualaInput == "Bracket Error!")
                {
                    AnswerPopupContent.Background = SpecialColor.orange();
                    AnswerPopupContent.Content    = "ОШИБКА";
                    test_one.AnswerTipsClear();
                    test_one.AnswerTip($"Ошибка! Неправильно расставлены скобки!", "orange");
                }


                // Проверяем на ошибку "UnknownData Error!" - если были переданы неизвестные данные
                else if (formualaInput == "UnknownData Error!")
                {
                    AnswerPopupContent.Background = SpecialColor.orange();
                    AnswerPopupContent.Content    = "ОШИБКА";
                    test_one.AnswerTipsClear();
                    test_one.AnswerTip($"Ошибка! Введены неизвестные данные!", "orange");
                }

                // Если ошибок нет, то проводим рассчет введенной формулы и сравниваем её с правильной формулой
                // Если ответ совпал, то выводим информацию о "правильности" ответа и засчитываем правильный ответ.
                else if (Convert.ToDouble(formulaCorrect) == Convert.ToDouble(formualaInput))
                {
                    AnswerPopupContent.Background = SpecialColor.green();
                    AnswerPopupContent.Content    = "ПРАВИЛЬНО";

                    // +1 к счетчику правильных ответов
                    correctAnswersCount++;

                    // За правильный ответ дается 5 баллов
                    test_one.Score(5);

                    // На вопрос был дан ответ, следовательно попытки больше не нужны
                    numTry[test_one.SelectedIndex()] = 3;

                    test_one.AnswerTipsClear();
                    test_one.AnswerTip($"Правильно! Ответ: {formulaCorrectExport}", "green");
                }
                else
                {
                    AnswerPopupContent.Background = SpecialColor.red();
                    AnswerPopupContent.Content    = "НЕПРАВИЛЬНО";

                    // За не правильный ответ балл на 1
                    test_one.Score(-1);

                    // +1 к кол-ву попыток
                    numTry[test_one.SelectedIndex()]++;

                    // Очищаем другие уведомления
                    test_one.AnswerTipsClear();

                    if (stageNum == 2)
                    {
                        if (numTry[test_one.SelectedIndex()] == graphicHintNum)
                        {
                            mainPict[test_one.SelectedIndex()] = graphicHintList[test_one.SelectedIndex()];
                            test_one.GraphContent(System.IO.Path.GetFullPath(mainPict[test_one.SelectedIndex()]));
                        }
                    }

                    if (numTry[test_one.SelectedIndex()] < 3)
                    {
                        test_one.AnswerTip($"Дан неправильный ответ. У вас осталось еще {3 - numTry[test_one.SelectedIndex()]} попытки(-а)", "red");
                    }
                    else
                    {
                        test_one.AnswerTip($"Попыток больше нет!", "red");
                        test_one.AnswerTip($"Правильная формула: {formulaCorrectExport}", "red");
                        foreach (var item in questionFormulasDict[test_one.SelectedIndex()])
                        {
                            if (checkAnswer.Variables.ContainsKey(item.Key))
                            {
                                test_one.AnswerTip($"Правильная формула: {item.Value}", "red");
                            }
                        }
                    }
                }

                if (numTry[test_one.SelectedIndex()] >= 3)
                {
                    // Если эта переменная еще не найдена, то добавляем ее в словарь переменных
                    checkAnswer.Variables.Add(questionFindList[test_one.SelectedIndex()].ToLower(), Convert.ToDouble(formulaCorrect));

                    // Обновляем в графическом интерфейсе граф "задача"
                    test_one.QuestionVal(test_one.SelectedValue(), formulaCorrect);

                    // Удаляем найденную переменную из списка неизвестных переменных и выпадающего списка
                    questionFindList.Remove(test_one.SelectedValue());

                    // Удаляем счетчик кол-ва попыток ответа для найденой переменной
                    numTry.RemoveAt(test_one.SelectedIndex());

                    // Удаляем формулу для найденной переменной
                    questionFormulasDict.RemoveAt(test_one.SelectedIndex());

                    if (stageNum == 2)
                    {
                        graphicHintList.RemoveAt(test_one.SelectedIndex());
                        mainPict.RemoveAt(test_one.SelectedIndex());
                    }

                    // Очищаем вводное поле
                    answer.Clear();

                    // Обновляем выпадающий список
                    test_one.QuestionValsСВ(questionFindList);
                }

                AnswerPopup.IsOpen = true;
                await Task.Delay(1000);

                AnswerPopup.IsOpen = false;


                // Если закончился 1-ый этап ответов на вопрос, то переходим к следующему, иначе завершаем тест
                try {
                    if (questionFindList.Count <= 0)
                    {
                        stageNum += 1;

                        if (stageNum >= maxStageNum + 1)
                        {
                            test1 = true;
                            _timer.Stop();
                            test_one.AnswerTip($"Тестирование завершено! Пожалуйста, нажмите на кнопку 'Завершить тестирование'!", "orange");
                        }

                        else
                        {
                            // Обновляем исходные данные
                            string testtext = "";
                            int    proba    = 0;
                            bool   proba1   = false;
                            foreach (var massiv in checkAnswer.Variables)
                            {
                                if (massiv.Key != "Hb" && massiv.Key != "Va" && massiv.Key != "Vb")
                                {
                                    if (massiv.Key == "h" || massiv.Key == "d")
                                    {
                                        testtext += $"{massiv.Key} = {massiv.Value} м; ";
                                    }
                                    else
                                    {
                                        testtext += $"{massiv.Key} = {massiv.Value} кН; ";
                                    }
                                    proba++;
                                    if (proba >= 3)
                                    {
                                        testtext += "\n";
                                        proba     = 0;
                                    }
                                }
                                else
                                {
                                    if (proba1 == false)
                                    {
                                        testtext += "\nЗначения опор Кн:\n";
                                        proba     = 0;
                                        proba1    = true;
                                    }

                                    proba++;

                                    testtext += $"{massiv.Key} = {massiv.Value}; ";

                                    if (proba >= 3)
                                    {
                                        testtext += "\n";
                                        proba     = 0;
                                    }
                                }
                            }
                            test_one.DataExtraInfo(testtext);

                            test_one.DataMainInfo(questions.getQuestionText(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum));
                            test_one.QuestionVals(questions.getQuestionFinds(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum));

                            numTry               = null;
                            questionFindList     = null;
                            questionFormulasDict = null;

                            questionFindList = questions.getQuestionFinds(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum);

                            if (graphicHintNum == 0)
                            {
                                int numvalue = 0;
                                foreach (var value in graphicHintList)
                                {
                                    mainPict[numvalue] = value;
                                    numvalue++;
                                }
                                //mainPict = graphicHintList;
                                test_one.GraphContent(System.IO.Path.GetFullPath(mainPict[0]));
                            }

                            if (stageNum == 2)
                            {
                                test_one.VisualTip(System.IO.Path.GetFullPath("Img/block1/przn.png"));
                            }

                            test1 = false;
                        }
                    }
                    else
                    {
                        test1 = false;
                    }
                }
                finally
                {
                    // Создаем список неизвестных переменных
                    if (questionFindList == null)
                    {
                        questionFindList = questions.getQuestionFinds(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum);
                    }

                    if (questionFormulasDict == null)
                    {
                        questionFormulasDict = questions.getQuestionFormuls(choiceBlock.theme, choiceBlock.blockID, choiceNextPage.loadID, choiceNextPage.variantID, stageNum);
                    }
                }
            }
        }