Разработка простых интерфейсов с использованием библиотеки WinForms
Лопатин Дмитрий Константинович,
студент Приамурского государственного университета им. Шолом-Алейхема.
В настоящий момент графический интерфейс является неотъемлемой частью программных систем. От него зависит удобство работы пользователя, как будет продвигаться программный продукт на рынке, какое впечатление будет создавать представляемый продукт. Поэтому и уделяется сейчас большое внимание разработчиков к юзабилити.
В системе программирования MS Visual Studio для языка F# не предусмотрен визуальный редактор форм и перед разработчиками возникают проблемы разработки интерфейса [5]. Была поставлена задача предоставить несколько простых решений на основе встроенной в F# библиотеки WinForms для проектирования графической оболочки приложений.
Опишем несколько литературных источников, показывающие возможности библиотеки WinForms.
Авторы Д.Сайм, А.Гранич, А.Цистернино в [6] представляют как разработать графическое приложение в F# с использованием WinForms. Библиотека представляет собой графический инструментарий, разработанный Microsoft для реализации графических приложений на платформе NET. Эта библиотека использует интерфейс GDI+, который используется для разработки приложений на Windows. Описание примеров начато с создания традиционного приложения «Hello, World!» которое представляет собой форму с кнопкой, чтобы отобразить фразу при нажатии. Авторы описывают составление пользовательских интерфейсов и показывают, как разработать простой веб-браузер. Авторами рассмотрено создание приложения для просмотра фракталов Мандельброта, а так же настройки цветовых гамм.
Д.Харроп [4] рассматривает работу с библиотекой WinForms в главе под названием «Визуализация». В этой книге поверхностно описана библиотека WinForms. Автор книги объясняет создание форм, элементов управления, возможность добавления событий элементам управления. Д.Харроп рассказывает о возможности отображения растровых изображений с использованием библиотеки Windows Forms и приводит пример клеточного автомата.
Т.Петричек и Д.Скит [7] подробно рассматривают примеры использующие библиотеку WinForms. Авторы описывают, как рисовать круговые диаграммы, разрабатывать приложения для просмотра изображений и пользовательского интерфейса для него. Есть пример генерации цветовых градиентов.
Ан.Б.Шамшев, Воронина В.В., Р.И.Баженов [2, 3] описывают методические подходы к проектированию интерфейсов на основе библиотеки WinForms на языке программирования F#. В [1] представлен графический интерфейс в информационной системе к разнородным данным.
Опишем решение поставленной задачи.
Для использования библиотеки WinForms при разработке приложений на F# требуются понимать следующие положения: каждое окно на экране – это экземпляр класса Form, содержащий коллекцию элементов управления пользовательского интерфейса типа Control; в процессе взаимодействия пользователей с элементами формы происходят события, которые могут обрабатываться программой; Windows Forms – библиотека, представляющая объектно-ориентированную обертку вокруг Windows API.
Приведем фрагменты кода создания главной формы, на которой разместим меню, три рисунка и надпись (рис. 1).
Рис. 1. Вид главной формы.
let form = new Form(Width= 400, Height = 300, Text = "F# Главная форма", Menu = new MainMenu())
// Меню бар
let mFile = form.Menu.MenuItems.Add("&Файл")
// Под меню
let miMessage = new MenuItem("&Пример сообщения")
// Добавление подменю в пункты меню
mFile.MenuItems.Add(miMessage)
// Создаем картинки и задаем им свойства
let image1 = new PictureBox(SizeMode = PictureBoxSizeMode.AutoSize, Top = 5)
// Указываем местоположение картинок
image1.ImageLocation <- "1.PNG"
// Добавляем картинки на форму
form.Controls.Add(image1)
// Создаём и добавляем надпись на форму
let Label1 = new Label(Text="Пример вывода изображений на экран", Top=150)
Label1.Width <- form.Width
Label1.Left <- 80
form.Controls.Add(Label1)
// Запускаем форму
do Application.Run(form)
Покажем пример создания ещё трех дополнительных форм и организации перехода через меню (рис. 2).
Рис. 2. Дополнительные формы.
//Форма_1
let Form1 = new Form(Text = "Дочерняя форма №1" ,Width = 400, Height = 300)
let Edit1 = new TextBox(Text="10")
Form1.Controls.Add(Edit1)
let Summ _ = MessageBox.Show(string(int(Edit1.Text)+(int(Edit2.Text))), "Сумма") |>ignore
let _ = button1.Click.Add(Summ)
//Форма_2
let Form2 = new Form(Width= 400, Height = 300, Text = "Дочерняя форма №2")
let ProgressBar1 = new ProgressBar(Dock=DockStyle.Top)
Form2.Controls.Add(ProgressBar1)
let Change _ = ProgressBar1.Value <- ScrollBar1.Value
//Форма_3
let Form3 = new Form(Text = "Дочерняя форма №3" ,Width = 400, Height = 300)
let Cal = new MonthCalendar()
Form3.Controls.Add(Cal)
let MsgDay _ = MessageBox.Show ("Сегодня "+string DateTime.Today.Now, "Дата") |>ignore
let _ = Button2.Click.Add(MsgDay)
//Вызов форм
let opForm1 _ = do Form1.ShowDialog()
let _ = miForm1.Click.Add(opForm1)
Таким образом, можно заметить, что разработка пользовательского интерфейса с помощью библиотеки WinForms в языке программирования F# не представляет большой сложности. Предложенные автором алгоритмы были использованы студентами направления «Информационные системы и технологии» для разработки графических оболочек в курсовых и выпускных квалификационных работах.
Литература
1. Баженов Р.И., Гринкруг Л.С. Информационная система по расчету и распределению нагрузки профессорско-преподавательского состава ФГБОУ ВПО «Приамурский государственный университет им. Шолом-Алейхема» // Информатизация и связь. - 2012. - № 5. - С. 75-78.
2. Функциональное и логическое программирование. Курсовая работа: Методические рекомендации для студентов специальности «230105.65 Программное обеспечение вычислительной техники и автоматизированных систем» и направления «230100.62 Информатика и вычислительная техника» / Р.И.Баженов. – Биробиджан: ФГБОУ ВПО «ДВГСГА», 2012. – 27 с.
3. Шамшев Ан.Б., Воронина В.В. Функциональное программирование на языке F# : учебное пособие. – Ульяновск: УлГТУ, 2012. – 165 с.
4. Harrop J. F# for Scientists. – Wiley, 2008. – 334 p.
5. Smith C. Programming F#. – O’Reilly, 2010. – 384 p.
6. Syme D., Granicz A., Cisternio A. Expert F#. – A-Press, 2007. – 609 p.
7. Petricek T, Skeet J. Functional programming for the Real World with examples for F# and C#. – Manning, 2007. – 495 p.
Поступила в редакцию 24.03.2014 г.