Почему после компиляции не запускается программа ? - C#
Формулировка задачи:
Доброго времени суток. Проблема следующая: программа тестирования обращается к xml-файлу. Без его использования запускается, но, при его подключении виснет в процессах, но не отображается никаким образом. Не понимаю, в чем проблема.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace VirtualTest { public partial class Form1 : Form { string fpath; //путь к файлу теста string fname; //файл теста //XMLReader обеспечивает чтение данных xml-файла System.Xml.XmlReader xmlReader; string qw; // вопрос //варианты ответа string[] answ = new string[3]; string pic; //путь к файлу иллюстрации int right; //правильный ответ (номер) int otv; //выбранный ответ (номер) int n; //количество правильных ответов int nv; //общее количество вопросов int mode; //состояние программы // 0 - начало работыж // 1 - тестированиеж // 2 - завершение работы //конструктор формы public Form1(string[] args) { InitializeComponent(); radioButton1.Visible = false; radioButton2.Visible = false; radioButton3.Visible = false; //имя файла теста должно быть указано //в качестве параметра команды запуска программы if (args.Length > 0) { //указано только имя файла теста if (args[0].IndexOf(":") == -1) { fpath = Application.StartupPath + "\"; fname = args[0]; } else { //указан путь к файлу теста fpath =args[0].Substring(0, args[0].LastIndexOf("\") + 1); fname =args[0].Substring(args[0].LastIndexOf("\") + 1); } try { //прочитать xml-файл xmlReader = new System.Xml.XmlTextReader(fpath + fname); xmlReader.Read(); mode = 0; n = 0; //загрузить и показать заголовок теста this.showHead(); //загрузить и показать описание теста this.showDescription(); } catch (Exception exc) { label1.Text = "Ошибка доступа к файлу " + fpath + fname; MessageBox.Show("Ошибка доступа к файлу.\n" + fpath + fname + "\n", "Тестирование", MessageBoxButtons.OK, MessageBoxIcon.Error); mode = 2; } } else { label1.Text = "Файл теста необходимо указать " + "в команде запуска программы.\n" + "Например: 'exam economics.xml' " + "или 'exam c:\\spb.xml'."; mode = 2; } } //выводит название (заголовок) теста private void showHead() { //ищем узел <head> do xmlReader.Read(); while (xmlReader.Name != "head"); //считываем заголовок xmlReader.Read(); //вывести название теста в заголовок окна this.Text = xmlReader.Value; //выводим из узла <head> xmlReader.Read(); } //выводит описание теста private void showDescription() { //ищем узел <description> do xmlReader.Read(); while (xmlReader.Name != "decription"); //считываем описание теста xmlReader.Read(); //выводим описание теста label1.Text = xmlReader.Value; //выходим из узла <description> xmlReader.Read(); //ищем узел вопросов <qw> do xmlReader.Read(); while (xmlReader.Name != "qw"); //входим внутрь узла xmlReader.Read(); } //читает вопрос из файла теста private Boolean getQw() { //считывает тег <q> xmlReader.Read(); if (xmlReader.Name == "q") { //здесь прочитан тег <q>, //атрибут text которогосодлержит вопрос, //а атрубут src - имя файла иллюстрации. //извлечение значения атрибутов: qw = xmlReader.GetAttribute("text"); pic = xmlReader.GetAttribute("src"); if (!pic.Equals(string.Empty)) pic = fpath + pic; //входим внутрь узла xmlReader.Read(); int i = 0; //считываем данные узла вопросов <q> while (xmlReader.Name != "q") { xmlReader.Read(); //варианты ответа if (xmlReader.Name == "a") { //если есть атрибут right, то это //правильный ответ if (xmlReader.GetAttribute("right") == "yes") right = i; //считываем вариант ответа xmlReader.Read(); if (i < 3) answ[i] = xmlReader.Value; //выходим из узла <a> xmlReader.Read(); i++; } } //выходим из узла вопросов <q> xmlReader.Read(); return true; } //если считанный тег не <q> else return false; } //выводит вопрос и варианты ответа private void showQW() { //выводим вопрос label1.Text = qw; //картиночка if (pic.Length !=0) { try { pictureBox1.Image = new Bitmap(pic); pictureBox1.Visible = true; radioButton1.Top = pictureBox1.Bottom + 16; } catch { if (pictureBox1.Visible) pictureBox1.Visible = false; label1.Text += "\n\n\nОшибка доступа к файлу " + pic + "."; radioButton1.Top = label1.Bottom + 8; } } else { if (pictureBox1.Visible) pictureBox1.Visible = false; radioButton1.Top = label1.Bottom; } //показаать варианты ответа radioButton1.Text = answ[0]; radioButton2.Top = radioButton1.Top + 24; radioButton2.Text = answ[1]; radioButton3.Top = radioButton2.Top + 24; radioButton3.Text = answ[2]; radioButton4.Checked = true; button1.Enabled = false; } // щелчок на кнопке Ok private void button1_Click(object sender, EventArgs e) { switch (mode) { case 0: //начало работы программы radioButton1.Visible = true; radioButton2.Visible = true; radioButton3.Visible = true; this.getQw(); this.showQW(); mode = 1; button1.Enabled = false; radioButton4.Checked = true; break; case 1: nv++; //правильный ли ответ выбран if (otv == right) n++; if (this.getQw()) this.showQW(); else { //больше вопросов нет radioButton1.Visible = false; radioButton2.Visible = false; radioButton3.Visible = false; pictureBox1.Visible = false; //обработка и вывод результата this.showLevel(); //следующий щелчок на кнопке ок //закроет окно программы mode = 2; } break; case 2: //завершение работы программы this.Close(); //закрыть окно break; } } // щелчок на кнопке выбора ответа // функция обрабатывает событие Click // компонентов radioButton1 - radioButton3 private void radioButton1_Click(object sender, EventArgs e) { if ((RadioButton)sender == radioButton1) otv = 0; if ((RadioButton)sender == radioButton2) otv = 1; if ((RadioButton)sender == radioButton3) otv = 2; button1.Enabled = true; } //выводит оценку private void showLevel() { //ищем узел <levels> do xmlReader.Read(); while (xmlReader.Name != "levels"); //входим внутрь узла xmlReader.Read(); //читаем данные узла while (xmlReader.Name != "levels") { xmlReader.Read(); if (xmlReader.Name == "level") //n кол-во правильных ответов, //проверяем, попадаем ли в категорию if (n >= System.Convert.ToInt32(xmlReader.GetAttribute("score"))) break; } //выводим оценку label1.Text = "Тестирование завершено.\n" + "Всего вопросов: " + nv.ToString() + ". " + "Правильных ответов: " + n.ToString() + ". " + xmlReader.GetAttribute("text"); } } }
Решение задачи: «Почему после компиляции не запускается программа ?»
textual
Листинг программы
while (xmlReader.Name != "decription");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д