Добавлен: 05.05.2024
Просмотров: 16
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение высшего образования
Н ИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ им. Р.Е.АЛЕКСЕЕВА
Институт радиоэлектроники и информационных технологий
«Изучение структуры WinForms-приложений. Создание и обработка событий»
ОТЧЕТ
по лабораторной работе № 2
по дисциплине
Объектно-Ориентированое программирование
РУКОВОДИТЕЛЬ:
________________ (подпись) (фамилия, и.,о.)
СТУДЕНТ:
________________
(подпись) (фамилия, и.,о.)
(шифр группы)
Работа защищена «___» ____________
С оценкой ________________________
Нижний Новгород
Содержание
НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ 1
РУКОВОДИТЕЛЬ: 1
СТУДЕНТ: 1
Цель и Задачи 3
Решение задачи 4
Вывод 9
Цель и Задачи
Цель работы: изучение принципов построения WinForms-приложений. Создание и обработка собсвенных событий классов.
Задача:
Разработать интернациональную программу (на русском и английском языках), которая одновременно отображает время в Москве, Лондоне и Владивостоке с помощью TextBox. Программа должна содержать меню (с использованием клавиатурных комбинаций) для старта и останова отсчета времени. Для отображения времени форма приложения должна обращаться к отдельному классу Clock, который реализует знание времени в различных городах и умеет генерировать событие SecondTick каждую секунду. При изменении размеров формы, размеры TextBox должны также изменяться.
Решение задачи
Открываем Visual Studio и создаем проект WindowsForms(.NETFramerork).
Рисунок 1. Создание проекта.
Далее создаем класс Clock, в который добавляем делегат EnterClock(), событие EnterClockSecondTick, переменную для текущего времени CurrentTime, и переменная – член класса типа System
.Windows.Forms.Timer, а также словарь с регионами DictionaryCities. Создаем метод My_Timer_Tick, который берет значение времени с компьютера и вызывает событие SecondTick(). Далее добавляем в класс Clock метод LocalTime, который реализует возврат значения времени в соответсвии со словарём.
Приложение 1. Код класса Clock.
class Clock
{
public delegate void EnterClock();
public event EnterClock SecondTick;
public System.Windows.Forms.Timer NewTimer = new System.Windows.Forms.Timer();
public DateTime CurrentTime;
public Dictionary
public bool Stop;
public Clock()
{
NewTimer.Tick += NewTimerTick;
NewTimer.Enabled = true;
Cities = new Dictionary
{
{"Moskow", new TimeSpan(3, 0, 0)},
{"Vladivostok", new TimeSpan(10, 0, 0)},
{"London", new TimeSpan(1, 0, 0)}
};
}
private void NewTimerTick(object sender, EventArgs e)
{
CurrentTime = DateTime.UtcNow;
SecondTick();
}
public DateTime LocalTime(string City)
{
return CurrentTime + Cities[City];
}
public void OnOffClock()
{
if (Stop)
{
Stop = false;
NewTimer.Start();
}
else
{
Stop = true;
NewTimer.Stop();
}
}
}
Приложение 2. Код функции запуска приложения.
static class Program
{
///
/// Главная точка входа для приложения.
///
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
Создаем форму для отображения времени. На форму добавляем элементы TextBox и Button.
Рисунок 2. Форма приложения.
В классе формы создаем локальную переменную класса Clock и подписываемся на событие SecondTick. Функция обработки события обращается к часам для получения времени в соответствующем городе, преобразовывает его в строку и устанавливает полученную строку нужному TextBox.
Приложение 3. Код в файле формы.
public partial class Form1 : Form
{
Clock clock;
public Form1()
{
InitializeComponent();
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Properties.Settings.Default.Language);
clock = new Clock();
clock.SecondTick += SecondTick;
KeyPreview = true;
}
private void SecondTick()
{
LondonTime.Text = clock.LocalTime("London").ToLongTimeString();
MoskowTime.Text = clock.LocalTime("Moskow").ToLongTimeString();
VladivostokTime.Text = clock.LocalTime("Vladivostok").ToLongTimeString();
}
private void ChangeLanguage_Click(object sender, EventArgs e)
{
if (System.Threading.Thread.CurrentThread.CurrentUICulture.Name == "ru-RU")
{
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo("en-US");
}
else
{
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo("ru-RU");
}
Application.Restart();
}
private void OnOff_Click(object sender, EventArgs e)
{
clock.OnOffClock();
}
}
Для обеспечения внешнего вида формы на двух языках, исправляем названия элементов для свойства формы “Language”.
Рисунок 3. Названия элементов для формы на английском.
Также перед стартом приложения присваиваем ему соответсвующую культуру: System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(Properties.Settings.Default.Language);
Важно в свойствах формы в параметре Localizableсменить значение False на True.
Рисунок 4. Свойства формы.
Результат работы приложения на русском языке:
Рисунок 5. Результат работы приложения.
Результат работы приложения на английском языке:
Рисунок 6. Результат работы приложения.
Вывод
В результате выполнения лабораторной работы мною были выполнены все поставленные задачи. И были изучены основные принципы построения WinForms – приложений, а также создание и обработка собственных событий классов.