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--; }