2013-12-05 4 views
0

В следующей картине, когда я нажмите File-> New Game Я вижу это окно: enter image description hereошибка при выходе из окна

Если я продолжать и нажмите Start Game, все прекрасно работает. Но если я просто нажмите на красный крестик, я получаю эту ошибку: enter image description here

Это код File-> New Game:

private: System::Void newGameToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) 
    { 
     NG->ShowDialog(); 
     ShowPossible(); 
     update_score(); 
     if(pc_exists()==1) 
      ComputerPlay(); 
    } 

NG->ShowDialog() показывает диалоговое окно New Game.

А затем ShowPossible() показывает что-то на доске (подсказки для возможных ходов). И вот что создает проблемы. Мне нужен код, который заканчивается с newGameToolStripMenuItem_Click() на X-клике, а не на ShowPossible().

Я попытался сделать глобальную переменную ready в виде NewGame и в виде нагрузки инициализируется его с 0, и только тогда, когда я нажимаю Start Game получается 1. И, наконец, добавил это условие в функции выше:

... 
if(ready) 
    ShowPossible(); 
... 

Так что, если я не нажму Начать игру, и только щелкните X, ready будет 0, и он не войдет в ShowPossible(). Но это не сработало. Как-то, когда код кнопки «Начало игры» заканчивается, готово все равно 0.

Есть ли более эффективный способ справиться с этим?

Спасибо!

+1

[ 'ShowDialog'] (HTTP: //msdn.microsoft.com/en-us/library/c7ykbedk(v=vs.110).aspx) Возвращаемое значение Тип: System.Windows.Forms.DialogResult Одно из значений DialogResult. – chris

+0

Нажмите «break» и посмотрите, где ошибка в отладчике. –

+0

@RetiredNinja Но я сказал, что проблема в том, что он переходит в ShowPossible(). Думаю, это означает, что я щелкнул 'break'. –

ответ

1

EDITED:

Поскольку вы используете System.Windows.Forms, проверьте против DialogResult перечисления (Спасибо Крис):

if (NG->ShowDialog() == System::Windows::Forms::DialogResult::Cancel) 
    return; 

От MSDN:

When a form is displayed as a modal dialog box, clicking the Close button (the button with an X at the upper-right corner of the form) causes the form to be hidden and the DialogResult property to be set to DialogResult.Cancel.

+2

Я бы проверил его на правильное значение перечисления. – chris

+0

Звучит неплохо. Я не знал, что 'ShowDialog()' возвращает значение. Но теперь я получаю эту ошибку: 'error C2678: binary '==': оператор не найден, который принимает левый операнд типа« System :: Windows :: Forms :: DialogResult »(или нет приемлемого преобразования) ' –

+0

использовать мой отредактированный пост Alaa, дайте мне знать, если это исправит. – ryrich

Смежные вопросы