Почему после компиляции не запускается программа ? - 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");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д