Основные компоненты визуальной среды программирования
Среда программирования предоставляет большой набор компонентов (элементов управления), каждый из которых имеет определенный набор свойств и событий. В рамках проводимых занятий студенты изучают и используют ограниченный набор элементов управления, поэтому здесь приводятся сведения как раз об этих элементах. В таблице 2 приведены основные свойства используемых элементов интерфейса.
Таблица 2. Основные свойства элементов интерфейса
Свойство | Обозначение |
Имя элемента | Name |
Заголовок | Text |
Размер (задается двумя полями – шириной и высотой) | Size (Width, Height) |
Расположение на форме (задается двумя полями – координатами X и Y верхнего левого угла элемента) | Location (x, y) |
Шрифт | Font |
Цвет переднего плана | ForeColor |
Цвет фона | BackColor |
Компонент метка (Label). Компонент находится в списке Common Controls палитры компонентов. Метка предназначена для вывода в свое поле текста или изображения, которые пользователь не может редактировать в процессе выполнения приложения. Метка используется, как правило, для вывода надписи, идентифицирующей объект на форме.
Основное свойство метки – Text (выводимая строка) типа SystemString. Например:
this->label1->Text=”Поле ввода”;
Свойство TextAlign позволяет выравнивать текст в поле компонента, пользователь может выбрать из выпадающего списка способ выравнивания (слева, справа, по центру).
Свойство WordWrap задает возможность автоматического переноса символов в начало следующей строки (без нажатия клавиши Enter).
Свойство BorderStyle задает окантовку метки, которая выбирается из выпадающего списка (возможны три значения: без окантовки, окантовка одной линией, окантовка под трехмерное пространство).
Компонент имеет большое количество событий, основным из которых является событие Click – щелчок кнопкой мыши на метке. Остальные события на практике обычно используются редко.
Компонент однострочный текстовый редактор (TextBox). Однострочный текстовый редактор предназначен для ввода, вывода или редактирования текстовой строки или строк. Его основное свойство – Text (отображаемая строка) типа SystemString. Например: this->textBox1->Text=”Строка текста”;. Содержимое текстовой строки может быть считано в переменную double y следующим образом:
y=Convert::ToDouble(this->textBox1->Text);
Свойство TextAlign позволяет выравнивать текст в поле компонента, пользователь может выбрать из выпадающего списка способ выравнивания (слева, справа, по центру).
Свойство WordWrap задает возможность автоматического переноса символов в начало следующей строки (без нажатия клавиши Enter).
Свойство Lines позволяет задавать строки (с помощью диалогового окна), выводить строки, вводить строки.
Свойство MultiLine задает режим многострочного ввода.
Свойство ReadOnly определяет возможность пользователя изменять текст в поле компонента: при значении этого свойства true – изменять нельзя, при значении false – можно.
Свойство ScrollBars позволяет ввести полосы прокрутки. Используется при многострочном режиме, когда строки не помещаются в отведенное пространство редактора. Вид полос прокрутки выбирается из выпадающего списка.
Основные методы компонента следующие:
AppendText – добавление текста к текущему тексту;
Clear – удаление текста из поля ввода/вывода;
Copy – копирование выбранной строки в буфер памяти;
Cut – вырезка отмеченного множества строк из поля ввода/вывода и помещение их в буфер памяти;
Focus – установка фокуса ввода на компонент;
Hide – установка компонента в невидимое состояние;
Paste – замена текущего выбранного участка текста содержимым буфера памяти;
Select – выборка заданного текста внутри компонента;
SelectAll – выборка всего текста внутри компонента;
Show – установка компонента в видимое состояние;
Undo – отмена последней операции редактирования в поле компонента.
Компонент кнопка Button. Основное назначение кнопки – поддержка щелчка мыши для управления программами. При нажатии на кнопку вызывается обработчик события Click, в который помещается код реализации алгоритма управления.
Среди основных свойств можно выделить Text – текст, отображаемый на кнопке, Size – размеры кнопки.
Основные события
Click – щелчок мышью на кнопке,
Enter – нажатие на клавишу Enter при наведенном на кнопку фокусе,
MouseHover – возникает, когда курсор мыши находится над кнопкой,
MouseLeave – возникает, когда курсор мыши покидает кнопку.
Предпоследнее событие может использоваться для изменения свойств кнопки, например, ее выпячивания для информации пользователя о выбранной кнопке. Последнее событие может использоваться в противовес предыдущему событию для возвращения кнопке исходных свойств.
Кнопка имеет большое количество методов. Среди них отметим
Hide() – делает кнопку невидимой (свойству Visible (видимость) присваивает значение false),
Focus() – наводит фокус на кнопку (делает ее активной),
Select() – выполняет те же действия, что и Focus,
Show() – делает кнопку видимой (свойству Visible присваивает значение true).
15.5 Лабораторная работа №1. Освоение среды визуального программирования на примере создания приложения для вычисления значения определенного интеграла
В ходе выполнения первой лабораторной работы, выполняемой в среде визуального программирования, студенты должны освоить принципы работы в визуальной среде программирования с использованием простейших компонентов этой среды.
Задание на лабораторную работу предусматривает вычисление значения определенного интеграла для заданной подынтегральной функции тремя методами (по методу прямоугольников, трапеций и парабол). Выбор такого задания объясняется тем, что на занятиях в первом семестре были изложены простейшие методы численного интегрирования, студенты реализовывали их во время лабораторных работ, поэтому основное внимание может быть сосредоточено на освоении среды визуального программирования и принципов написания программ при реализации событийно-ориентированногоподхода.
Используя написанную программу, студенты могут провести несложные исследования, в ходе которых они получат зависимость точности получаемых результатов от интервала интегрирования при фиксированном числе разбиений или количества разбиений для вычисления интеграла с заданной точностью. В ходе проведения экспериментов студенты на практике могут убедиться в удобстве использования визуальной среды, т.к. проведение нового эксперимента не требует каждый раз запуска программы на выполнение, исходные данные и результаты представляются в удобной форме.
Первая часть работы предусматривает вычисление интеграла при заданных пределах интегрирования и заданном количестве разбиений (интервалов).
Во второй части работы (при наличии времени) те же интегралы вычисляются с учетом заданной точности (начальное количество разбиений может браться из первой части работы).
Последовательность действий при выполнении первой работы может быть следующей.
- Нанести на форму последовательно (в столбик) три компонента Label (метка) и под каждой меткой нанести компонентtextBox (поля для ввода исходных данных). Используя окно сведений об объекте, свойству текст первой метки присвоить значение Нижний предел интегрирования.Испоьзуя окно сведений об объекте, свойству текст второй метки присвоить значение Верхний предел интегрирования. Испоьзуя окно сведений об объекте, свойству текст третьей метки присвоить значение Количество разбиений.
- Чтобы каждый раз в процессе отладки не вводить исходные данные, следует с помощью окна сведений об объекте свойству текст компонента textBox1 назначить значение нижнего предела интегрирования, например, 0. С помощью окна сведений об объекте свойству текст компонента textBox2 назначить значение верхнего предела интегрирования, например, 4. С помощью окна сведений об объекте свойству текст компонента textBox3 назначить значение количества разбиений интервала интегрирования, например, 20.
- Поместить на форму кнопку Button1 (под элементом textBox3). С помощью окна сведений об объекте свойству текст компонента Button1 назначить значение Ввод данных.
- Разместить на форме (во втором столбце) три кнопки. С помощью окна сведений об объекте свойству текст компонента Button2 назначить значение Интеграл по методу прямоугольников. С помощью окна сведений об объекте свойству текст компонента Button3 назначить значение Интеграл по методу трапеций. С помощью окна сведений об объекте свойству текст компонента Button4 назначить значение Интеграл по методу парабол.
- Разместить на форме под каждой из трех последних кнопок по элементу textBox (для вывода получаемых в результате работы программы значений интегралов).
- В поле textBox4 должно выводиться значение интеграла, вычисленное по методу прямоугольников, в поле textBox5 должно выводиться значение интеграла, вычисленное по методу трапеций, в поле textBox6 должно выводиться значение интеграла, вычисленное по методу парабол.
- Поместить на форму кнопку Button5 (под элементом textBox6). С помощью окна сведений об объекте свойству текст компонента Button5 назначить значение Выход.
- Для каждой кнопки (всего пять кнопок), размещенной на форме, с помощью окна сведений об объекте, выбрав вкладку Events (события), инициализировать событие щелчок на кнопке (Click), при этом в текст модуля будут добавлены заголовки методов-обработчиков этих событий.
- Разработать и вставить в обработчики событий необходимый программный код.
При выполнении второй части работы (вычисление интеграла с заданной точностью) необходимо на форму нанести окно для ввода точности, кнопку для ввода точности, а также кнопки, для которых инициализировать событие щелчок на кнопке (Click), обработка которого будет состоять в вычислении интеграла с точностью соответствующим методом. Под каждой из кнопок разместить текстовые окна для вывода результатов. Целесообразно разместить также поля для вывода информации о количестве разбиений интервала интегрирования для получения интеграла с заданной точностью по каждому из трех используемых методов. Для этого следует выполнить следующие два пункта 10 и 11.
10. При выполнении второй части лабораторной работы (вычисление интеграла с
точностью) на форму следует нанести метку Label4 (заголовок третьего столбца
объектов), выводящую заголовок (Вычисление интеграла с точностью), элемент
textBox7 для ввода точности, метку Label5 (Точность), кнопку Button6 для ввода
точности, а также три кнопки Button7, Button8, Button9, при нажатии которых
будут вычисляться те же интегралы, но с учетом точности. Под каждой из кнопок
следует разместить элементы textBox8, textBox9, textBox10 для вывода полученных
результатов.
- Для каждой кнопки (всего четыре кнопки), размещенной на форме, с помощью
окна сведений об объекте, выбрав вкладку Events (события), инициализировать
событие щелчок на кнопке (Click), при этом в текст модуля будут добавлены заго-
ловки методов-обработчиков этих событий. Разработать и вставить в обработчики
событий необходимый программный код.
Окончательный вид формы может выглядеть следующим образом (рис.4).
Рис.4 Вид формы при выполнении первой лабораторной работы
Обработчик события button6_Clickдолжен обеспечивать считывание нового исходного данного (точности) из поля ввода textBox7и преобразование этого значения из строкового представления в числовой тип (использовать метод Parse).
Обработчики событий button7_Click, button8_Click, button9_Clickдолжны обеспечивать вычисление интеграла с точностью соответствующим методом и вывод результата в поле вывода. При этом должны использоваться ранее написанные функции вычисления интегралов указаными методами при фиксированном количестве разбиений.
При написании обработчиков событий (кода программы) следует иметь в виду, что вся информация, размещаемая в текстовых окнах и других элементах интерфейса, представляет собой объект-строку класса String. Поэтому, если содержимое строки представляет собой число, используемое далее в вычислениях, то его надо преобразовать к числовому типу. Аналогично надо поступить и при выводе результатов вычислений: значение числового типа преобразовать в строку.
Объект-строка String размещается в регулируемой куче, поэтому переменная этого типа объявляется следующим образом String ^s; Переменной этого типа можно присваивать значения того же типа, если они были уже созданы s=a;. Значение переменной s можно присваивать и с помощью конструктора, использующего утилиту gcnew, которая выделяет память под объект и может в качестве присваиваемого значения использовать тип, отличный от типа String.При этом присваиваемое значение будет преобразовано к типу String.
При использовании числовых типов следует иметь в виду, что данные этих типов представляют собой структуры, имеющие в своем составе методы обработки этих данных, в частности преобразования числа в строку и обратное преобразование. Метод Parse() преобразует строковое представление числа в эквивалентное ему число с плавающей запятой. Метод ToString() преобразует числовое значение данного экземпляра в эквивалентное ему строковое представление.
В качестве примера приведем тексты функций вычисления значения подынтегрального значения и функции вычисления интеграла при заданном числе разбиений методом средних прямоугольников.
// функция, вычисляющая значение подынтегральной функции
double f(double x)
{ return x*x*x;}
)//вычисление интеграла методом средних прямоугольников
double pram(double a, double b,int n)
{
double dx,sum,x,integ;
int i;
dx=(b-a)/n;
a=a+dx/2;
sum=0;
for (i=0;i<n;i++)
{
x=a+i*dx;
sum+=f(x);
}
integ=dx*sum;
return integ;
}
Обработчики событий, заключающихся в нажатии на кнопки 1 (ввод данных) и 2 (вычисление интеграла методом прямоугольников), выглядят следующим образом:
//Ввод данных
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
String ^s=this->textBox1->Text;
a=a.Parse(s);
s=this->textBox2->Text;
b=b.Parse(s);
s=this->textBox3->Text;
n=n.Parse(s);
}
//Вычисление интеграла методом прямоугольников без точности
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
{
String ^s;
double integ;
integ=pram(a,b,n);
s=integ.ToString();
this->textBox4->Text=s;
}
В заключении приводится текст обработчика события щелчок на кнопке 7 (вычисление интеграла с точностью методом прямоугольников):
//Вычисление интеграла методом прямоугольников с точностью
private: System::Void button7_Click(System::Object^ sender, System::EventArgs^ e)
{
double integ1,integ2;
int n1;
String ^s;
integ2=pram(a,b,n);
n1=n;
do
{
integ1=integ2;
n1*=2;
integ2=pram(a,b,n1);
}while(fabs(integ1-integ2)>eps);
s=integ2.ToString();
this->textBox8->Text=s;
}
15.6 Задания для самостоятельной работы
1. Составить приложение для вычисления приближенных значений определённого интеграла (см. таблицу ниже) тремя предложенными методами (прямоугольников, трапеций, парабол). Пределы интегрирования a и b, а также число N подынтервалов задавать при вводе.
2. Дополнить разработанное приложение вычислением интеграла с заданной точностью. Обеспечить ввод точности, вывести полученные значения интеграла и количество разбиений для каждого метода.
Таблица 3.
№ | Подынтегральная функция |