Итак, метод HighScore_Load
HighScore
при ее создании, как показано в листинге 11.54.///
/// Родительское окно, из которого вызывается данное окно.
/// Используется при закрытии данного окна.
///
private Form parentForm;
public HighScore(Form inParentForm) {
// Сохраняем родительское окно при закрытии окна лучших
// результатов.
parentForm = inParentForm;
InitializeComponent();
}
Этот код является конструктором формы HighScore
Код метода HighScore_Load
private void HighScore_Load(object sender, System.EventArgs e) {
parentForm.Hide();
}
При загрузке формы родительское окно автоматически прячется. При закрытии формы надо вернуть родительскую форму на экран. Для этого применяется код, приведенный в листинге 11.56.
private void HighScore_Closing(object sender,
System.ComponentModel.CancelEventArgs e) {
parentForm.Show();
}
После ввода имени игрок выполняет команду меню OK
private void doneMenuItem_Click(object sender, System.EventArgs e) {
Close();
}
После закрытия окна вызывается обработчик события, который выводит главное окно на экран.
Отображение дочернего окна
Программа должна получить имя игрока при достижении им высокого результата. Для этого создается копия формы HighScore
HighScore
создается при старте основной программы, вызывая конструктор и передавая ссылку на родительскую форму, в нашем случае на саму себя, как показано в листинге 11.58.///
/// Форма для ввода имени игрока с лучшим результатом.
///
private HighScore highScore;
// Создаем форму для лучших результатов
highScore = new HighScore(this);
В этом коде ключевое слово this
highScore
и восстановлен при закрытии формы highScore
. Код для отображения формы highScore
приведен в листинге 11.59.if (scoreValue > highScoreValue) {
timer1.Enabled=false;
// Показываем форму для лучших результатов
highScore.ShowDialog();
timer1.Enabled=true;
}
Если игрок побил текущий лучший результат, то программа останавливается при помощи отключения таймера. Для отображения формы highScore
ShowDialog
. Игра должна сделать паузу, пока игрок вводит свое имя. После этого игра продолжается.Получение имени игрока
Игрок вводит свое имя в текстовое поле формы highScore
HighScore
. В классе HighScore
надо создать свойство, с помощью которого можно получить введенное пользователем имя. Этот код приведен в листинге 11.60.///
/// Имя игрока, введенное в текстовом поле.
///
public string PlayerName {
get {
return nameTextBox.Text;
}
}
Свойство Name
nameTextBox
и возвращает его тому, кто вызывал данное свойство. Это свойство используется в программе, как показано в листинге 11.61.///
/// Имя игрока, достигшего лучшего результата.
///
private string highScorePlayer = "Rob";
if (scoreValue > highScoreValue) {
highScoreValue = scoreValue;
timer1.Enabled = false;
highScore.ShowDialog();
timer1.Enabled = true;
highScorePlayer = highScore.PlayerName;
}