Модификация приложения WindowsForms: прочее — КиберПедия 

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Модификация приложения WindowsForms: прочее

2017-11-17 363
Модификация приложения WindowsForms: прочее 0.00 из 5.00 0 оценок
Заказать работу

 

Расставим последнюю группу элементов. Пусть у нас есть элемент для работы со вкладками. При выборе одной вкладки у нас есть всего одна кнопка. Нажав на неё, открываем диалог выбора файла, выбираем файл изображения, и часть этого изображения вставляется в диалоговое окно (в определённое место). Вторая вкладка содержит один флаг, нажатие на который отображает два элемента RadioButton. Выбор одного из них высвечивает определённый элемент. Один из них: текстового поля с форматированием по маске, а второй: выбор даты и времени по календарю.

 

Расставим последнюю группу следующим образом:

 

Рис. 7. 1. Расстановка элементов последней группы (Прочее)

 

Рассмотрим группу подробнее. На рисунке выше в GroupBox с текстом Прочее, слева находится элемент TabControl. Элемент представляет работу с вкладками и организует постраничный выбор и отображения вкладки. Каждая вкладка существует как отдельный элемент внутри формы и на каждую вкладку можно помещать другие элементы или другие TabControl.

 

Оставим для этого элемента имя по умолчанию (tabControl1). Нас интересует добавление новых вкладок. Для этого перейдём в свойства элемента и найдём поле TabPages. Здесь мы видим значение: (Коллекция). Добавление элементов аналогично ComboBox и подобным элементам. Через TabPages переходим в Редактор коллекции TabPages:

 

Рис. 7. 2. Редактор коллекции TabPages

 

Здесь мы можем отредактировать всё, что связано с каждой вкладкой (фактически вкладка похожа на отдельную форму). Также можем изменить порядок отображение вкладок, добавить новые или удалить ненужные вкладки.

Оставим имена вкладок, как есть, изменишь лишь заголовки (поля Text вкладки). У нас должно получиться три вкладки с заголовками Вкладка № 1, Вкладка № 2 и Простые часы соответственно (под именами tabPage, tabPage2 и tabPage3).

На первой вкладке расположим CheckBox:

 

Расположение CheckBox:

 

На второй вкладке установим кнопку:

 

Параметры для этой кнопки:

(Name): button16
Text: Выбрать изображение

 

На третьей вкладке установим кнопку:

 

Параметры для этой кнопки:

(Name): button17
Text: Простые часы

 

В правой части от вкладок расположим сначала элемент PictureBox (имя pictureBox1 оставим как есть):

 

А затем поверх расположим две элемента выбора (переключателя) RadioButton:

 

Элемент MasketTextBox:

 

(Name): masketTextBox1
PromptChar: *
Visible: False

 

Элемент DateTimePicker:

 

(Name): dateTimePicker1
Visible: False

 

На рисунке № 7. 1. PictureBox обозначен пунктирными линиями. Параметры RadioButton () такие:

 

(Name): radioButton1
Text: Специальноеполе
Visible: False

 

(Name): radioButton2
Text: Датаивремя
Visible: False

 

Для работы переключателей RadioButton необходимо объединять их в группы. Так как мы помещаем их изначально в группу связанную с GroupBoxПрочее, эти элементы изначально будут переключены друг на друга и работать в связке. Нажатие на один переключатель снимет точку с другого.

 

Для поля форматирования по маске важное свойство указывается в поле Mask: там выбирается формат отображения данных. Выберем маску ввода Shortdateandtime (US). Значение поле установится такое: 00/00/0000 90:00. Для отображения всех возможных предустановленных масок ввода, нужно войти в (…) поля Mask:

 

Рис. 7. 3. Все возможные маски ввода

 

Также здесь же можно изменить готовую или задать свою (<Специальный>).

 

Добавим обработчики событий. Для кнопки Выбрать изображение:

 

privatevoid button16_Click(object sender, EventArgs e)

{

try

{

checkBox1.Checked = false;

radioButton1.Visible = false;

radioButton2.Visible = false;

maskedTextBox1.Visible = false;

dateTimePicker1.Visible = false;

// Открываемдиалоготкрытияфайла

FileOpen.FileName = "Изображение";

FileOpen.ShowDialog();

String ImageName = FileOpen.FileName;

// Создаёмпотокдлясодержимогофайла

StreamFStream = FileOpen.OpenFile();

// Загружаемфайл (открываемформатированныйтекст)

pictureBox1.Image = Image.FromFile(ImageName);

// Закрываем поток и высвобождаем память

FStream.Close();

this.Text = Title + ":: " + FileOpen.FileName;

}

catch

{

// Ловим ошибку: файл не найден

}

}

 

Для выделения переключателя с флагом CheckBox (событие CheckedChanged, аналог Click):

 

privatevoid checkBox1_CheckedChanged(object sender, EventArgs e)

{

 

if (checkBox1.Checked == true)

{

radioButton1.Visible = true;

radioButton2.Visible = true;

}

else

{

radioButton1.Visible = false;

radioButton2.Visible = false;

maskedTextBox1.Visible = false;

dateTimePicker1.Visible = false;

}

}

 

Ианалогичныесобытиядля RadioButton ’ов:

 

privatevoid radioButton1_CheckedChanged(object sender, EventArgs e)

{

maskedTextBox1.Visible = true;

dateTimePicker1.Visible = false;

}

 

privatevoid radioButton2_CheckedChanged(object sender, EventArgs e)

{

maskedTextBox1.Visible = false;

dateTimePicker1.Visible = true;

}

 

Событие MouseHover (возникает в случае задержки курсора мышки на элементе) для PictureBox:

 

privatevoid pictureBox1_MouseHover(object sender, EventArgs e)

{

if (pictureBox1.Image!= null)

Hint.SetToolTip(pictureBox1, "Размеризображения: " + "\nШирина: " + pictureBox1.Image.PhysicalDimension.Width + "\nВысота: " + pictureBox1.Image.PhysicalDimension.Height);

}

 

Теперь разберёмся с третьей вкладкой TabControl. Единственная кнопка данной вкладки («Простые часы») будет вызывать новую форму. Добавим её, выполним последовательно «Проект» –>«Добавить форму Windows...». В открывшемся окне в поле Имя вводим LWP05Clock.cs и жмём Добавить. Получаем новую форму в обозревателе решений. Поменяем её свойства следующим образом:

 

Text изменим с LWP05Clock на Элементы управления (C#):: Простые часы

^ Поменяем заголовок формы (то что отображается в шапке приложения слева).

MaximizeBox изменим с True на False

^ Уберём кнопку Развернуть.

Icon изменим изображение (иконку) приложения

^ Необходим файл значка *.ico.

Size изменим со значений 300; 300 на 400; 150

^Поменяем размер формы.

FormBorderStyle изменим с Sizable на FixedDialog

^ Сделаем окно «неизменяем» по размерам.

 

Основу часов должен составлять всё тот же простой таймер (Timer). Но,к сожалению, точность таймера ОС оставляет желать лучшего. Сообщения таймера, создающие события Tick, проходят через очередь приложения. К тому же, другие приложения могут блокировать на некоторое время работу Вашего приложения. Поэтому события таймера возникают в общем случае нерегулярно. Кроме того, несмотря на возможность указания интервалов времени в миллисекундах, реальная дискретность таймера определяется периодом прерываний, посылаемых таймером.

 

Нерегулярность прихода сообщений таймера не вызывает особых проблем, если речь не идёт о системах реального времени. Такие системы, основанные на ОС Microsoft Windows, должны использовать специальные драйверы для работы с периферийными устройствами, критичными к скорости реакции системы. Строго говоря, ОС Microsoft Windows не предназначена для работы в системах реального времени. Скорее, она ориентирована на работу с пользователем, когда небольшие задержки событий во времени не имеют никакого значения. Системы реального времени обычно создаются на базе специальных ОС реального времени.

 

Добавим на форму LWP05Clock элемент Timer и изменим его свойства следующим образом:

 

(Name): Clock
Interval:  

 

Рис. 7. 4. Свойства добавленного таймера Clock

 

По умолчанию таймер создается в заблокированном состоянии. Чтобы его разблокировать, необходимо записать значение true в свойство Enabled. Сделаем это в коде инициализации формы. В файле LWP04Clock.cs найдём:

 

public LWP05Clock()

{

InitializeComponent();

}

 

Заменимэтимкодом:

 

public LWP05Clock()

{

InitializeComponent();

Clock.Enabled = true;

}

 

Таймер генерирует события Tick, период которых задается свойством Interval. Это уже было рассмотрено в данной лабораторной работе, но напоминаем. Обработчик этих событий может выполнять любые действия в соответствии с логикой работы приложения.

 

Установим на форме один TextBox со следующими свойствами:

 

(Name): Now
ReadOnly: True

 

Две кнопки слева и справа под TextBox со свойствами:

 

(Name): button1
Text: Старт

 

(Name): Button2
Text: Стоп

 

А также поставим на форму не совсем стандартный элемент (отсутствует в группе Стандартные элементы правления на панели элементов). Им станет TrackBar:

 

Найти его можно просто раскрыв список Все формы WindowsForms панели элементов.

 

TrackBar:

(Name): Seconds
Maximum:  
Minimum:  

 

Элемент управления TrackBar представляет собой шкалу с движком, с помощью которого пользователь может изменять (регулировать) численное значение. Это может быть уровень громкости, баланс звуковых каналов, насыщенность отдельных компонентов цвета, яркость и пр.

Движок элемента управления TrackBar можно передвигать мышью, клавишами перемещения курсора, а также клавишами Home, End, PageUp и PageDown. При перемещении движка создаются события Scroll.

Помимо движка, в окне элемента управления TrackBar есть деления. Они отображаются в виде коротких штрихов, расположенных на равном расстоянии друг от друга.

Можно выбрать горизонтальное или вертикальное расположение окна TrackBar. Деления могут находиться с любой стороны, с обеих сторон или их может не быть совсем.

При создании элемента управления TrackBar приложение должно определить диапазон значений, соответствующих положению движка, шаг делений, а также шаг изменения этих значений.

 

Свойство Value хранит текущее значение, непосредственно связанное с положением движка в окне регулятора. Программа может не только читать это свойство, но и писать в него. При этом положение движка будет изменяться соответствующим образом.

Свойства Minimum и Maximum определяют, соответственно, минимальное и максимальное значение, связанное с движком. По умолчанию минимальное значение равно 1, а максимальное — 10.

Дискретность изменения значения при использовании клавиш перемещения курсора задается свойством SmallChange. По умолчанию она равна 1. Что же касается дискретности при использовании клавиш Page Up и Page Down, то её можно задать с помощью свойства LargeChange. По умолчанию значение этого свойства равно 5.

Чтобы задать количество штрихов, отображаемых на шкале элемента управления TrackBar, нужно отредактировать свойство TickFrequency.

Изменяя свойство Orientation, можно задать горизонтальное или вертикальное расположение окна элемента управления TrackBar. В первом случае свойство должно содержать значение System.Windows.Forms.Orientation.Horizontal, а во втором — System.Windows.Forms.Orientation.Vertical.

Свойство TickStyle задает стиль шкалы и ползунка. Вот возможные значения: None; TopLeft; BottomRight; Both.

В первом случае, при использовании значения None, штрихи не отображаются на шкале. Остальные константы позволяют задать расположение штрихов сверху или снизу (справа или слева) от движка, а также по обе стороны движка (значение Both).

 

Последний штрих. Размести под TrackBar один Label (чтобы использовать TrackBar по назначению).

 

Окончательный вид формы будет таким:

 

Рис. 7. 5. Расстановка элементов последней формы LWP05Clock

 

Перепишем код метода LWP05Clock():

 

publicLWP05Clock()

{

InitializeComponent();

Clock.Enabled = true;

label1.Text = "";

}

 

Инициализируем единственное событие таймера Clock Tick:

 

privatevoid Clock_Tick(object sender, EventArgs e)

{

DateTime dt = DateTime.Now;

Now.Text = dt.Hour + ":" + dt.Minute + ":" + dt.Second;

 

if (Clock.Enabled == true)

{

button1.FlatStyle = FlatStyle.Standard;

button1.BackColor = Color.LawnGreen;

}

label1.Text = "";

Seconds.Value = dt.Second;

}

 

Проинициализируемсобытие Scroll для TrackBar:

 

privatevoid Seconds_Scroll(object sender, EventArgs e)

{

label1.Text = Seconds.Value.ToString();

}

 

Событие Click кнопки Старт:

 

privatevoid button1_Click(object sender, EventArgs e)

{

Clock.Start();

button2.FlatStyle = FlatStyle.System;

button1.FlatStyle = FlatStyle.Standard;

button1.BackColor = Color.LawnGreen;

}

 

Событие Click кнопки Стоп:

 

privatevoid button2_Click(object sender, EventArgs e)

{

Clock.Stop();

button1.FlatStyle = FlatStyle.System;

button2.FlatStyle = FlatStyle.Standard;

button2.BackColor = Color.IndianRed;

}

 

Событие Click кнопки Простые часы главной формы LWP05Main:

 

privatevoid button17_Click(object sender, EventArgs e)

{

LWP05Clock Form = newLWP05Clock();

Form.ShowDialog();

}

 

Завершающаячасть

 

Компилируем приложение (Release) и запускаем. Результат работы показан на рисунках ниже:

Рис. 8. 1. Модифицированное приложение WindowsForms

 

Отображение выбранного с помощью диалога изображения и всплывающей подсказки при наведении на изображении мышки. Полный путь до этого изображения и название с расширением отображены в заголовке приложения на рисунке выше (вынесено в статичное текстовое поле около строки состояния).

 

Рис. 8. 2. Модифицированное приложение WindowsForms: результат работы переключателей на фоне уже выбранного изображения

 

Рис. 8. 3. Модифицированное приложение WindowsForms: результат работыформы Простые часы (ползунок двигается с каждой секундой при работающих часах)

 


Поделиться с друзьями:

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.092 с.