Опубликован: 14.08.2012 | Доступ: свободный | Студентов: 880 / 20 | Оценка: 5.00 / 5.00 | Длительность: 09:59:00
Специальности: Программист
Самостоятельная работа 25:

Работа с данными, сохранение и загрузка параметров игры

Посмотрим теперь на код страницы MainPage, для удобства он приведен целиком в листинге 32.5.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

namespace P25_2
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Конструктор
        public MainPage()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {

            if (textBox1.Text == "" || textBox1.Text == "Введите ваше имя")
            {
                MessageBox.Show("Введите имя пользователя!");
            }
            else
            {
                //Сохраняем имя пользователя
                (Application.Current as App).Username = textBox1.Text;
                //Формируем адрес
                string gamePageCall = "/Game.xaml";
                NavigationService.Navigate(new Uri(gamePageCall, UriKind.Relative));
            }
        }

        private void textBox1_GotFocus(object sender, RoutedEventArgs e)
        {
            textBox1.Text = "";
        }
        //Активация страницы
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            int scores = (Application.Current as App).Scores;
            string username = (Application.Current as App).Username;
            if (username != "")
            {
                textBox1.Text = username;
                //Сформируем сообщение о набранных очках, это, как минимум, 0 очков
                textBlock2.Text = "Пользователь " + username + " набрал " + scores.ToString() + " очка (ов) (о)";
            }
            else
            {
                textBox1.Text = "Введите ваше имя";
            }

            base.OnNavigatedTo(e);
        }
    }
}
Листинг 32.5. Код страницы MainPage

Здесь мы, в методе OnNavigatedTo (он выполняется и при первом запуске приложения, и при возврате на эту страницу со страницы Game), читаем значения переменных Scores и Username из полей класса App. Если имя пользователя не пустое, мы выводим его в поле textBox1 и выводим информацию о том, сколько очков набрал пользователь за прошлый сеанс игры. Если поле пустое, в textBox1 попадает приглашение ввести имя пользователя.

При щелчке по кнопке мы проверяем, заполнил ли пользователь поле, сравнивая его значение с пустой строкой (если он, например, щёлкнул по полю, но ничего не вводил), либо со строкой "Введите ваше имя". Она отображается в поле в том случае, если программа запущена в первый раз или тогда, когда запуск не первый, но в предыдущем запуске пользователь в поле ничего не вводил. Если поле заполнено, мы записываем его в общедоступную переменную класса App и вызываем страницу Game. Параметры при вызове нам в данном случае не нужны, так как мы используем для обмена данными между страницами открытые поля класса App.

Посмотрим код страницы Game, листинг 32.6.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

namespace P25_2
{
    public partial class Game : PhoneApplicationPage
    {
        public Game()
        {
            InitializeComponent();
        }
        //Получение и применение данных
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            string username = (Application.Current as App).Username;
            textBlock1.Text = "Здравствуйте, " + username+ "!";
            base.OnNavigatedTo(e);
        }
        //Подсчёт числа касаний экрана
        private void PhoneApplicationPage_Tap(object sender, GestureEventArgs e)
        {
            textBlock4.Text = (Convert.ToInt32(textBlock4.Text) + 1).ToString();
        }
        //Запись количества набранных очков
        private void PhoneApplicationPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
        {
            (Application.Current as App).Scores = Convert.ToInt32(textBlock4.Text);
        }
    }
}
Листинг 32.6. Код страницы Gam

Главная, новая, особенность здесь заключается в том, что в методе OnNavigateTo мы получаем значение свойства Username из App и используем его при формировании приветствия пользователя.

32.3. Выводы

В этой лабораторной работе мы освоили хранение в приложении данных, доступных всем страницам, передачу параметров при вызове страниц, использование изолированного хранилища настроект.

32.4. Задание

Создайте Silverlight-приложение, которое использует для хранения данных изолированное хранилище и хранит данные в виде XML-файла.

Гулич Анна
Гулич Анна
Невозможно пройти тесты, в окне с вопросами пусто