예제 #1
0
        private void btAddAlt_Click(object sender, EventArgs e)
        {
            //добавляем новую альтернативу
            if (new QuestManipulator().AddNewAlt(_quest) == null)
            {
                btAddAlt.Enabled = false;
                return;
            }

            /*Добавляем новую альтернативу*/
            var alt = _quest.LastOrDefault();

            if (alt == null)
            {
                return;
            }

            var pn = new AlternativePanel();

            pn.Build(_questionnaire, _quest, alt);
            pn.AlternativeListChanged   += ProcessAlternativeListAction;
            pn.AddQuestionByAlternative += (questionId) => { QuestionnaireListChanged(questionId, UserPanelActionType.Add); };

            pn.Changed += () => Changed();
            pnAlternatives.Controls.Add(pn);
        }
        /// <summary>
        /// Строим интерфейс
        /// </summary>
        public void Build(Questionnaire questionnaire, Quest quest)
        {
            this.questionnaire = questionnaire;
            this.quest         = quest;

            //выставляем флажок обновления
            updating++;

            //создаем хелпер отрисовки, останавливаем отрисовку
            var helper = new ControlHelper(this);

            //переносим данные из объекта в интерфейс
            tbId.Text        = quest.Id;
            tbTitle.Text     = quest.Title;
            lbCondition.Text = quest.Condition?.ToString() ?? "Если...";

            //инициализируем комбобокс с типом вопроса
            cbQuestType.DataSource   = Enum.GetValues(typeof(QuestType));
            cbQuestType.SelectedItem = quest.QuestType;

            //строим список альтернатив
            //очищаем панель альтернатив
            pnAlternatives.Controls.Clear();
            //создаем контролы для каждой альтернативы
            foreach (var alt in quest)
            {
                //создаем usercontrol для альтренативы
                var pn = new AlternativePanel();
                //строим его
                pn.Build(questionnaire, quest, alt);
                //подписываемся на события
                pn.AlternativeListChanged += () =>
                {
                    Build(questionnaire, quest); //перестриваем интерфейс, если изменился список альтернатив
                    Changed();                   //сигнализируем наверх о том, что объект изменился
                };
                pn.Changed += () => Changed();   //сигнализируем наверх о том, что объект изменился
                //добавляем на панель альтернатив
                pnAlternatives.Controls.Add(pn);
            }

            //восстанавливаем отрисовку
            helper.ResumeDrawing();

            //сбрасываем флажок обновления
            updating--;
        }