private void PassingTest_Load(object sender, EventArgs e) { listQuestion.Clear(); string query; string textQuestion, typeQuestion, answers; mark = 0; SqlConnection connection = new SqlConnection(ClassTotal.connectionString); connection.Open(); try { //Выборка всех данных из динамической таблицы с вопросами теста query = "SELECT * FROM " + ClassTotal.nameTest + "_" + ClassTotal.idTeacher; SqlCommand command = new SqlCommand(query, connection); SqlDataReader dataReader = command.ExecuteReader(); //Все записи //Перенести все вопросы теста в список while (dataReader.Read()) //Перебрать все записи по одной { //Получение полей текущей записи textQuestion = dataReader["Text_question"].ToString(); typeQuestion = dataReader["Type_question"].ToString(); answers = dataReader["Answers"].ToString(); //Создание объекта-вопроса конструктором ClassQuestion question = new ClassQuestion(textQuestion, typeQuestion, answers); listQuestion.Add(question); //Добавление вопроса в список } dataReader.Close(); connection.Close(); totalNumber = listQuestion.Count; //Общее количество вопросов this.progressBar.Maximum = totalNumber; currentNumber = 1; //Текущий номер вопроса trueNumber = 0; //Количество правильных ответов Show_Question(); } catch { MessageBox.Show("Данный тест был удален.\r\nОбратитесь к преподавателю."); connection.Close(); this.Close(); return; } }
private void buttonSaveQuestion_Click(object sender, EventArgs e) { ClassTotal.ans = ""; int temp_i = 0; //Ответы вопроса bool right = false; if (textBoxQuestion.Text != "") { switch (ClassTotal.type) { case "Одиночный выбор": for (int i = 0; i < this.splitContainer3.Panel1.Controls.Count; i += 2) { RadioButton rb = this.splitContainer3.Panel1.Controls[i] as RadioButton; TextBox tb = this.splitContainer3.Panel1.Controls[i + 1] as TextBox; if (tb.Text != "") //Сохранять только заполненные вопросы { temp_i++; if (rb.Checked) //Кнопка включена – вопрос выбран { ClassTotal.ans += "+" + tb.Text + ";"; //Учитывается + right = true; //Одна кнопка выбрана } else { ClassTotal.ans += "-" + tb.Text + ";"; //Выключена – «-« } } else { MessageBox.Show("Заполнины не все поля"); } } break; case "Множественный выбор": for (int i = 0; i < this.splitContainer3.Panel1.Controls.Count; i += 2) { CheckBox rb = this.splitContainer3.Panel1.Controls[i] as CheckBox; TextBox tb = this.splitContainer3.Panel1.Controls[i + 1] as TextBox; if (tb.Text != "") //Сохранять только заполненные вопросы { temp_i++; if (rb.Checked) //Кнопка включена – вопрос выбран { ClassTotal.ans += "+" + tb.Text + ";"; //Учитывается + right = true; //Одна кнопка выбрана } else { ClassTotal.ans += "-" + tb.Text + ";"; //Выключена – «-« } } else { MessageBox.Show("Заполнины не все поля"); } } break; case "Ввод слова": for (int i = 0; i < this.splitContainer3.Panel1.Controls.Count; i++) { TextBox tb = this.splitContainer3.Panel1.Controls[i] as TextBox; if (tb.Text != "") //Сохранять только заполненные вопросы { temp_i = 2; ClassTotal.ans += tb.Text + ";"; right = true; } else { MessageBox.Show("Заполнины не все поля"); } } break; case "Ввод значения": for (int i = 0; i < this.splitContainer3.Panel1.Controls.Count; i++) { TextBox tb = this.splitContainer3.Panel1.Controls[i] as TextBox; if (tb.Text != "") //Сохранять только заполненные вопросы { temp_i = 2; ClassTotal.ans += tb.Text; right = true; } else { MessageBox.Show("Заполнины не все поля"); } } break; case "На соответствие": for (int i = 0; i < this.splitContainer3.Panel1.Controls.Count; i += 2) { TextBox tb = this.splitContainer3.Panel1.Controls[i] as TextBox; TextBox tb1 = this.splitContainer3.Panel1.Controls[i + 1] as TextBox; if (tb.Text != "" && tb1.Text != "") { temp_i++; ClassTotal.ans += tb.Text + "&" + tb1.Text + ";"; right = true; } else { MessageBox.Show("Заполнины не все поля"); } } break; } if (right == true && temp_i > 1) { ClassQuestion question = new ClassQuestion(textBoxQuestion.Text, ClassTotal.type, ClassTotal.ans); listQuestion.Add(question); ClassTotal.QuantityQuestions++; //toolStripLabelNumberQuestion.Text = "Номер вопроса: " + ClassTotal.NumberQuestion; toolStripLabelQuantityQuestions.Text = "Количество вопросов: " + ClassTotal.QuantityQuestions; MessageBox.Show(ClassTotal.ans); listBox.Items.Add(textBoxQuestion.Text); this.splitContainer3.Panel1.Controls.Clear(); this.textBoxQuestion.Text = ""; ClassTotal.type = null; } else { MessageBox.Show("Заполнины не все поля"); } } else { MessageBox.Show("Заполните вопрос"); } }
private void Show_Question() { ClassQuestion question = listQuestion[currentNumber - 1]; //Объект-текущий вопрос теста this.textBoxTextQ.Text = question.textQuestion; //Получение информации о вопросе typeQuestion = question.typeQuestion; //Тип вопроса answers = question.answers; answerMas = answers.Split(';'); //Деление ответов на части countAnswers = answerMas.Length - 1; //Количество ответов splitContainer2.Panel2.Controls.Clear(); //Готовим панель для динамических компонентов trueAnswer = ""; //Строка правильных ответов //Отображаем динамические компоненты в зависимости от типа вопроса switch (typeQuestion) { case "Одиночный выбор": for (int i = 0; i < countAnswers; i++) { trueAnswer += answerMas[i][0]; //Первый символ в ответе хранит правильность: + или – //Динамические компоненты ответа зависят от типа вопроса ClassTotal.RadioButtonDynamic(splitContainer2.Panel2, 20, zazorTop + i * comHieght + i * zazor, 30, comHieght); ClassTotal.LabelDynamic(splitContainer2.Panel2, 60, zazorTop + i * comHieght + i * zazor, splitContainer2.Panel2.Width - 70, comHieght, answerMas[i].Remove(0, 1)); } break; case "Множественный выбор": for (int i = 0; i < countAnswers; i++) { trueAnswer += answerMas[i][0]; ClassTotal.CheckBoxDynamic(splitContainer2.Panel2, 3, 3 + (i * 40), 17, 20); ClassTotal.LabelDynamic(splitContainer2.Panel2, 25, 3 + (i * 40), 637, 20, answerMas[i].Remove(0, 1)); } break; case "Ввод значения": trueAnswer = answerMas[0]; ClassTotal.TextBoxDynamic(splitContainer2.Panel2, 3, 3, 330, 30); break; case "Ввод слова": for (int i = 0; i < countAnswers; i++) { trueAnswer += answerMas[i]; ClassTotal.TextBoxDynamic(splitContainer2.Panel2, 3, 3 + (i * 40), 330, 30); } break; case "На соответствие": string[] first = new string[countAnswers]; string[] second = new string[countAnswers]; for (int i = 0; i < countAnswers; i++) { string[] an = answerMas[i].Split('&'); first[i] = an[0]; second[i] = an[1]; } for (int i = 0; i < countAnswers; i++) { trueAnswer += second[i]; ClassTotal.LabelDynamic(splitContainer2.Panel2, 17, 3 + (i * 40), 300, 20, first[i]); ClassTotal.ComboBoxDynamic(splitContainer2.Panel2, 348, 3 + (i * 40), 300, 20, second); } break; } }