Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1432

.pdf
Скачиваний:
1
Добавлен:
07.01.2021
Размер:
1.15 Mб
Скачать

‘ остальные точки

For i As Integer = 2 To d.Length - 1 x2 = 8 + i * sw

y2 = Me.ClientSize.Height - 20 – m * d(i) g.DrawRectangle(System.Drawing.Pens.Black,x2-2,y2-2,4,4) g.DrawLine(System.Drawing.Pens.Black, x1, y1, x2, y2) g.DrawString(Convert.ToString(d(i)), dF, _ System.Drawing.Brushes.Black, x2 - 10, y2 - 20)

x1 = x2

y1 = y2 Next End Sub

‘ обновление графики при изменении размеров формы

Private Sub Form1_SizeChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.SizeChanged Refresh()

End Sub

‘ подготовка исходны данных

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim fs As FileStream

‘ путь в текущий каталог

Dim FN As String = Application.StartupPath + "\d.txt" Dim i As Integer = 0

Try

' поток для чтения

fs = New FileStream(FN, FileMode.Open, FileAccess.Read) Dim sr As New StreamReader(fs)

‘ читаем числа в массив

Dim t As String = sr.ReadLine() While i < d.Length - 1

i = i + 1

d(i) = Convert.ToDouble(t) t = sr.ReadLine()

79

End While sr.Close()

' задаем функцию обработки события Paint

Dim Paint = New PaintEventHandler(AddressOf Form1_Paint) Catch ex As FileNotFoundException MessageBox.Show(ex.ToString())

Catch ex As Exception MessageBox.Show(ex.ToString()) Finally

fs.Close() End Try End Sub End Class

7.2. Задание на тему «Построение графика»

Разработать программу, вычерчивающую график. Исходные данные должны извлекаться из текстового файла. Количество точек – произвольно.

Порядок выполнения лабораторной работы

Создать папку с набором тестовых данных.

Создать новый проект – приложение Windows Forms.

Вынести на форму необходимые визуальные компоненты.

Добавить программный код обработки событий.

Компилировать программу.

Тестировать программу.

Создать документ с описанием работы программы.

7.3. Построение столбиковой диаграммы

Вычерчивание столбиковой диаграммы выполняется аналогично графику. Относительные изменения только упрощают программу. Вместо шага определяется ширина столбика диаграммы:

W_S = (Me.ClientSize.Width-40-5*d.Length)/d.Length-1

80

Для перехода к следующей точке достаточно выполнить шаг по

Х.

X = X + W_S + 5

Высота столбика h_Y определяется по найденной (как в графике) координате Y точки с учетом отступа от границы формы:

h_Y = ClientSize.Height - Y - 20

Вычерчивание закрашенного столбика выполняется с помощью функции FillRectangle, например: G_P.FillRectangle(Brushes.ForestGreen, X, Y, W_S, h_Y)

Для вычерчивания границ столбика можно также использовать

DrawRectangle: G_P.DrawRectangle(System.Drawing.Pens.Black, X, Y, W_S, h_Y)

Пример программы

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

‘ Пример 7.2

Private d(10) As Double

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

'графическая поверхность

Dim g As Graphics g = e.Graphics()

'подписи данных

Dim dF As Font = New Font("Tahoma", 9)

' заголовок

Dim hF As Font = New Font("Tahoma", 14, FontStyle.Regular) Dim H As String = "График"

Dim w As Integer = g.MeasureString(H,hF).Width Dim x As Integer = (Me.ClientSize.Width - w) / 2

g.DrawString(H, hF, System.Drawing.Brushes.Black, x, 5)

81

‘ размеры реальной области

Dim max As Double = d(1) Dim min As Double = d(1)

For i As Integer = 1 To d.Length - 1 If d(i) > max Then max = d(i)

If d(i) < min Then min = d(i) Next

Dim x1, y1, m,h0 As Integer

' ширина столбца

w1 = (Me.ClientSize.Width-40-5*(d.Length -1))/(d.Length-1) x1 = 20

‘ масштабный множитель

m = (Me.ClientSize.Height - h1)/(max-min) Dim h1 As Integer = Me.ClientSize.Height \ 2 For i As Integer = 1 To d.Length - 1

y1 = Me.ClientSize.Height - 20 – m*d(i) g.DrawString(Convert.ToString(d(i)), dF, System.Drawing.Brushes.Black, x1, y1 - 21) h0 = Me.ClientSize.Height - y1 - 20

g.FillRectangle(Brushes.ForestGreen, x1, y1, w, h0) g.DrawRectangle(System.Drawing.Pens.Black, x1, y1, w, h0) x1 = x1 + w + 5

Next

End Sub

7.4. Задание на тему «Построение столбиковой диаграммы»

Разработать программу, вычерчивающую столбиковую диаграмму. Исходные данные должны извлекаться из текстового файла. Количество точек – произвольно.

Порядок выполнения лабораторной работы

Создать папку с набором тестовых данных.

Создать новый проект – приложение Windows Forms.

Вынести на форму необходимые визуальные компоненты.

82

Добавить программный код обработки событий.

Компилировать программу.

Тестировать программу.

Создать документ с описанием работы программы.

7.5.Построение круговой диаграммы

Вкруговой диаграмме для определения доли каждого сектора вычисляются доли соответствующих исходных значений в их общей сумме.

Dim s As Double = 0 For i = 1 To d.Length - 1 s = s + d(i)

Next

For i = 1 To d.Length - 1 p(i) = d(i) / s

Next

Для круговой диаграммы выбирается величина диаметра с учетом отступа от границ формы, а также координаты центра:

Dim DD As Integer = ClientSize.Height - 70 Dim x0 As Integer = 30

Dim y0 As Integer = (ClientSize.Height - DD) / 2 + 10

Если в графике и столбиковой диаграмме достаточно одного цвета, то в круговой диаграмме необходимо использовать несколько цветов. Переменная fbrush, используемая для хранения цвета закраски Brushes, объявляется в следующей строке:

Dim fbrush As Brush = Brushes.White

В табл. 7.1 представлены несколько значений для цвета.

Таблица 7.1

Примеры значений свойства Brushes

Свойство

Описание

 

 

Aquamarine

Аквамарин

 

 

Beige

Бежевый

 

 

Black

Черный

 

 

Blue

Синий

 

 

Brown

Коричневый

 

 

Свойство

Описание

 

 

Coral

Коралловый

 

 

Cyan

Голубой

 

 

Gold

Золотой

 

 

Green

Зеленый

 

 

Yellow

Желтый

 

 

83

Для круговой диаграммы обязательны пояснения – легенда. Она может быть изображена с помощью цветных прямоугольников с сопутствующим текстом – названием элемента данных, например: g.FillRectangle(fbrush, Lx, Ly + i * 20, 20, 10)

g.DrawString(title(i) + " - " + p(i).ToString("p"), _ dFont, System.Drawing.Brushes.Black, _

Lx + 24, Ly + i * 20 - 3)

Сектор закрашивается с помощью функции FillPie. Контур сектора рисуется с помощью функции DrawPie. В обеих функциях указываются центр диаграммы, ширина и высота, а также начальный угол сектора и дуга сектора в градусах.

g.FillPie(fbrush, x0, y0, dd, dd, sta, swe) g.DrawPie(System.Drawing.Pens.Black,x0,y0,dd,dd,sta,swe)

Пример программы

Круговая диаграмма строится по данным из текстового файла, в котором в столбик размещены названия 10 элементов и соответствующие величины. Для прорисовки секторов диаграммы используются 10 цветов, которые выбираются с помощью оператора Select Case. В правой части формы выводится легенда данных.

‘ Пример 7.3

Imports System.IO

Public Class Form1

Private d(10), p(10) As Double Private title(10) As String Private n As Integer

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

'графическая поверхность

Dim g As Graphics g = e.Graphics()

'легенда

Dim dF As Font = New Font("Tahoma", 9)

84

' заголовок

Dim hF As Font = New Font("Tahoma", 12, FontStyle.Bold) Dim H As String = "Круговая диаграмма"

Dim w As Integer=Convert.ToInt32(g.MeasureString(H,hF).Width) Dim x As Integer = (Me.ClientSize.Width - w) / 2 g.DrawString(H, hF, System.Drawing.Brushes.Black, x, 10)

‘ диаметр диаграммы

Dim dd As Single = ClientSize.Height - 70

центр диаграммы

Dim x0 As Integer = 30

Dim y0 = (ClientSize.Height - dd) / 2 + 10

легенда

Dim Lx As Integer = 60 + dd

Dim Ly As Integer = 30

дуга сектора

Dim swe As Single Dim sta As Single = -90

закраска

Dim fbrush As Brush = Brushes.White

For i As Integer = 1 To d.Length - 1

‘ дуга

swe = 360 * p(i)

‘ выбор цвета закраски

Select Case i

Case 0

fbrush = Brushes.YellowGreen Case 1

fbrush = Brushes.Gold Case 2

fbrush = Brushes.Pink Case 3

fbrush = Brushes.Violet

85

Case 4

fbrush = Brushes.OrangeRed

Case 5

fbrush = Brushes.RoyalBlue

Case 6

fbrush = Brushes.SteelBlue

Case 7

fbrush = Brushes.Chocolate

Case 8

fbrush = Brushes.LightGray

Case 9

fbrush = Brushes.Aquamarine

Case 10

fbrush = Brushes.Brown

Case Else

fbrush = Brushes.Fuchsia

End Select

‘ устранение возможного накопления ошибки

If i = (n - 1) Then swe = 270 - sta

вычерчивание сектора g.FillPie(fbrush, x0, y0, dd, dd, sta, swe)

g.DrawPie(System.Drawing.Pens.Black,x0,y0,dd,dd,sta,swe)

вывод легенды

g.FillRectangle(fbrush, Lx, Ly + i * 20, 20, 10) g.DrawString(title(i) + " - " + p(i).ToString("p"), _ dFont, System.Drawing.Brushes.Black, _

Lx + 24, Ly + i * 20 - 3)

‘ перейти к началу следующего сектора sta = sta + swe

Next

End Sub

‘ подготовка исходных данных

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

86

Dim fs As FileStream

‘ путь в текущую папку

Dim FN As String = Application.StartupPath + "\d.txt"

Dim i As Integer = 0

Try

fs = New FileStream(FN, FileMode.Open, FileAccess.Read)

Dim sr As New StreamReader(fs, _

System.Text.Encoding.GetEncoding(1251))

‘ читаем данные из файла

Dim st As String = sr.ReadLine() While i < d.Length - 1

i = i + 1

заголовок элемента данных title(i) = st

st = sr.ReadLine()

значение элемента данных d(i) = Convert.ToDouble(st)

st = sr.ReadLine() End While sr.Close()

' задаем функцию обработки события Paint

Dim Paint = New PaintEventHandler(AddressOf Form1_Paint)

Catch ex As FileNotFoundException MessageBox.Show(ex.ToString()) Catch ex As Exception MessageBox.Show(ex.ToString()) Finally

fs.Close() End Try

Dim s As Double = 0 For i = 1 To d.Length - 1 s = s + d(i)

87

Next

For i = 1 To d.Length - 1 p(i) = d(i) / s

Next

End Sub

‘ обновление после изменения размеров формы

Private Sub Form1_ClientSizeChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.ClientSizeChanged Me.Refresh()

End Sub

End Class

7.6. Задание на тему «Построение круговой диаграммы»

Разработать программу, вычерчивающую круговую диаграмму. Исходные данные должны извлекаться из текстового файла. Количество точек – произвольно.

Порядок выполнения лабораторной работы

Создать папку с набором тестовых данных.

Создать новый проект – приложение Windows Forms.

Вынести на форму необходимые визуальные компоненты.

Добавить программный код обработки событий.

Компилировать программу.

Тестировать программу.

- Создать документ с описанием работы программы.

88

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]