Читаем Программирование КПК и смартфонов на .NET Compact Framework полностью

Итак, метод HighScore_Load должен скрыть родительскую форму. Для этого метод должен использовать ссылку на главное окно. Ссылка на родительское окно передается в форму HighScore при ее создании, как показано в листинге 11.54.

Листинг 11.54

///

/// Родительское окно, из которого вызывается данное окно.

/// Используется при закрытии данного окна.

///

private Form parentForm;


public HighScore(Form inParentForm) {

 // Сохраняем родительское окно при закрытии окна лучших

 // результатов.

 parentForm = inParentForm;

 InitializeComponent();

}

Этот код является конструктором формы HighScore. Когда идет создание формы, то передается ссылка на родительскую форму.

Код метода HighScore_Load приведен в листинге 11.55.

Листинг 11.55

private void HighScore_Load(object sender, System.EventArgs e) {

 parentForm.Hide();

}

При загрузке формы родительское окно автоматически прячется. При закрытии формы надо вернуть родительскую форму на экран. Для этого применяется код, приведенный в листинге 11.56.

Листинг 11.56

private void HighScore_Closing(object sender,

 System.ComponentModel.CancelEventArgs e) {

 parentForm.Show();

}

После ввода имени игрок выполняет команду меню OK для закрытия формы. Обработчик этого события приведен в листинге 11.57.

Листинг 11.57

private void doneMenuItem_Click(object sender, System.EventArgs e) {

 Close();

}

После закрытия окна вызывается обработчик события, который выводит главное окно на экран.

Отображение дочернего окна

Программа должна получить имя игрока при достижении им высокого результата. Для этого создается копия формы HighScore. Программа должна создать форму при старте и хранить ссылку на нее. Экземпляр формы HighScore создается при старте основной программы, вызывая конструктор и передавая ссылку на родительскую форму, в нашем случае на саму себя, как показано в листинге 11.58.

Листинг 11.58

///

/// Форма для ввода имени игрока с лучшим результатом.

///

private HighScore highScore;

// Создаем форму для лучших результатов

highScore = new HighScore(this);

В этом коде ключевое слово this является ссылкой на текущий экземпляр основной формы, который должен быть закрыт при открытии формы highScore и восстановлен при закрытии формы highScore. Код для отображения формы highScore приведен в листинге 11.59.

Листинг 11.59

if (scoreValue > highScoreValue) {

 timer1.Enabled=false;

 // Показываем форму для лучших результатов

 highScore.ShowDialog();

 timer1.Enabled=true;

}

Если игрок побил текущий лучший результат, то программа останавливается при помощи отключения таймера. Для отображения формы highScore вызывается метод ShowDialog. Игра должна сделать паузу, пока игрок вводит свое имя. После этого игра продолжается.

Получение имени игрока

Игрок вводит свое имя в текстовое поле формы highScore. Чтобы получить доступ к имени пользователя во время игры, необходимо иметь доступ к экземпляру формы HighScore. В классе HighScore надо создать свойство, с помощью которого можно получить введенное пользователем имя. Этот код приведен в листинге 11.60.

Листинг 11.60

///

/// Имя игрока, введенное в текстовом поле.

///

public string PlayerName {

 get {

  return nameTextBox.Text;

 }

}

Свойство Name извлекает имя из текстового поля nameTextBox и возвращает его тому, кто вызывал данное свойство. Это свойство используется в программе, как показано в листинге 11.61.

Листинг 11.61

///

/// Имя игрока, достигшего лучшего результата.

///

private string highScorePlayer = "Rob";


if (scoreValue > highScoreValue) {

 highScoreValue = scoreValue;

 timer1.Enabled = false;

 highScore.ShowDialog();

 timer1.Enabled = true;

 highScorePlayer = highScore.PlayerName;

}

Перейти на страницу:

Похожие книги

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных