private FormLSA formLSA;                //Форма для построения ЛСА.



        /////////////////////////////////////Public методы/////////////////////////////////////

        /// <summary>
        /// Конструктор..
        /// </summary>
        public FormMain()
        {
            //Инициализация компонентов.
            InitializeComponent();

            //Перечисление всех установленных свойств.
            this.Size        = new Size(400, 720);
            this.MinimumSize = new Size(400, 720);

            groupBoxAlgorthm.BackColor = Color.LightGray;
            groupBoxAlgorthm.Anchor    = (AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right);
            groupBoxAlgorthm.Text      = "Словесное описание алгоритма";
            groupBoxAlgorthm.Font      = new Font("calibri", 14, FontStyle.Bold);

            groupBoxScheme.BackColor = Color.LightGray;
            groupBoxScheme.Anchor    = (AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right);
            groupBoxScheme.Text      = "Схемы";
            groupBoxScheme.Font      = new Font("calibri", 14, FontStyle.Bold);

            textBoxAlgorithm.Multiline  = true;
            textBoxAlgorithm.ReadOnly   = true;
            textBoxAlgorithm.Anchor     = (AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right);
            textBoxAlgorithm.ScrollBars = ScrollBars.Both;
            textBoxAlgorithm.Font       = new Font("calibri", 14, FontStyle.Regular);
            textBoxAlgorithm.WordWrap   = false;    //Отключение переноса на другую строку, если текст не влазит в textbox.

            buttonGSA.BackColor = Color.LightGray;
            buttonGSA.FlatStyle = FlatStyle.Flat;
            buttonGSA.Location  = new Point(5, 40);
            buttonGSA.Size      = new Size(90, 36);
            buttonGSA.Text      = "ГСА";
            buttonGSA.Font      = new Font("calibri", 14, FontStyle.Bold);
            buttonGSA.Enabled   = false;            //Активной становится тогда, когда задание сгенерировано.

            buttonMSA.BackColor = Color.LightGray;
            buttonMSA.FlatStyle = FlatStyle.Flat;
            buttonMSA.Location  = new Point(135, 40);
            buttonMSA.Size      = new Size(90, 36);
            buttonMSA.Text      = "МСА";
            buttonMSA.Font      = new Font("calibri", 14, FontStyle.Bold);
            buttonMSA.Enabled   = false;            //Активной становится тогда, когда задание сгенерировано.

            buttonLSA.BackColor = Color.LightGray;
            buttonLSA.Anchor    = (AnchorStyles.Top | AnchorStyles.Right);
            buttonLSA.FlatStyle = FlatStyle.Flat;
            buttonLSA.Location  = new Point(265, 40);
            buttonLSA.Size      = new Size(90, 36);
            buttonLSA.Text      = "ЛСА";
            buttonLSA.Font      = new Font("calibri", 14, FontStyle.Bold);
            buttonLSA.Enabled   = false;            //Активной становится тогда, когда задание сгенерировано.

            //Поля класса.
            algorithm      = null;
            formSetting    = new SettingGenerate();
            formStatistics = new FormStatistics();
            formGSA        = null;
            formMSA        = null;
            formLSA        = null;
        }
        //************************************************************************************************
        // Панель кнопок открытия схем.
        //************************************************************************************************

        private void buttonGSA_Click(object sender, EventArgs e)
        {
            //Если форма еще не была открыта.
            if (formGSA == null)
            {
                formGSA = new FormGSA(algorithm, this);     //Создание главной формы задания.
                formGSA.Show();                             //Демонстрация формы.
            }
            //Если форма была открыта однажды.
            else
            {
                formGSA.Visible = true;
            }
        }
        /////////////////////////////////////Private методы/////////////////////////////////////

        //************************************************************************************************
        // Меню.
        //************************************************************************************************

        private void генерацияToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //Соглашение с новой генерацией.
            bool generate;

            if (algorithm != null)
            {
                DialogResult result = MessageBox.Show("При генерации задания данные будут потеряны, продолжить?", "Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                generate = (result == DialogResult.Yes);
            }
            else
            {
                generate = true;
            }

            //Генерация.
            if (generate)
            {
                if (formSetting.ShowDialog() == DialogResult.OK)
                {
                    //Генерация алгоритма.
                    Generator generator  = new Generator();
                    int       nOperator  = formSetting.NumberOperator;
                    int       nCondition = formSetting.NumberCondition;
                    algorithm = generator.generate(nOperator, nCondition, "A", "p", "0", "k");
                    //Отображение алгоритма.
                    showAlgorithm();
                    //Инициализация компонентов для открытия форм.
                    initializationForm();
                    //Настройка статистики.
                    resetStatistics(nOperator, nCondition);
                }
            }


            /////////////////////////////////////Локальные функции/////////////////////////////////////
            //Отображение алгоритма в textBox.
            void showAlgorithm()
            {
                textBoxAlgorithm.Clear();                                                           //Очистка поля для отображения алгоритма.
                for (int i = 0; i < algorithm.NumberOperator - 1; i++)
                {
                    textBoxAlgorithm.Text +=
                        "from " + algorithm.getOperatorVertex(i).Name +                             //Вершина, из которой идет переход.
                        " to " + algorithm.getOperatorVertex(i).VertexTo +                          //Вершина, в которую происходит переход.
                        Environment.NewLine;                                                        //Переход на новую строку.
                }
                for (int i = 0; i < algorithm.NumberCondition; i++)
                {
                    textBoxAlgorithm.Text +=
                        "from " + algorithm.getConditionVertex(i).Name +                            //Вершина, из которой идет переход.
                        " to " + algorithm.getConditionVertex(i).VertexTo_IfTrue +                  //Вершина, в которую происходит переход при истине.
                        " (if true) or" +
                        " to " + algorithm.getConditionVertex(i).VertexTo_IfFalse +                 //Вершина, в которую происходит переход при лжи.
                        " (if false)" +
                        Environment.NewLine;                                                        //Переход на новую строку.
                }
                textBoxAlgorithm.Select(0, 0);                                                      //Снятие выделения после вставки текста.
            }

            //Инициализация компонентов для открытия форм.
            void initializationForm()
            {
                //Активация кнопок схем.
                buttonGSA.Enabled = true;
                buttonMSA.Enabled = true;
                buttonLSA.Enabled = true;

                //Выделение кнопок схем.
                buttonGSA.BackColor = Color.Gold;
                buttonMSA.BackColor = Color.Gold;
                buttonLSA.BackColor = Color.Gold;

                //Закрытие форм, которые остались от прошлого задания.
                if (formGSA != null)
                {
                    formGSA.Close();
                    formGSA = null;
                }
                if (formMSA != null)
                {
                    formMSA.Close();
                    formMSA = null;
                }
                if (formLSA != null)
                {
                    formLSA = null;
                    formLSA.Close();
                }
            }

            //Перезагрузка статистики.
            void resetStatistics(int nOperator, int nCondition)
            {
                formStatistics.resetStatistics();
                formStatistics.NumberOperator  = nOperator.ToString();
                formStatistics.NumberCondition = nCondition.ToString();
                formStatistics.ConditionGSA    = "Не выполнено";
                formStatistics.ConditionMSA    = "Не выполнено";
                formStatistics.ConditionLSA    = "Не выполнено";
            }

            ///////////////////////////////////////////////////////////////////////////////////////////
        }