Приложение Windows Forms:
таблица синусов
Программа с графическим интерфейсом. На форме размещены окошки: начальный угол, шаг таблицы, число строк таблицы, окно для таблицы результатов, кнопка "Создать таблицу".
Результаты работы программы
Как работает приложение Windows Forms ? Оно, как и консольное приложение, начинает работу с исполнения метода Main, размещенного (по умолчанию) в файле Program.cs. Но в этом случает Main обычно показывает главную форму и на этом свою работу заканчивает. Дальнейшая работа приложения Windows Forms происходит под управлением так называемых событий: щелчков по кнопкам или пунктам меню и т п. Поэтому в этом примере на форме размещена кнопка "Создать таблицу"
Как создать приложение Windows Forms ?
- При запуске Visual Studio обычно открывается "Начальная страница". Щёлкните "Создать проект". В окне "Создать проект", в окошке "Расположение" выберите папку, внутри которой будет расположена папка проекта. Например, у меня здесь:
D:\XRAN_MY_PROGS\0_vis_stud\ . В окошке "Имя" впишите имя проекта, например, этот проект: "my0_4sin"
- Выберите тип приложения: "Приложение Windows Forms" "Visual C#". Флажки "Создать каталог" и "Добавить в систему" у меня очищены. Щелкните кнопку ОК и вы попадёте на вкладку "Form1.cs [Конструктор]". Если это не произойдёт, то щелкните в меню: Вид : Обозреватель решений. Откройте вкладку Обозреватель решений и сделайте двойной щелчок по Form1.cs. Если откроется окно кода, а не конструктора, то щёлкните в меню: Вид : Конструктор.
- В окне конструктора вы видите форму. Её размеры можно изменять мышкой. Чтобы настраивать свойства формы сделайте правый мышещелчок и из контекстного меню выберите Свойства. Появляется список свойств объекта, который вы выделили в окне крнструктора. Я обычно настраиваю следуюшие свойства главной формы:
- Font (шрифт). Щёлкаю кнопку построителя справа, выбираю размер и тип шрифта
- Text - Заголовок формы вписываю.
- FormBorderStyle - Fixed3D - форма фиксированных размеров
- Далее перехожу на вкладку "Form1.cs [Конструктор]", чтобы установить на форме другие элементы. Эти элементы находятся на вкладке "Панель элементов". Наведите курсор на "Панель элементов" (слева), чтобы раскрылась Панель элементов (вначале она раскрывается с задержкой). Устанавливаю, например, надписи.
Выбираю мышкой элемент класса Label, затем размещаю её на форме (щелчком или рисую прямоугольник).
Перехожу в окно "Свойства", записываю свойство Text (надпись). Так установливаю три надписи: Начальный угол (град), Шаг таблицы (град), Число строк таблицы. При движении элементов появляются линии, помогающие выравнивать элементы.
- Аналогично устанавливаю окошки для ввода значений - правее надписей. Это элементы класса TextBox. Устанавливаю свойства Text, соответственно (сверху-вниз): 0, 1, 10 хотя это необязательно. Считаю полезным задавать имена элементов - для того, чтобы в окне кода легче узнавать их по именам. Установил имена TextBox, соответвтвенно: tBnac (начало), tBshag (шаг), tBstrok (число строк)
- Размещаю окошко TextBox для вывода таблицы. Устанавливаю для него свойства: ScrollBars = Vertical (вертикальная полоса прокрутки), Multiline = True (для показа нескольких строк), WordWrap = False (Запретил перенос на новую строку),
-
Обработчик события - это метод, который выполняется при возникновении события, например, щелчка по кнопке. Ставлю кнопку (класс Button), заполняю свойство Text: Создать таблицу, имя (Name = btnGo), а также
обработчик события Click (щелчок по кнопке, клик). Этот обработчик можно создать двойным щелчком по кнопке в окне конструктора. Более универсальный способ такой: выделить кнопку, открыть Свойства, перейти на вкладку "События" (кликнуть вверху кнопку "События" (где молния )) и в списке событий сделать двойной щелчок по строке Click. Вы перейдёте в окно редактора кода, где часть кода в окне редактора уже сформирована автоматически, в том числе и пустая заготовка для метода, являющегося обработчиком события Click. То есть этот метод btnGo_Click будет выполняться, когда пользователь кликнет кнопку "Создать таблицу". Далее обсуждается работа этого метода.
Текст программы (текст файла Form1.cs):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace my0_4sin
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnGo_Click(object sender, EventArgs e)
{
double fi0, dfi, fi, sinfi;
int nn;
nn = int.Parse(tBstrok.Text);
fi0 = double.Parse(tBnac.Text) * Math.PI / 180;
dfi = double.Parse(tBshag.Text) * Math.PI / 180;
textBox1.Text = "";
for (int ii = 0; ii < nn; ii++)
{
fi = fi0 + dfi*ii;
sinfi = Math.Sin(fi);
textBox1.AppendText("Угол= " + (fi*180/Math.PI).ToString()
+ " Sin= " + sinfi.ToString() + Environment.NewLine);
}
}
}
}
Обсуждение программы (метода btnGo_Click)
Все действия, задуманные программистом, выполняются в btnGo_Click. Рассмотрим строки кода.
- double fi0, dfi, fi, sinfi; - объявляются переменные, которые будут использованы: fi0 - угол, от которого начнётся таблица, dfi - шаг таблицы (изменение угла при переходе к следующей строке таблицы), fi - значение угла для текущей строки таблицы, sinfi - значение синуса угла fi.
- int nn; - объявляется переменная nn (число строк таблицы)
- nn = int.Parse(tBstrok.Text); - используя метод Parse, преобразуется строковое представление числа в вещественное, которое присваивается переменной nn
- fi0 = double.Parse(tBnac.Text) * Math.PI / 180; - аналогично, строковое представление начального угла, записанное в окошке, перед которым стоит надпись "Начальный угол", преобразуется в число и далее преобразуется в радианы умножением на Math.PI / 180 и присваивается переменной fi0
- dfi = double.Parse(tBshag.Text) * Math.PI / 180; - Точно так же вычисляется шаг таблицы.
- textBox1.Text = ""; - очищается окно textBox1, в котором будет таблица
- for (int ii = 0; ii < nn; ii++) - это так называемый оператор цикла for. Здесь объявляется переменная ii (так называемая переменная цикла) с начальным значением = 0. Затем выполняется заключённая между фигурными скобками {} группа операторов. Затем ii увеличивается на 1 (об этом указывает ii++). Далее снова выполняется эта же группа операторов, и так повторяется до тех пор, пока ii меньше чем nn (об этом указывает ii < nn;). Подробнее об операторах цикла см в учебниках
- Какие же действия повторяются (внутри оператора цикла)
- fi = fi0 + dfi*ii; - для каждого ii = 0,1,2... nn-1 вычисляется угол fi
- sinfi = Math.Sin(fi); - для каждого ii, а следовательно, для соответствующего fi вычисляется Sin(fi). При этом используется класс Math (математический. Он содержит многие популярные функции).
- textBox1.AppendText("Угол= " + (fi*180/Math.PI).ToString() + " Sin= " + sinfi.ToString() + Environment.NewLine);
Метод AppendText добавляет к тексту, уже содержащемуся в textBox1 выражение типа string, являющеся параметром, т е записанное в скобках. Это выражение представляет собой сумму:
"Угол= " - это строковый литерал
(fi*180/Math.PI).ToString() - сначала fi переводится в градусы, затем метод ToString преобразует это число градусов к строковому типу (получается строка)
" Sin= " - это строковый литерал
sinfi.ToString() - это строка, содержащая значение синуса фи
Environment.NewLine. Класс Environment позволяет программе работать в разных операционных системах. Если программа запускается в ОС Unix, то NewLine имеет значение "\n", а в других ОС - значение "\r\n" . Таким образом каждая новая порция текста в окне textBox1 начинается с новой строки.
Исправление в программе - чтобы синусы выводились с тремя цифрами правее запятой.
Применено
форматирование строк
textBox1.AppendText("Угол= " + (fi*180/Math.PI).ToString()
+ " Sin= " + sinfi.ToString("f3") + Environment.NewLine);
Результат форматирования строк.