Добавил:
выбрасываю тут свой мусор, надеюсь, что он кому-то может пригодится... Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

laba2

.docx
Скачиваний:
4
Добавлен:
03.12.2023
Размер:
119.57 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Ф едеральное государственное бюджетное образовательное учреждение высшего образования

НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ им. Р.Е.АЛЕКСЕЕВА

Институт радиоэлектроники и информационных технологий

Компьютерные технологии в проектировании и производстве

Изучение структуры 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+ «Символ».

Соседние файлы в предмете Объектно-ориентированное программирование