2013-06-21 3 views
1
private void Form1_Load(object sender, EventArgs e) 
    { 
     if (count == 2) 
      { 
       MessageBox.Show("Congrats You Score is : " + Marks, "Result", MessageBoxButtons.OK); 
       SendKeys.Send("%{F4}");//tried Application.Exit() this.Close(); 

      } 
      string choice = src.ReadLine(); 
      string ques = srq.ReadLine(); 
      opt = choice.Split('\t'); 
      label1.Font = new Font("Times New Roman", 15); 
      label1.Text = ques; 
      ch1.Font = new Font("Times New Roman", 15); 
      ch1.Text = opt[0]; 
      ch2.Font = new Font("Times New Roman", 15); 
      ch2.Text = opt[1]; 
      ch3.Font = new Font("Times New Roman", 15); 
      ch3.Text = opt[2]; 
      ch4.Font = new Font("Times New Roman", 15); 
      ch4.Text = opt[3];    
     } 

Я пытаюсь сделать простую викторину в графическом интерфейсе, это не домашнее задание BTW Я сделал программу викторины для консолей и теперь хочу сделать это в графическом интерфейсе. Я новичок, и я просто поиск в сети много и пытается создать эту форму Windows:Закрыть окно Windows после выполнения окна сообщений

private void button1_Click(object sender, EventArgs e) 
    { 

     if (ch1.Checked == false && ch2.Checked==false && ch3.Checked==false && ch4.Checked==false) 
     { 
      MessageBox.Show("Please Choose An Answer", "Error", MessageBoxButtons.OK,MessageBoxIcon.Error); 

     } 
     else if (ch1.Checked){ 
      check(ch1); 
      // MessageBox.Show("Marks : "+Marks); 
      ++count; 
      Form1_Load(new Object(), new EventArgs()); 
      ch1.Checked = false; 


     } 
     else if(ch2.Checked){ 
      check(ch2); 
      ++count; 
      Form1_Load(new Object(), new EventArgs()); 
      ch2.Checked = false; 

     } 
     else if(ch3.Checked){ 
      check(ch3); 
      ++count; 
      Form1_Load(new Object(), new EventArgs()); 
      ch3.Checked = false; 
     } 
     else if (ch4.Checked){ 
      check(ch4); 
      ++count; 
      Form1_Load(new Object(), new EventArgs()); 
      ch4.Checked = false; 
     } 
    } 

Метод Над Держит Загрузка нового вопроса и его возможности, а после следующего нажатия кнопки.

Теперь я хочу, чтобы Quiz покинула себя после того, как счет достигнет 2 или может быть больше. Я пробовал this.Close(), SendKey,Environment.Exit(0, inputsimulator (Да, я действительно загрузил файл .dll и добавил его ссылку, используя пространство имен) также не работает.

Также inputsimulator имеет тот недостаток, что он работает только тогда, когда выбран App ... sendkeys работы выбран ли приложение или нет, так не лучше ......

Я понимаю, что событие, например, щелчок мышью или что-то требуется для this.close(), но я хочу, чтобы викторина отображала результат и закрыла его после ответов на все вопросы ...

В настоящее время Викторина не закрывается, и исключение выбрано как Файл, из которого читаются вопросы и параметры, ничего не осталось ...

Я посетил следующие ссылки Link1 Link2 Link3

+5

Вы пытались отменить программу, где это ошибка, что такое исключение? И 'Form.Close()' (если это ваша единственная форма), а 'Application.Exit()' должен выполнять эту работу. – Jason

+0

У вас есть событие закрытия формы? – Shaharyar

+0

Привет, ошибка показана в первом методе, она выделяет строку temp = choice.split ('\ t'); Исключение составляет ** Первое исключение исключения типа «Исключение System.NullReferenceException» произошло в FirstGUI.exe ** – AAB

ответ

2

Я считаю, что вы должны обернуть дополнительный код в операторе еще. Это приведет к тому, что вы не хотите, чтобы выполнение выполнялось.

«this.Close();» должно сработать. Если это ваше основное окно приложения и вы хотите закрыть приложение, тогда вы захотите использовать «Application.Exit();»

if (count == 2) 
     { 
      MessageBox.Show("Congrats You Score is : " + Marks, "Result", MessageBoxButtons.OK); 
      this.Close(); 

     } 
    else 
     { 
      string choice = src.ReadLine(); 
      string ques = srq.ReadLine(); 
      opt = choice.Split('\t'); 
      label1.Font = new Font("Times New Roman", 15); 
      label1.Text = ques; 
      ch1.Font = new Font("Times New Roman", 15); 
      ch1.Text = opt[0]; 
      ch2.Font = new Font("Times New Roman", 15); 
      ch2.Text = opt[1]; 
      ch3.Font = new Font("Times New Roman", 15); 
      ch3.Text = opt[2]; 
      ch4.Font = new Font("Times New Roman", 15); 
      ch4.Text = opt[3]; 
     } 

Что касается вашей секции массивов, я бы это сделал вместо этого.

 List<string> opt = choice.Split('\t').ToList<string>(); 
     label1.Font = new Font("Times New Roman", 15); 
     label1.Text = ques; 

     if(opt.Count >= 1) 
     { 
      ch1.Font = new Font("Times New Roman", 15); 
      ch1.Text = opt[0]; 
     } 

     if(opt.Count >= 2) 
     { 
      ch2.Font = new Font("Times New Roman", 15); 
      ch2.Text = opt[1]; 
     } 

     if(opt.Count >= 3) 
     { 
      ch3.Font = new Font("Times New Roman", 15); 
      ch3.Text = opt[2]; 
     } 

     if(opt.Count >= 4) 
     { 
      ch4.Font = new Font("Times New Roman", 15); 
      ch4.Text = opt[3]; 
     } 

Возможно, вам нужно добавить это в начало страницы.

 using System.Collections.Generic; 
+0

Привет, спасибо за ** else **, он решает Исключение, которое пришло (нижний код не выполнен). Я не понимаю, что вы подразумеваете под FormLoaded. Я просто пытаюсь использовать GUI в первый раз, так что извините, если его простая вещь – AAB

+0

На самом деле я стою исправлен. Я просмотрел его, чтобы дать вам ссылку, но нет события Loaded для формы Windows. Виноват. Я рад, что другой работал на вас. Я столкнулся с этой ошибкой в ​​прошлом. Это связано с закрытием формы, а элементы управления в форме разыменовываются, потому что форма больше не существует, но код все равно будет пытаться работать, потому что она не в другом. –

+0

** else ** решил исключение, но проблема теперь в том, что код остается в последнем вопросе, на который было получено ответ. Больше исключений Если я добавлю блок catch try на select.split ('\ t'), которое выбрасывается пойман, но теперь в методе проверки генерируется индекс массива вне диапазона, так как значение Count превышает значение массива. Спасибо за вашу помощь ... – AAB

0

Сначала проверьте значение вашего счета varible, я думаю, что ваш счетчик varibale держит другое значение, чем два, поэтому ваше приложение не закрывается,, потому что вы заказываете приложение будет закрыто, только если переменная счетчика значение равно двум.

Чтобы убедиться, что у вашего счетчика есть проблема, попробуйте установить значение count varbile на два, прежде чем вы проверите, равно ли оно двум. в противном случае вы можете использовать отладочный режим для отладки этого

count= 2 ; // Set count to two , it doesn't matter where you set it to two , however it has to be set to two before you call this code if you really need to exit the program when you call this code. 
    if (count == 2) 
     { 
      MessageBox.Show("Congrats You Score is : " + Marks, "Result", MessageBoxButtons.OK); 
      SendKeys.Send("%{F4}");//tried Application.Exit() this.Close(); 

     } 
+0

@ Dooby Inc Спасибо, что значение Count отлично, и теперь Quiz работает отлично, а также с добавленным механизмом таймера, который подсчитывает и закрывает опрос после 30 секунд. Спасибо, что проявили интерес к ответам на мои вопросы. – AAB