Пример процедуры с параметрами
После бессмысленного примера процедур с параметрами хотелось бы рассмотреть реальный пример. Вернемся ко 2 варианту нашей программы из 11.1.2 об альбоме рисунков и стирании старого рисунка. Изменим его слегка, чтобы перед каждым рисунком стирание шло по-своему. Пусть у каждой картинки будет свое время стирания и своя музыка.
'Рисуем пушку:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer
Beep()
For i = 1 To 10000
Граф.FillEllipse(Brushes.White, Me.Width * Rnd(), Me.Height * Rnd(), 10, 50)
Next
Граф.Clear(Color.White)
Плеер.FileName = "D:\WINNT\Media\tada.wav"
Граф.DrawEllipse(Pens.Black, 100, 100, 200, 200) 'Колесо
Граф.DrawLine(Pens.Black, 20, 300, 350, 20) 'Ствол
End Sub
'Рисуем Буратино:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim i As Integer
Beep()
For i = 1 To 2000
Граф.FillEllipse(Brushes.White, Me.Width * Rnd(), Me.Height * Rnd(), 10, 50)
Next
Граф.Clear(Color.White)
Плеер.FileName = "D:\WINNT\Media\chimes.wav"
Граф.DrawEllipse(Pens.Black, 100, 100, 200, 200) 'Голова
Граф.DrawLine(Pens.Black, 300, 200, 400, 200) 'Нос
End Sub
Мы замечаем здесь тот же фрагмент о стирании, но он уже в обеих процедурах чуть-чуть неодинаковый. Наша задача прежняя – укоротить программу. Спрашивается, как сделать это в усложнившихся условиях? Точно так же, как мы поступили в 11.1.3 с бессмысленной программой.
Посмотрим повнимательнее, в чем неодинаковость. Мы видим, что она имеет место в двух местах фрагмента: в операторе For i=1 To (число каждый раз разное) и в операторе Плеер.FileName = (указываются разные звуковые файлы).
Придумываем имя для числа – Число_эллипсов. Придумываем имя для строки с именем файла – Звуковой_файл.
В теле процедуры вместо изменчивых числа и строки записываем имена переменных Число_эллипсов и Звуковой_файл. Затем объявляем их в заголовке процедуры, причем Звуковой_файл объявляем, конечно, как String. В скобках операторов вызова указываем число и строку. Это как раз те число и строка, которые нужно подставить во фрагмент на место переменных Число_эллипсов и Звуковой_файл.
Получается вот что:
'Рисуем пушку:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Стирание_старого_рисунка(10000, "D:\WINNT\Media\tada.wav")
Граф.DrawEllipse(Pens.Black, 100, 100, 200, 200) 'Колесо
Граф.DrawLine(Pens.Black, 20, 300, 350, 20) 'Ствол
End Sub
'Рисуем Буратино:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Стирание_старого_рисунка(2000, "D:\WINNT\Media\chimes.wav")
Граф.DrawEllipse(Pens.Black, 100, 100, 200, 200) 'Голова
Граф.DrawLine(Pens.Black, 300, 200, 400, 200) 'Нос
End Sub
Sub Стирание_старого_рисунка(ByVal Число_эллипсов As Integer, ByVal Звуковой_файл As String)
Dim i As Integer
Beep()
For i = 1 To Число_эллипсов
Граф.FillEllipse(Brushes.White, Me.Width * Rnd(), Me.Height * Rnd(), 10, 50)
Next
Граф.Clear(Color.White)
Плеер.FileName = Звуковой_файл
End Sub
Мы видим, что параметры могут иметь разные типы.
Теперь мы понимаем, зачем в конце заголовков процедур и в других операторах ставится пара скобок (). Это для параметров, буде они объявятся.