public static ResponseVariant Clone(ResponseVariant responseVariant) { var newResponseVariant = new ResponseVariant(responseVariant.question) { Responses = (ArrayList)responseVariant.Responses.Clone(), Weight = responseVariant.Weight, Hint = responseVariant.Hint, NextQuestion = responseVariant.NextQuestion }; return newResponseVariant; }
private void addVariantButton_Click(object sender, EventArgs e) { variantNumber++; var rv = new ResponseVariant(question); question.ResponseVariants.Add(rv); variantsTabControl.TabPages.Add(string.Concat("Вариант ", variantNumber)); variantsTabControl.TabPages[variantsTabControl.TabPages.Count - 1].AutoScroll = true; FillTabPageWithResponses(variantsTabControl.TabPages[variantsTabControl.TabPages.Count - 1]); Check(); variantsTabControl.SelectedTab = variantsTabControl.TabPages[variantsTabControl.TabPages.Count - 1]; selectedTabIndex = variantsTabControl.TabPages.IndexOf(variantsTabControl.SelectedTab); viewVariantButton.Enabled = true; Warehouse.Warehouse.IsProjectModified = true; }
public static void ConvertResponseVariantDocument(HtmlEditingTool htmlEditingTool, Question question, ResponseVariant rv) { string html = string.Empty; var testModuleText = string.Empty; if (question.Parent is TestModule) { testModuleText = question.Parent.Text; } else { testModuleText = question.Parent.Parent.Text; } var questionHtml = question.DocumentHtml; if (question.QuestionDocument != null) { questionHtml = question.QuestionDocument.HtmlEditingTool.BodyInnerHtml; } html += "<table width=\"90%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\n" + "<tr>\n" + "<td>" + "<table border=\"0\" cellpadding=\"2\" cellspacing=\"2\" width=\"100%\">\n" + "<tr align=\"center\" bgcolor=\"#CCCCFF\">\n" + // имя и время теста "<td bgcolor=\"#eeeeee\" width=\"70%\" align=\"center\">" + "<b>" + testModuleText + "</b>" + "</td>\n" + "<td bgcolor=\"#ffeeee\"></td>\n" + "</tr>\n" + "<tr>\n" + // имя и время вопроса "<td bgcolor=\"#f5f5f5\" width=\"70%\" align=\"center\">" + "<i>" + question.Text + "</i> " + "</td>\n" + "<td bgcolor=\"#ffeeee\"></td>\n" + "</tr>\n" + "</table>\n" + "</td>\n" + "</tr>\n" + "<tr>\n" + "<td>\n" + "<table border=\"0\" cellpadding=\"2\" cellspacing=\"2\" width=\"100%\">\n" + "<tr bgcolor=\"#eeeeff\">\n" + // сам вопрос "<td colspan=\"3\">\n" + questionHtml + "</td>\n" + "</tr>\n" + "</table>\n" + "<table border=\"0\" cellpadding=\"2\" cellspacing=\"2\" width=\"100%\">\n"; if (question is OpenQuestion) { html += "<tr bgcolor=\"#f5f5f5\">\n" + "<td width=\"100%\" align=\"left\">\n" + "<input type=\"text\" value=\"" + rv.Responses[0].ToString() + "\"/>\n" + "</td>\n" + "</tr>\n"; } else { char letter = 'a'; foreach (Response response in question.Responses) { html += "<tr bgcolor=\"#f5f5f5\">\n" + "<td width=\"5%\" align=\"center\">\n" + letter + "</td>\n" + "<td width=\"5%\" align=\"center\">\n"; if (question is ChoiceQuestion) { if (rv.Responses.Contains(response)) { html += "<input type=\"radio\" checked/>\n"; } else { html += "<input type=\"radio\" />\n"; } } else if (question is MultichoiceQuestion) { if (rv.Responses.Contains(response)) { html += "<input type=\"checkbox\" checked/>\n"; } else { html += "<input type=\"checkbox\" />\n"; } } else if (question is OrderingQuestion) { html += "<input type=\"hidden\" value=\"c\" />\n"; html += "<select name=\"c\">\n"; html += "<option>" + (int)rv.Responses[question.Responses.IndexOf(response)] + "</option>\n"; for (int i = 1; i <= question.Responses.Count; i++) { html += "<option value=\"" + i + "\">" + i + "</option>\n"; } html += "</select>\n"; } var responseHtml = response.DocumentHtml; if (response.ResponseDocument != null) { responseHtml = response.ResponseDocument.HtmlEditingTool.BodyInnerHtml; } html += "</td>\n" + "<td>\n" + responseHtml + "</td>\n" + "</tr>\n"; letter++; } } html += "</table>\n" + "</BODY>\n" + "</HTML>"; htmlEditingTool.BodyInnerHtml = html; ConvertImages(htmlEditingTool); ConvertFlashes(htmlEditingTool); }
/// <summary> /// Чтение информации из файла формата IMS QTI 2.1. /// </summary> /// <param name="qfPath">Путь к файлу.</param> public override bool ReadQti(string qfPath) { XmlTextReader reader = new XmlTextReader(qfPath); bool result = true; Id = Guid.NewGuid(); string HtmlText = "<HTML>\n<HEAD>\n<BASE href=\"" + Application.StartupPath + // раньше было определено где-то там "\\\">\n</HEAD>\n<BODY>\n<P>"; try { //"вынимаем" элементы ответа while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name.Equals("simpleChoice")) { Response r = new Response(); r.DocumentHtml = "<HTML>\n<HEAD>\n<BASE href=\"" + Application.StartupPath + "\\\">\n</HEAD>\n<BODY>\n<P>"; if (reader.GetAttribute("identifier") != null) { try { r.Id = Guid.NewGuid();//new Guid(reader.GetAttribute("identifier")); r.Text = reader.GetAttribute("identifier"); r.Identifier = reader.GetAttribute("identifier"); } catch { r.Identifier = reader.GetAttribute("identifier"); r.Id = Guid.NewGuid(); r.Text = reader.GetAttribute("identifier"); } } if (reader.GetAttribute("fixed") != null) { r.IsFixed = bool.Parse(reader.GetAttribute("fixed")); } string s = reader.ReadInnerXml(); r.DocumentHtml += ConvertXmlStringToHtml(s, qfPath); r.DocumentHtml += "</P>\n</BODY>\n</HTML>"; // реализовать // r.FillImagesArray(); // this.Responses.Add(r); Nodes.Add(r); // Responses.Add(r); } } } reader.Close(); //затем "вынимаем" всё остальное reader = new XmlTextReader(qfPath); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name.Equals("assessmentItem", StringComparison.OrdinalIgnoreCase)) { if (reader.GetAttribute("timeDependent") != null) { bool.TryParse(reader.GetAttribute("timeDependent"), out isTimeDependent); } if (reader.GetAttribute("identifier") != null) { identifier = reader.GetAttribute("identifier"); //был с заглавной } if (reader.GetAttribute("adaptive") != null) { bool.TryParse(reader.GetAttribute("adaptive"), out isAdaptive); } if (reader.GetAttribute("title") != null) { Text = reader.GetAttribute("title"); } else Text = reader.GetAttribute("identifier"); } if (reader.Name.Equals("correctResponse", StringComparison.OrdinalIgnoreCase)) { bool endCycle = false; ResponseVariant rv = new ResponseVariant(this); rv.Weight = 1.0; while (!endCycle && reader.Read()) { if (reader.Name.Equals("value", StringComparison.OrdinalIgnoreCase)) { string value = reader.ReadString(); foreach (Response response in Responses) { if ((response.Id.ToString() == value) || response.Identifier == value) { rv.Responses.Add(response); } } } else if (reader.NodeType == XmlNodeType.EndElement) { if (reader.Name.Equals("correctResponse", StringComparison.OrdinalIgnoreCase)) { endCycle = true; } } } ResponseVariants.Add(rv); } if (reader.Name.Equals("mapping", StringComparison.OrdinalIgnoreCase)) { if (reader.GetAttribute("lowerBound") != null) LowerBound = int.Parse(reader.GetAttribute("lowerBound")); if (reader.GetAttribute("upperBound") != null) Marks = int.Parse(reader.GetAttribute("upperBound")); if (reader.GetAttribute("defaultValue") != null) DefaultValue = int.Parse(reader.GetAttribute("defaultValue")); } if (reader.Name.Equals("mapEntry", StringComparison.OrdinalIgnoreCase)) { foreach (Response response in Responses) { if (response.Id.ToString() == reader.GetAttribute("mapKey")) { if (reader.GetAttribute("mappedValue") != null) { string s = reader.GetAttribute("mappedValue"); // разделитель, используемый в системе string decimalSeparator = NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator; // подменяем точки и запятые на разделитель, используемый в системе, чтобы преобразовать строку в число без ошибок s = s.Replace(".", decimalSeparator); s = s.Replace(",", decimalSeparator); double d; Double.TryParse(s, out d); response.MappedValue = d; } } } } if (reader.Name.Equals("itemBody", StringComparison.OrdinalIgnoreCase)) { // считываем содержимое тега itemBody while (!reader.Name.Equals("choiceInteraction", StringComparison.OrdinalIgnoreCase) && reader.Read()) { if (reader.Name.Equals("p", StringComparison.OrdinalIgnoreCase)) { string xml = reader.ReadInnerXml(); string html = ConvertXmlStringToHtml(xml, qfPath); if (html != " ") { HtmlText += "<P>" + html + "</P>"; } } if (reader.Name.Equals("img", StringComparison.OrdinalIgnoreCase)) { try { // создаём папку для картинок проекта if (!Directory.Exists(Warehouse.Warehouse.RelativeImagesDirectory)) { Directory.CreateDirectory(Warehouse.Warehouse.RelativeImagesDirectory); } // копируем туда картинку var destPath = Path.Combine(Warehouse.Warehouse.AbsoluteEditorImagesDirectory, Path.GetFileName(reader.GetAttribute("src"))); // var destPath = Path.Combine(Warehouse.Warehouse.AbsoluteEditorImagesDirectory, Path.GetFileName(reader.GetAttribute("src"))); File.Copy(Path.GetDirectoryName(qfPath) + "\\" + reader.GetAttribute("src"), destPath, true); // var inner = TagNames.ImageTagName; string height = reader.GetAttribute("height"); string width = reader.GetAttribute("width"); string align = reader.GetAttribute("align"); string border = reader.GetAttribute("border"); string hspace = reader.GetAttribute("hspace"); string sf = Path.Combine(Warehouse.Warehouse.RelativeImagesDirectory, Path.GetFileName(reader.GetAttribute("src"))); HtmlText += "<IMG" + " border=\"" + border + "\" hspace=\"" + hspace + "\" align=\"" + align + "\" sdocument=\"0\" src=\"" + sf + "\" height=\"" + height + "\" width=\"" + width + "\"" + ">"; } catch (FileNotFoundException) { MessageBox.Show("Изображение " + reader.GetAttribute("src") + " не найдено.", "Visual Editor", MessageBoxButtons.OK, MessageBoxIcon.Error); } } #region самодеятельность с медиа if (reader.Name.Equals("object", StringComparison.OrdinalIgnoreCase)) { try { if (Path.GetExtension(Path.GetFileName(reader.GetAttribute("data"))) == ".mp4" || Path.GetExtension(Path.GetFileName(reader.GetAttribute("data"))) == ".flv") { if (!Directory.Exists(Warehouse.Warehouse.RelativeVideosDirectory)) { Directory.CreateDirectory(Warehouse.Warehouse.RelativeVideosDirectory); } // копируем туда картинку string data = reader.GetAttribute("data"); var destPath = Path.Combine(Warehouse.Warehouse.AbsoluteEditorVideosDirectory, Path.GetFileName(data)); var sourcePath = Path.Combine(Path.GetDirectoryName(qfPath), Path.GetFileName(data)); File.Copy(sourcePath, destPath, true); string asf = Path.Combine(Warehouse.Warehouse.RelativeImagesDirectory, Path.GetFileName("\\Images\\Vid.png")); string sf = Path.Combine(Warehouse.Warehouse.RelativeVideosDirectory, Path.GetFileName(data)); HtmlText += string.Concat("<IMG src=\"" + asf + "\" width=\"16\" height=\"16\" sdocument=\"0\" src_=\"" + sf + "\" >"); } else if (Path.GetExtension(Path.GetFileName(reader.GetAttribute("data"))) == ".mp3") { if (!Directory.Exists(Warehouse.Warehouse.RelativeAudiosDirectory)) { Directory.CreateDirectory(Warehouse.Warehouse.RelativeAudiosDirectory); } // копируем туда картинку var destPath = Path.Combine(Warehouse.Warehouse.AbsoluteEditorAudiosDirectory, Path.GetFileName(reader.GetAttribute("data"))); var sourcePath = Path.Combine(Path.GetDirectoryName(qfPath), Path.GetFileName(reader.GetAttribute("data"))); File.Copy(sourcePath, destPath, true); string asf = Path.Combine(Warehouse.Warehouse.RelativeImagesDirectory, Path.GetFileName("\\Images\\Aud.png")); string sf = Path.Combine(Warehouse.Warehouse.RelativeAudiosDirectory, Path.GetFileName(reader.GetAttribute("data"))); HtmlText += string.Concat("<IMG src=\"" + asf + "\" width=\"16\" height=\"16\" sdocument=\"0\" src_=\"" + sf + "\" >"); } else if (Path.GetExtension(Path.GetFileName(reader.GetAttribute("data"))) == ".swf") { if (!Directory.Exists(Warehouse.Warehouse.RelativeFlashesDirectory)) { Directory.CreateDirectory(Warehouse.Warehouse.RelativeFlashesDirectory); } // копируем туда картинку string data = reader.GetAttribute("data"); var destPath = Path.Combine(Warehouse.Warehouse.AbsoluteEditorFlashesDirectory, Path.GetFileName(data)); var sourcePath = Path.Combine(Path.GetDirectoryName(qfPath), Path.GetFileName(data)); File.Copy(sourcePath, destPath, true); string asf = Path.Combine(Warehouse.Warehouse.RelativeImagesDirectory, Path.GetFileName("\\Images\\Anim.png")); string sf = Path.Combine(Warehouse.Warehouse.RelativeFlashesDirectory, Path.GetFileName(data)); HtmlText += string.Concat("<IMG src=\"" + asf + "\" width=\"16\" height=\"16\" sdocument=\"0\" src_=\"" + sf + "\" >"); } } catch (FileNotFoundException) { MessageBox.Show("Изображение " + reader.GetAttribute("src") + " не найдено.", "Visual Editor", MessageBoxButtons.OK, MessageBoxIcon.Error); } } #endregion } } if (reader.Name.Equals("choiceInteraction", StringComparison.OrdinalIgnoreCase)) { if (reader.GetAttribute("responseIdentifier") != null) { identifier = reader.GetAttribute("responseIdentifier"); } if (reader.GetAttribute("shuffle") != null) { IsShuffle = bool.Parse(reader.GetAttribute("shuffle")); } if (reader.GetAttribute("maxChoices") != null) { MaxChoices = int.Parse(reader.GetAttribute("maxChoices")); } } if (reader.Name.Equals("prompt", StringComparison.OrdinalIgnoreCase)) { string s = reader.ReadInnerXml(); HtmlText += "<P>" + ConvertXmlStringToHtml(s, qfPath) + "</P>"; } ////////////////////// \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ /* if (reader.Name.Equals("object", StringComparison.OrdinalIgnoreCase)) { try { if (Path.GetExtension(Path.GetFileName(reader.GetAttribute("data"))) == ".mp4" || Path.GetExtension(Path.GetFileName(reader.GetAttribute("data"))) == ".flv") { if (!Directory.Exists(Warehouse.Warehouse.RelativeVideosDirectory)) { Directory.CreateDirectory(Warehouse.Warehouse.RelativeVideosDirectory); } // копируем туда картинку // копируем туда картинку string data = reader.GetAttribute("data"); var destPath = Path.Combine(Warehouse.Warehouse.AbsoluteEditorVideosDirectory, Path.GetFileName(data)); var sourcePath = Path.Combine(Path.GetDirectoryName(qfPath), Path.GetFileName(data)); File.Copy(sourcePath, destPath, true); string asf = Path.Combine(Warehouse.Warehouse.RelativeImagesDirectory, Path.GetFileName("\\Images\\Vid.png")); string sf = Path.Combine(Warehouse.Warehouse.RelativeVideosDirectory, Path.GetFileName(data)); HtmlText += string.Concat("<IMG src=\"" + asf + "\" width=\"16\" height=\"16\" sdocument=\"0\" src_=\"" + sf + "\" >"); } else if (Path.GetExtension(Path.GetFileName(reader.GetAttribute("data"))) == ".mp3") { if (!Directory.Exists(Warehouse.Warehouse.RelativeAudiosDirectory)) { Directory.CreateDirectory(Warehouse.Warehouse.RelativeAudiosDirectory); } // копируем туда картинку var destPath = Path.Combine(Warehouse.Warehouse.AbsoluteEditorAudiosDirectory, Path.GetFileName(reader.GetAttribute("data"))); var sourcePath = Path.Combine(Path.GetDirectoryName(qfPath), Path.GetFileName(reader.GetAttribute("data"))); File.Copy(sourcePath, destPath, true); string asf = Path.Combine(Warehouse.Warehouse.RelativeImagesDirectory, Path.GetFileName("\\Images\\Aud.png")); string sf = Path.Combine(Warehouse.Warehouse.RelativeAudiosDirectory, Path.GetFileName(reader.GetAttribute("data"))); HtmlText += string.Concat("<IMG src=\"" + asf + "\" width=\"16\" height=\"16\" sdocument=\"0\" src_=\"" + sf + "\" >"); } else if (Path.GetExtension(Path.GetFileName(reader.GetAttribute("data"))) == ".swf") { if (!Directory.Exists(Warehouse.Warehouse.RelativeFlashesDirectory)) { Directory.CreateDirectory(Warehouse.Warehouse.RelativeFlashesDirectory); } // копируем туда картинку string data = reader.GetAttribute("data"); var destPath = Path.Combine(Warehouse.Warehouse.AbsoluteEditorFlashesDirectory, Path.GetFileName(data)); var sourcePath = Path.Combine(Path.GetDirectoryName(qfPath), Path.GetFileName(data)); File.Copy(sourcePath, destPath, true); string asf = Path.Combine(Warehouse.Warehouse.RelativeImagesDirectory, Path.GetFileName("\\Images\\Anim.png")); string sf = Path.Combine(Warehouse.Warehouse.RelativeFlashesDirectory, Path.GetFileName(data)); HtmlText += string.Concat("<IMG src=\"" + asf + "\" width=\"16\" height=\"16\" sdocument=\"0\" src_=\"" + sf + "\" >"); } } catch (FileNotFoundException) { MessageBox.Show("Изображение " + reader.GetAttribute("src") + " не найдено.", "Visual Editor", MessageBoxButtons.OK, MessageBoxIcon.Error); } }*/ ////////////////////---------------------------------------------------------------- if (reader.Name.Equals("responseIf", StringComparison.OrdinalIgnoreCase) || reader.Name.Equals("responseElseIf", StringComparison.OrdinalIgnoreCase) || reader.Name.Equals("responseElse", StringComparison.OrdinalIgnoreCase)) { ArrayList list = new ArrayList(0); string mark = string.Empty; bool endCycle = false; string name = reader.Name; while (!endCycle && reader.Read()) { if (reader.Name.Equals("baseValue", StringComparison.OrdinalIgnoreCase)) { if (reader.GetAttribute("baseType").Equals("identifier", StringComparison.OrdinalIgnoreCase)) { string response = reader.ReadString(); // разбиваем строку на слова Match match = Regex.Match(response, @"\w+"); // цикл по всем словам while (match.Success) { list.Add(match.ToString()); match = match.NextMatch(); } } else if (reader.GetAttribute("baseType").Equals("integer", StringComparison.OrdinalIgnoreCase) || reader.GetAttribute("baseType").Equals("float", StringComparison.OrdinalIgnoreCase)) { if (name.Equals("responseIf", StringComparison.OrdinalIgnoreCase)) { string m = reader.ReadString(); m = m.Replace(".", NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator); m = m.Replace(",", NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator); Marks = int.Parse(m);// Double.Parse(m); mark = m; } else { mark = reader.ReadString(); } } } else if (reader.NodeType == XmlNodeType.EndElement) { if (reader.Name.Equals(name, StringComparison.OrdinalIgnoreCase)) { endCycle = true; } } } if (list.Count > 0) { ResponseVariant rv = new ResponseVariant(this); foreach (Response r in Responses) { foreach (string id in list) { if (r.Identifier == id && !rv.Responses.Contains(id)) { rv.Responses.Add(r); } } } if (mark != string.Empty) { if (!name.Equals("responseElse", StringComparison.OrdinalIgnoreCase)) { mark = mark.Replace(".", NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator); mark = mark.Replace(",", NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator); if (Marks != 0) rv.Weight = Double.Parse(mark) / Marks; else rv.Weight = 0; } } ResponseVariants.Add(rv); } } } } } catch { MessageBox.Show("При чтении файла вопроса произошла ошибка. (" + qfPath + ")", "Visual Editor", MessageBoxButtons.OK, MessageBoxIcon.Error); result = false; } finally { reader.Close(); HtmlText += "</P>\n</BODY>\n</HTML>"; //решить //FillImagesArray(); } // мои художества this.DocumentHtml = HtmlText; success = true; return result; }
public static Question Clone(Question question) { Question newQuestion = null; #region Инициализация вопроса if (question is ChoiceQuestion) { newQuestion = new ChoiceQuestion(); } else if (question is MultichoiceQuestion) { newQuestion = new MultichoiceQuestion(); } else if (question is InteractiveQuestion) { newQuestion = new InteractiveQuestion(); } else if (question is OrderingQuestion) { newQuestion = new OrderingQuestion(); } else if (question is OpenQuestion) { newQuestion = new OpenQuestion(); } else if (question is CorrespondenceQuestion) { newQuestion = new CorrespondenceQuestion(); } else if (question is OuterQuestion) { newQuestion = new OuterQuestion(); (newQuestion as OuterQuestion).TaskId = (question as OuterQuestion).TaskId; (newQuestion as OuterQuestion).TaskName = (question as OuterQuestion).TaskName; (newQuestion as OuterQuestion).TestName = (question as OuterQuestion).TestName; (newQuestion as OuterQuestion).SubjectName = (question as OuterQuestion).SubjectName; (newQuestion as OuterQuestion).Declaration = (question as OuterQuestion).Declaration; (newQuestion as OuterQuestion).Url = (question as OuterQuestion).Url; } #endregion newQuestion.LowerBound = question.LowerBound; newQuestion.Cardinality = question.Cardinality; newQuestion.Text = question.Text; newQuestion.Id = Guid.NewGuid(); newQuestion.DocumentHtml = string.Copy(question.DocumentHtml); newQuestion.TimeRestriction = question.TimeRestriction; newQuestion.Profile = question.Profile; newQuestion.Marks = question.Marks; newQuestion.Hint = question.Hint; newQuestion.NextQuestion = question.NextQuestion; newQuestion.IsAdaptive = question.IsAdaptive; newQuestion.BaseType = question.BaseType; newQuestion.DefaultValue = question.DefaultValue; //newQuestion.Mark = question.Mark; newQuestion.IsShuffle = question.IsShuffle; newQuestion.MaxChoices = question.MaxChoices; // newQuestion.timeRestriction = question.timeRestriction; newQuestion.identifier = question.identifier; // идентификатор вопроса ("VE-" + questionNumber + questionType) foreach (var questionResponse in question.Responses) { var response = Response.Clone(questionResponse); newQuestion.Nodes.Add(response); } foreach (ResponseVariant questionResponseVariant in question.ResponseVariants) { var responseVariant = new ResponseVariant(question); if (!(question is OrderingQuestion) && !(question is OpenQuestion)) { foreach (Response response in questionResponseVariant.Responses) { for (var i = 0; i < question.Responses.Count; i++) { if ((question.Responses[i]).Text.Equals(response.Text)) { responseVariant.Responses.Add(question.Responses[i]); break; } } } } else { for (var i = 0; i < questionResponseVariant.Responses.Count; i++) { responseVariant.Responses.Add(questionResponseVariant.Responses[i]); } } responseVariant.Weight = questionResponseVariant.Weight; responseVariant.Hint = questionResponseVariant.Hint; responseVariant.NextQuestion = questionResponseVariant.NextQuestion; // моё newQuestion.ResponseVariants.Add(responseVariant); } return newQuestion; }
public override void ReadXml(XmlTextReader xmlReader) { try { var isEndCycle = false; while (!isEndCycle && xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element) { #region Контент вопроса if (xmlReader.Name.Equals("html_text")) { var s = xmlReader.ReadElementString(); if (s != null) { question.DocumentHtml = XmlToHtml(s); } } #endregion #region Варианты ответа if (xmlReader.Name.Equals("answer_variants")) { var rv = new ResponseVariant(question); //rv.Type = reader.GetAttribute("type"); var weight = xmlReader.GetAttribute("weight"); weight = weight.Replace(".", NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator); weight = weight.Replace(",", NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator); rv.Weight = double.Parse(weight); var gh = xmlReader.GetAttribute("next_question"); if (xmlReader.GetAttribute("next_question") != null) { rv.NextQuestion = xmlReader.GetAttribute("next_question"); } rv.Responses.Add(xmlReader.GetAttribute("value")); question.ResponseVariants.Add(rv); } #endregion #region Подсказка if (xmlReader.Name.Equals("hint", StringComparison.OrdinalIgnoreCase)) { try { var s = xmlReader.ReadString(); if (s != null) { question.Hint = XmlToHtml(s); } } catch { } } #endregion if (xmlReader.Name.Equals("mark")) { question.Marks = int.Parse(xmlReader.GetAttribute("value")); try { var id = new Guid(xmlReader.GetAttribute("concept_id").Substring(6, 36)); foreach (Concept c in Warehouse.Warehouse.Instance.ConceptTree.Nodes) { if (c.Id.Equals(id)) { question.Profile = c; break; } } } catch { question.Profile = null; } } } else if (xmlReader.NodeType == XmlNodeType.EndElement) { if (xmlReader.Name.ToLower().Equals("question")) { isEndCycle = true; } } } } catch (Exception ex) { ExceptionManager.Instance.LogException(ex); } }
/// <summary> /// Отображает на вкладке все элементы ответа, содержащиеся в вопросе, с /// выделением тех, которые входят в вариант ответа. /// </summary> private void FillTabPageWithResponseVariants(TabPage tp, ResponseVariant rv) { int i = 1; if (question is ChoiceQuestion) { foreach (var response in question.Responses) { var rb = new RadioButton(); rb.Text = response.Text; rb.Location = new Point(20, i * 20); foreach (Response r in rv.Responses) { if (r.Text == response.Text) { rb.Checked = true; break; } } tp.Controls.Add(rb); i++; } } else if (question is MultichoiceQuestion) { foreach (var response in question.Responses) { var chb = new CheckBox(); chb.Text = response.Text; chb.Location = new Point(20, i * 20); foreach (Response r in rv.Responses) { if (r.Text == response.Text) { chb.Checked = true; break; } } tp.Controls.Add(chb); i++; } } else if (question is OrderingQuestion) { foreach (var response in question.Responses) { var cb = new ComboBox(); for (int j = 1; j <= question.Responses.Count; j++) { cb.Items.Add(j); } cb.Width = 50; cb.Location = new Point(20, i * 25); if ((int)rv.Responses[i - 1] != 0) { cb.Text = ((int)rv.Responses[i - 1]).ToString(); } cb.DropDownStyle = ComboBoxStyle.DropDownList; tp.Controls.Add(cb); var lb = new Label(); lb.Text = response.Text; lb.Location = new System.Drawing.Point(80, i * 25 + 5); tp.Controls.Add(lb); i++; } } else if (question is OpenQuestion) { if (((OpenQuestion)question).IsAnswerNumeric) { var nud = new NumericUpDown(); nud.Location = new Point(20, 20); nud.Increment = 0.1M; nud.DecimalPlaces = 2; nud.Maximum = 1000000; decimal temp; if (decimal.TryParse(rv.Responses[0].ToString(), out temp)) { nud.Value = decimal.Parse(rv.Responses[0].ToString()); } else { nud.Value = 0; } tp.Controls.Add(nud); } else { var tb = new RichTextBox(); tb.Location = new Point(10, 10); tb.Width = 325; tb.Height = 207; tb.ScrollBars = RichTextBoxScrollBars.Both; tb.Text = rv.Responses[0].ToString(); tp.Controls.Add(tb); } } }
/// <summary> /// Отображает варианты ответа, содержащиеся в вопросе. /// </summary> private void InitializeTabPages() { if (question.ResponseVariants.Count == 0) { var rv = new ResponseVariant(question); question.ResponseVariants.Add(rv); variantNumber++; variantsTabControl.TabPages.Add(string.Concat("Вариант ", variantNumber)); variantsTabControl.TabPages[variantsTabControl.TabPages.Count - 1].AutoScroll = true; FillTabPageWithResponses(variantsTabControl.TabPages[variantsTabControl.TabPages.Count - 1]); weightNumericUpDown.Value = 1; } else { foreach (ResponseVariant rv in question.ResponseVariants) { variantNumber++; variantsTabControl.TabPages.Add(string.Concat("Вариант ", variantNumber)); variantsTabControl.TabPages[variantsTabControl.TabPages.Count - 1].AutoScroll = true; FillTabPageWithResponseVariants(variantsTabControl.TabPages[variantsTabControl.TabPages.Count - 1], rv); } weightNumericUpDown.Value = (decimal)((ResponseVariant)question.ResponseVariants[0]).Weight; var wt = Warehouse.Warehouse.Instance.CourseTree.CurrentNode.Parent as TestModule; foreach (var question1 in wt.Questions) if ("#module{" + question1.Id.ToString().ToUpper() + "}" == ((ResponseVariant)question.ResponseVariants[0]).NextQuestion) { nextQuestionComboBox.Text = question1.Text; int t = 0; ((ResponseVariant)question.ResponseVariants[0]).NextQuestion = question1.Text; } nextQuestionComboBox.Text = ((ResponseVariant)question.ResponseVariants[0]).NextQuestion; } }
/// <summary> /// Отображает на вкладке все элементы ответа, содержащиеся в вопросе, с /// выделением тех, которые входят в вариант ответа. /// </summary> private void FillTabPageWithResponseVariants(TabPage tp, ResponseVariant rv) { int i = 1; if (question is ChoiceQuestion) { foreach (var response in question.Responses) { var rb = new RadioButton(); rb.Text = response.Text; rb.Location = new Point(20, i * 20); foreach (Response r in rv.Responses) { if (r.Text == response.Text) { rb.Checked = true; break; } } tp.Controls.Add(rb); i++; } } else if (question is MultichoiceQuestion) { foreach (var response in question.Responses) { var chb = new CheckBox(); chb.Text = response.Text; chb.Location = new Point(20, i * 20); foreach (Response r in rv.Responses) { if (r.Text == response.Text) { chb.Checked = true; break; } } tp.Controls.Add(chb); i++; } } else if (question is OrderingQuestion) { foreach (var response in question.Responses) { var cb = new ComboBox(); for (int j = 1; j <= question.Responses.Count; j++) { cb.Items.Add(j); } cb.Width = 50; cb.Location = new Point(20, i * 25); if ((int)rv.Responses[i - 1] != 0) { cb.Text = ((int)rv.Responses[i - 1]).ToString(); } cb.DropDownStyle = ComboBoxStyle.DropDownList; tp.Controls.Add(cb); var lb = new Label(); lb.Text = response.Text; lb.Location = new System.Drawing.Point(80, i * 25 + 5); tp.Controls.Add(lb); i++; } } else if (question is OpenQuestion) { var tb = new TextBox(); tb.Location = new Point(10, 10); tb.Width = 325; tb.Text = rv.Responses[0].ToString(); tp.Controls.Add(tb); if (((OpenQuestion)question).IsAnswerNumeric) { tb.KeyPress += tb_KeyPress; } } }
/// <summary> /// Отображает варианты ответа, содержащиеся в вопросе. /// </summary> private void InitializeTabPages() { if (question.ResponseVariants.Count == 0) { var rv = new ResponseVariant(question); question.ResponseVariants.Add(rv); variantNumber++; variantsTabControl.TabPages.Add(string.Concat("Вариант ", variantNumber)); variantsTabControl.TabPages[variantsTabControl.TabPages.Count - 1].AutoScroll = true; FillTabPageWithResponses(variantsTabControl.TabPages[variantsTabControl.TabPages.Count - 1]); weightNumericUpDown.Value = 1; } else { foreach (ResponseVariant rv in question.ResponseVariants) { variantNumber++; variantsTabControl.TabPages.Add(string.Concat("Вариант ", variantNumber)); variantsTabControl.TabPages[variantsTabControl.TabPages.Count - 1].AutoScroll = true; FillTabPageWithResponseVariants(variantsTabControl.TabPages[variantsTabControl.TabPages.Count - 1], rv); } weightNumericUpDown.Value = (decimal)((ResponseVariant)question.ResponseVariants[0]).Weight; } }
public ResponseVariantXmlReader(Question question, ResponseVariant responseVariant) { this.question = question; this.responseVariant = responseVariant; }