laba2
.docxМИНОБРНАУКИ РОССИИ
Ф едеральное государственное бюджетное образовательное учреждение высшего образования
НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ им. Р.Е.АЛЕКСЕЕВА
Институт радиоэлектроники и информационных технологий
Компьютерные технологии в проектировании и производстве
Изучение структуры WinForms-приложений. Создание и обработка событий.
ОТЧЕТ
Лабораторная работа №2
по дисциплине
Объектно-ориентированное программирование
РУКОВОДИТЕЛЬ:
________________ Штанюк А.А (подпись) (фамилия, и.,о.)
СТУДЕНТ:
________________
(подпись) (фамилия, и.,о.)
(шифр группы)
Работа защищена «___» ____________
С оценкой ________________________
Нижний Новгород 2019
Содержание
Цель работы 3
Задание на лабораторную работу 3
Код Form1.cs 4
Код Class.cs 6
Вывод 8
Цель работы
Изучение принципов построения WinForms-приложений. Создание и обработка собственных событий классов.
Задание на лабораторную работу
Разработать интернациональную программу (на русском и английском), которая одновременно отображает время в Москве, Лондоне и Владивостоке с помощью TextBox. Программа должна содержать меню (с использованием клавиатурных комбинаций) для старта и останова отсчета времени. Для отображения времени форма приложения должна обращаться к отдельному классу Clock, который реализует знание времени в различных городах и умеет генерировать событие SecondTick каждую секунду. При изменении размеров формы, размеры TextBox должны также изменяться.
Код Form1.cs
using System;
using System.Windows.Forms;
using System.Globalization;
namespace WF2
{
public partial class Form1 : Form
{
Clock oclock = new Clock();
public Form1()
{
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(Properties.Settings.Default.Language);
System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(Properties.Settings.Default.Language);
InitializeComponent();
oclock.Timer.Tick += new EventHandler(SecondTick);
}
void SecondTick(object sender, EventArgs e)
{
if (oclock.Timer.Enabled)
{
textBox1.Text = "Дата:"+DateTime.Now.ToShortDateString() + " Время:" + oclock.CityTime("Moscow").ToLongTimeString();
textBox2.Text = "Дата:" + DateTime.Now.ToShortDateString() + " Время:" + oclock.CityTime("Vladivostok").ToLongTimeString();
textBox3.Text = "Дата:" + DateTime.Now.ToShortDateString() + " Время:" + oclock.CityTime("London").ToLongTimeString();
}
}
private void Button2_Click(object sender, EventArgs e)
{
oclock.Timer.Enabled = true;
}
private void Button1_Click(object sender, EventArgs e)
{
if (System.Threading.Thread.CurrentThread.CurrentUICulture.Name == "ru")
{
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en");
System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en");
Properties.Settings.Default.Language = "en";
Properties.Settings.Default.Save();
Application.Restart();
}
else
{
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("ru");
System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ru");
Properties.Settings.Default.Language = "ru";
Properties.Settings.Default.Save();
Application.Restart();
}
}
private void Button3_Click(object sender, EventArgs e)
{
oclock.Timer.Enabled = false;
}
private void Button2_Click_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter && e.Alt) //Alt+Enter для старта
{
Button2_Click.PerformClick();
}
}
private void Button3_Click_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.S && e.Alt) //Alt+S для остановки
{
Button3_Click.PerformClick();
}
}
private void Button3_Click_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.L && e.Alt) //Alt+L для смены языка
{
Button1_Click.PerformClick();
}
}
}
}
Код Class.cs
using System;
using System.Collections.Generic;
namespace WF2
{
public class Clock
{
public System.Windows.Forms.Timer Timer = new System.Windows.Forms.Timer();
DateTime Date;
delegate DateTime getTime(string a);
getTime Delegate;
public static Dictionary<string, TimeSpan> Dictionary = new Dictionary<string, TimeSpan>()//коллекция ключей и значений
{
{"Moscow", new TimeSpan(3, 0, 0)},
{"Vladivostok", new TimeSpan(10, 0, 0)},
{"London", new TimeSpan(1, 0, 0)}
};
public Clock()
{
Timer.Interval = 1000;
Timer.Enabled = false;
Timer.Tick += new EventHandler(FirstTick);// метод обрабатывающий событие, не имеющий данные
}
public void FirstTick(object sender, EventArgs e)
{
Delegate = CityTime;
Date = DateTime.UtcNow;
}
public DateTime CityTime(string city)
{
return (Date + Dictionary[city]);
}
}
}
Вывод
Были изучены основные принципы построения WinForms-приложений. Была разработана интернациональная программа (на русском и английском языках), которая одновременно отображает время в Москве, Лондоне и Владивостоке с помощью TextBox. Программа содержит меню для старта и останова отсчета времени, а также для смены языка.
Для отображения времени форма приложения обращается к отдельному классу Clock, который реализует знание времени в различных городах и умеет генерировать событие SecondTick каждую секунду. Для создания события был объявлен делегат, который определяет вид функции обратного вызова и событие с заданным типом делегата. Для обеспечения возможности срабатывания часов каждую секунду они имеют переменную-член класса типа System.Windows.Forms.Timer. В конструкторе часов эта переменная проинициализирована интервалом 1 с. (1000мс). Кроме этого, часы обрабатывают событие Tick этой переменной, в котором и вызывается событие SecondTick. Класс часов хранит текущее время (дату и время) полученное с помощью атрибута DateTime.Now, обновляемое по каждому событию Tick. Кроме этого, в обязанности класса часов входит хранение информации о смещении времени в различных городах, которое имеет тип TimeSpan и располагается в словаре c текстовым ключом названия города (Dictionary<string, TimeSpan>). Для получения локального времени класс часов содержит функцию, которая возвращает время (дату и время тип DateTime) для строкового входного параметра – названия города.
Класс формы содержит локальную переменную класса Clock и обрабатывает ее события SecondTick. Функция обработки события обращается к часам для получения времени в соответствующем городе, преобразовывая его в строку с помощью функции-члена DateTime -ToLongTimeString() и устанавливая полученную строку нужному TextBox.
Для обеспечения внешнего вида формы на двух языках были исправлены: названия элементов для свойства формы «Language», имеющего значения «По-умолчанию» и «Английский»; свойство формы «Localizable» на значение «true».
При изменении размеров формы, размеры TextBox также меняются. Для этого было установлено свойство Anchor в значении «Top, Bottom, Left, Right».
Также используются клавиатурные комбинации Alt+ «Символ».