ПОНЯТНО О Visual Basic NET

         

Разные необходимые вещи


 Первые три подраздела касаются оформления программы в окне кода. Компьютеру они не нужны, а нужны вам.



Режим прерывания Пошаговый режим выполнения программы


Компьютер выполняет программу со страшной скоростью. Не успели мы нажать кнопку – а результаты уже получены. Если дела идут нормально, этот факт нас восхищает. Но предположим, что результаты получились не те, что нам надо. Это значит, что в программе есть ошибки. И искать их трудно. В такой ситуации скорость компьютера начинает раздражать. Хотелось бы, чтобы компьютер работал помедленнее и мы успевали проследить за его работой. И хорошо бы как-нибудь во время работы подсмотреть значения переменных в памяти, это помогло бы найти ошибку. Режим прерывания для этого и предназначен. Подробно о режиме прерывания и об отладке программы поговорим в Глава 9. , а сейчас вкратце и без особых пояснений остановимся на самом необходимом.

Щелкните в нашем проекте по вертикальной серой полосе в левой части окна кода против строки заголовка процедуры. На полосе появится черная точка и вся строка будет выделена черным (см. Рис. 5.3). Была создана так называемая точка прерывания (Breakpoint). Убираются точки прерывания так же, как и ставятся – щелчком мыши.

Рис. 5.3

Запустите проект обычным образом (кнопка Start или клавиша F5). Проект начнет выполняться как обычно. На экране появится форма. Нажмите, как водится, кнопку Button1. И тут вы почувствуете разницу. Вместо того, чтобы полностью выполниться и показать результат, проект остановится на точке прерывания, в знак чего эта строка окажется подсвечена желтым цветом и на нее укажет желтая стрелка (Рис. 5.4). Итак, только-только начав выполняться, наш проект «замерз» до тех пор, пока мы его не разморозим. «Мгновение остановилось». Говорят, что проект перешел в так называемый режим прерывания.

Рис. 5.4

Интересно, чему во время остановки равны значения переменных в памяти компьютера? Для того, чтобы узнать это, достаточно поместить не нажимая мышиный курсор на обозначение переменной в тексте процедуры в окне кода – во всплывающей подсказке вы увидите значение переменной (на Рис. 5.4 вы видите, что y=0). Поводите мышью по переменным. Как и положено, пока «на табло одни нули».


Продолжим выполнение проекта не кнопкой Start, как привыкли, а клавишей F11 на клавиатуре. Это горячая клавиша для Debug ® Step Into (кстати, если ваш профиль настроен на Visual Basic 6, то горячей клавишей будет F8, а не F11). Ничего не происходит, только полоса подсветки прыгает на строку a = 10. Операторы Dim выполняются заранее, поэтому полоса подсветки через оператор Dim перепрыгнула.

F11. VB выполняет a = 10, а следующий оператор подсвечивается. Проверьте мышкой, чему сейчас равны  a, b, y  в памяти.

F11. VB выполняет b = 6, а следующий оператор подсвечивается. Проверьте, чему сейчас равны  a, b, y  в памяти.

Итак, правило простое –  при нажатии на F11   VB выполняет очередной оператор программы и подсвечивает тот оператор, которому предстоит быть выполненным.

Обратите внимание, что сменился режим VB. Мы знаем пока два режима: режим проектирования [design] и режим работы  [run]. Теперь в заголовке главного окна VB вы видите слово [break]. Это означает, что VB сейчас находится в режиме прерывания. Можно сказать, что режим прерывания – это режим существования проекта, когда выполнение программы прервано, но не закончено. Когда вы нажимаете на F11, вы приказываете Бейсику останавливаться на каждом операторе. Такая разновидность режима прерывания называется пошаговым режимом. Режим прерывания можно настроить и на более редкие остановки.

F11. VB выполняет y = a+b+1, а следующий оператор подсвечивается. Проверьте, чему сейчас равны  a, b, y  в памяти.

F11. VB выполняет Debug.WriteLine (y + 200), а следующий оператор подсвечивается. В окне Output возникает число 217.



F11. Подсветка уходит, так как процедура выполнена. Можно снова жать на кнопку Button1.

Итак, компьютер сделал все то, что сделал бы при нажатии Start, но только в медленном темпе.

В любой момент пошагового выполнения программы вы можете вместо F11 нажать Start, которая по такому случаю переименовывается в Continue, и программа продолжит выполняться в обычном режиме.

Когда VB находится в режиме прерывания, на экране вы видите панель инструментов для отладки – Debug (Рис. 5.5).



Рис. 5.5

Когда вам вздумается завершить отладку, вы можете сделать это привычным способом, закрыв форму крестиком, а можете и нажать кнопку Stop Debugging на панели Debug (она имеет форму черного квадратика). Если панели Debug не видно, поместите ее туда обычным образом: View  ® Toolbars ® Debug.

Замечание: При отладке в пошаговом режиме вам часто нужно на экране видеть одновременно главное окно VS и саму запущенную форму. Но при нажатии на F11 форма часто пропадает из вида, будучи закрыта другими окнами. Чтобы этого не происходило, еще до начала отладки главное окно VS уменьшите до части экрана. Затем после запуска отладки перетащите форму на освободившуюся часть экрана. Тогда окно VS не будет перекрывать форму и проблема исчезнет.


Single и Double – десятичные дроби


С типом дробных чисел Double мы встретились в 5.2.3. Познакомимся поближе с ним и с типом Single. Оба они предназначены для работы с целыми и дробными числами и различаются, согласно таблице, точностью и диапазоном значений.

Создайте кнопку и введите такую программу:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Dim a, b, c As Single

        a = 23.456

        b = 100

        c = a + b

        WriteLine(a) : WriteLine(b) : WriteLine(c)

        Dim d, f, g As Double

        d = 123456789

        f = 0.000555

        g = d + f

        WriteLine(d) : WriteLine(f) : WriteLine(g)

End Sub

Обратите внимание, что оператор Dim d, f, g As Double находится не на самом верху процедуры. Это ничего. Надо только, чтобы объявление переменной было расположено в процедуре раньше ее «употребления».

Запустите проект. Вот результат:

23,456

100

123,456

123456789

0,000555

123456789,000555

Все правильно. Попробуем теперь проверить тип Single на прочность, как мы проверяли тип Integer. Попробуем записать вместо  a = 23.456 очень длинную дробь:

a = 23.45678901234567890123456789

Но VB не дает нам роскошествовать. Он прямо в окне кода укорачивает строку до:

        a = 23.456789012345681

причем даже чуть-чуть искажает число. Поставим курсор мыши на этот литерал и увидим подсказку «Double». Почему? Ведь переменная a имеет тип Single! Дело в том, что VB, пока проект не запущен, не утруждает себя угадыванием смысла литералов в окне кода и все дробные литералы «стрижет под Double». Запустим проект. Вот первые три числа результатов:

23,45679

100

123,4568

Как видите, VB обрезал наши длинные числа до 7 значащих цифр. Сделал он это потому, что 4 байта, отведенные под ячейку памяти для переменной типа Single, не в состоянии вместить больше. Если мы хотим иметь большую точность, то объявляем наши переменные типом Double. Под переменную типа Double компьютер отводит в памяти 8 байтов и поэтому она может быть гораздо длиннее – 17 значащих цифр.


Попробуем задать очень маленькое число. Вместо f = 0.000555 напишем:

        f = 0.0000000000000000000000000000000000000000000000000000000000000543

Но VB не любит в дробных числах большого числа нулей и вот, хоть запись и правильная и вполне по зубам типу Double, VB прямо в окне кода укорачивает строку до:

        f = 5.43E-62

Это тоже правильная запись, а что она значит, объяснено чуть позже, в 5.4.7.

Поговорим о точности вычислений. Если вы до сих пор считаете, что компьютер все вычисления выполняет абсолютно точно, то ошибаетесь. Компьютер всего лишь очень точен. Очень, а не абсолютно. И в этом вы скоро убедитесь. Начнем хотя бы с того, что VB не умеет работать с обыкновенными дробями. Он не знает, что такое 1/3, поэтому нам приходится задавать компьютеру вместо числа 1/3 число 0,333333333333. Но это ведь не точная дробь 1/3, а только приблизительное значение. Чтобы она стала точным значением, число знаков после запятой должно быть бесконечным, а такое число не уместится в памяти компьютера. Следовательно, даже теоретически компьютер не может быть абсолютно точен.

Во-вторых, из-за ограниченности типа Double 17 значащими цифрами операции даже над очень точными числами выполняются не совсем точно. Что, например, напечатает такой фрагмент?:

        Dim d, f, g As Double

        d = 123456789

        f = 0.00987654321098765

        g = d + f

        WriteLine(d) : WriteLine(f) : WriteLine(g)

Если вы думаете, что точную сумму 123456789,00987654321098765, то ошибаетесь, так как такое длинное число не уместится в типе Double. А напечатано будет вот что:

123456789

0,00987654321098765

123456789,009877

Десяток цифр из точного значения суммы обрезаны.

Целые литералы VB автоматически относит к типу Integer, а если они слишком длинные для Integer – к типу Long. Дробные литералы VB относит к типу Double. Все это он делает, не особенно обращая внимание на то, что переменные в том же операторе имеют другой тип.


Смысл оператора присваивания


Имейте в виду, что в операторе присваивания слева от знака равенства не может стоять число или выражение. Можно писать с=34, но нельзя писать 34=с. Можно писать  z=f-v+990, но нельзя писать  f-v+990=z. Правило это принято исходя из механики работы оператора присваивания. Оператор присваивания устроен так, что сначала смотрит или вычисляет, какое значение имеет правая часть, а затем присваивает это значение тому, что стоит в левой

части. То, что справа от знака равенства, присваивается тому, что слева от знака равенства, а не наоборот. Нет смысла присваивать значение числу или  выражению.

Обратите внимание еще на один важный момент. Когда школьник видит  выражение (например, d+2d), он не обязательно его вычисляет. Он может его преобразовать или, скажем, упростить (получив 3d), даже не поинтересовавшись, чему равно d. Компьютер же, видя  выражение, сначала его, может быть, и упростит в уме, но затем обязательно вычислит. А для этого он должен знать численные значения входящих в него величин (в нашем случае это величина d). Таким образом, вычисляя правую часть оператора присваивания (например, y=a+b+1), компьютер должен обязательно заранее знать, чему равны переменные, из которых эта правая часть состоит (в нашем случае это a и b). Ответственность за это знание лежит полностью на программисте. Пусть забывчивый программист записал такой фрагмент: … а=10 : y=a+b+1…, нигде в программе не придав b никакого значения. Естественно, при вычислении  выражения a+b+1 компьютер не будет знать, чему равно b. В такой ситуации разные языки программирования поступают по-разному.  Некоторые «злые» языки просто отказываются вычислять выражение, «коварный» Турбо-Паскаль может подставить вместо b какую-нибудь ерунду (и молчок, между прочим).  VB добрый – он подставляет вместо b нуль.

Проверим. Заставим VB в нашем последнем проекте про прямоугольник не выполнять оператор a = 27018. Для этого его можно просто стереть, но удобнее закомментировать: поставить перед ним кавычку, тогда VB подумает, что это комментарий и выполнять не будет:

        ‘a = 27018                         'Длина прямоугольника

Вот результат:

0

7908

Действительно, все выполнилось так, как если бы a было равно нулю.



События и их обработка


Разные события. Напомню, что объекты обладают свойствами, методами и событиями. Мы с вами уже познакомились с несколькими свойствами и методами. Но вот о событиях говорили мало. Фактически нам знаком лишь один сорт событий – щелчки мышкой по кнопке и пункту меню. Но у объектов VB (в частности – у формы и элементов управления) имеется большое количество и других событий. Так, у кнопки есть следующие события: щелчок мышкой по кнопке, появление мыши над кнопкой,  нажатие клавиши мыши над кнопкой,  отпускание клавиши мыши над кнопкой, изменение цвета кнопки, изменение размеров кнопки и несколько десятков других. У текстового поля есть следующие события: двойной щелчок мышкой по текстовому полю,  изменение текста в текстовом поле  и несколько десятков других. У формы есть следующие события: движение мыши над формой, изменение размеров формы, загрузка формы (например, появление при запуске проекта), закрытие формы (например, щелчком по крестику в правом верхнем углу) и несколько десятков других.

Обработка событий. Каждый раз, когда в предыдущих проектах мы щелкали мышкой по кнопке Button1 (то есть наступало событие – щелчок мышкой по кнопке Button1), компьютер делал то, что мы ему приказали: красил, показывал текст, играл мелодию и т.п.  Делал он это только потому, что мы в окне кода заранее написали процедуру, в которой объяснили компьютеру, что ему в этом случае делать. Например:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

      HScrollBar1.Width = 100

      RadioButton2.Hide()

End Sub

Посмотрим в заголовок процедуры. Где в нем сказано, что процедуру эту надо выполнять именно при щелчке мышью и именно по кнопке Button1? Ответ: в правой части заголовка после скобок:

Handles Button1.Click

Здесь Click – щелчок мышью (событие), Button1 – объект, с которым происходит это событие, Handles – по-русски «обрабатывает». Полностью заголовок процедуры можно перевести так: Процедура, которая обрабатывает щелчок мышью по кнопке Button1, или по-другому – указывает, что нужно сделать при щелчке мышью по кнопке Button1.


Нечто похожее написано и в левой части заголовка процедуры:
Button1_Click
Но это всего лишь имя процедуры. Вы можете его как угодно изменить, процедура все равно будет работать.
О смысле того, что написано внутри скобок, мы будем говорить позже.
Как получить заготовку процедуры для обработки любого события? Чтобы получить заготовку процедуры для обработки щелчка мышью по кнопке или пункту меню, мы в режиме проектирования просто делали двойной щелчок по кнопке или пункту меню. И в окне кода получали заготовку:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       
End Sub
Почему появлялась заготовка именно для щелчка мышью, а не для какого-нибудь другого события? Потому что так удобней программисту, ведь щелчок мышью – самое популярное событие, когда речь идет о кнопке или пункте меню. А как нам получить заготовку для обработки какого-нибудь другого события? Разберем на примере.
Создайте проект с двумя текстовыми полями и кнопкой (Рис. 3.25).

Рис. 3.25
Поставим такую задачу: Пусть при появлении мышки над кнопкой Button1  в текстовом поле  TextBox1 появляется текст «Мышь появилась над кнопкой».
Зайдите в окно кода. В его верхней части вы увидите два белых поля. Щелкните по черной треугольной стрелке в левом поле. Откроется список. В нем вы увидите имена всех элементов управления на форме и самой формы (Рис. 3.26).

Рис. 3.26
Поскольку нас интересует кнопка Button1, выберем в списке именно ее. Теперь наш путь – в правое поле. Щелкните по черной стрелке в правом поле. Откроется список. В нем вы увидите имена событий, связанных с кнопкой  Button1 (Рис. 3.27).

Рис. 3.27
Выберите событие MouseEnter, которое в данном случае можно перевести так: «Появление мыши над». В окне кода появляется заготовка
Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter
 
End Sub
Завершающий фрагмент заголовка (Handles Button1.MouseEnter) говорит, что эта процедура обрабатывает (Handles) появление мыши (MouseEnter) над кнопкой Button1 .


Запишем внутрь процедуры нужный оператор. Получим:
Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter
        TextBox1.Text = "Мышь появилась над кнопкой"
End Sub
Важное замечание по оформлению программного текста в книге: Заголовки процедур в заготовках, которые возникают в окне кода, получаются очень длинными и, будучи перенесенными на этот книжный лист, часто не умещаются по ширине листа. В то же время они содержат имена пространств имен, которые VB вполне разрешает выбросить. Например, в предложенном заголовке
Private Sub Button1_MouseUp(ByVal sender As System.Object, ByVal e  _
As System.Windows.Forms.MouseEventArgs)Handles Button1.MouseUp
можно безнаказанно выбросить пространства имен, которые я выделил полужирным шрифтом. Получится гораздо компактнее:
Private Sub Button1_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs)Handles Button1.MouseUp
В дальнейшем я часто так и буду поступать.
Примеры обработки событий. Ниже приведена программа из нескольких процедур для обработки в нашем проекте нескольких популярных событий формы и элементов управления. Введите программу в окно кода. Для этого добейтесь описанным выше способом, чтобы в окне кода появились заготовки процедур для каждого события. Для обработки событий формы выберите, если вы работаете в Visual Studio .NET 2003, в левом поле Form1 Events, а если в Visual Studio .NET – Base Class Events. Не забывайте, что после ввода очередной процедуры проект рекомендуется запускать и результаты работы процедуры проверять. Пояснения приведены ниже.
Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter
        TextBox1.Text = "Мышь появилась над кнопкой"
End Sub
Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles Button1.MouseDown
        TextBox1.Text = "Нажата клавиша мыши над кнопкой"


End Sub
Private Sub Button1_MouseUp( ByVal sender As Object, ByVal e As MouseEventArgs) Handles Button1.MouseUp
        TextBox1.Text = "Отпущена клавиша мыши над кнопкой"
End Sub
Private Sub TextBox2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles TextBox2.TextChanged
        TextBox1.Text = "Текст в нижнем текстовом поле изменился"
        Beep()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        MsgBox("Выполняется процедура Form1_Load. Форма еще не видна.")
        TextBox1.Text = "Форма загружена"
End Sub
Private Sub Form1_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
        MsgBox("Форма закрыается")
End Sub
Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize
        TextBox1.Text = "Форма изменила размер"
End Sub
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseMove
        TextBox1.Text = "Мышь сдвинулась над формой"
End Sub
Пояснения.
Событие TextChanged. Изменения текста отслеживаются в поле TextBox2, а не TextBox1, которое нам нужно только для выдачи сообщений. Не путайте. Проверяется это событие просто – попробуйте изменить текст в нижнем поле – сразу же в верхнем поле появится сообщение и вы услышите звук. Кстати, вы услышите его и при запуске проекта, потому что при запуске проекта VB записывает в поля их текст. А вот почему тогда мы не видим при запуске в верхнем поле сообщения "Текст в нижнем текстовом поле изменился", это загадка. Которую чуть позже попробуйте отгадать сами.
Форма  Form1 в правой части заголовка обработчика обозначается MyBase.
Событие Load формы – загрузка формы – происходит при запуске проекта. Это очень важное и широко используемое событие. Пока процедура Form1_Load выполняется, форму на экране вы ее еще не видите. Поэтому и все действия, которые вы запрограммировали в этой процедуре, выполняются до появления формы на экране. Тем не менее, как сама форма, так и элементы управления к этому моменту уже незримо присутствуют в проекте и с ними можно работать. Некоторые события успели произойти и быть обработаны до выполнения процедуры Form1_Load, о чем свидетельствовал звук перед появлением сообщения «Выполняется процедура Form1_Load. Форма еще не видна».
Событие Closed формы – закрытие формы – происходит, когда вы закрываете форму, например, крестиком в ее правом верхнем углу. Раз форма закрыта, она исчезла из поля зрения вместе со своими текстовыми полями. Поэтому сообщение об этом факте я доверил не текстовому полю, а окну MsgBox.
Когда вы водите мышью над формой, событие MouseMove возникает много раз в секунду.
Список событий объекта с пояснениями вы можете найти и в системе помощи (см. 4.4.9), поставив текстовый курсор на имя объекта и нажав F1.  В открывшемся окне помощи вы найдете события по заголовку (Events) и по значкам молнии.
С остальными популярными событиями мы будем знакомиться по мере изучения книжки.

Сохранение, закрытие, открытие, создание проекта, выход из VS


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

 (Save All) на панели инструментов. В дальнейшем рекомендую сохраняться таким образом перед каждым запуском проекта на выполнение.

Вы должны понимать одну вещь. Каждый раз, когда вы нажимаете на кнопку Save All, VS, ни о чем вас не спрашивая, стирает с диска весь ваш проект (в том виде, как он был сохранен в последний раз) и на его место записывает с тем же именем его исправленную и дополненную вами версию, то есть ту, что вы видите на экране. Так поступают все современные программные продукты. На усмотрение программиста оставляется решать, а не хуже ли новая версия старой и не жалко ли старой версии.

Дальнейший материал подраздела прочтите, не выполняя. Выполнение отложите на потом, когда действительно понадобится закрывать, открывать или создавать проект.

Закрытие. Если вы хотите закончить работу над проектом, вам нужно сохраниться, а затем так закрыть его: File ® Close Solution. Теперь в окне Solution Explorer у вас должно быть пусто. Если вы забыли сохранить проект, VS перед закрытием предложит вам сделать это.

Выход из VS совершенно такой же, как и из большинства других приложений Windows – щелчок мышкой по крестику в правом верхнем углу главного окна VS или File ® Exit. Если вы забыли сохранить проект, VS перед выходом предложит вам сделать это.

Открытие. Сохранившись и закрыв проект, вы можете спокойно выйти из VS и можете даже выключить компьютер. Можно и не выходить из VS. Чтобы продолжить через некоторое время работу над проектом, снова запустите VS (если вы вышли из нее) и так загрузите (откройте) сохраненный проект: File ® Open ® Project ® перед вами откроется диалоговое окно открытия проекта ® зайдите в папку проекта (Рис. 1.10). Если вы не знаете, как добраться до папки нужного проекта, читайте следующий подраздел.




Рис. 1.10

Затем щелкните по одному из двух файлов, а именно, по файлу так называемого решения (на рисунке он выделен). Другой файл (на рисунке он ниже) – это файл проекта (кстати, можно щелкнуть и по нему). Как вы видите, эти два файла различаются значками и расширениями. Вообще о проектах и решениях (Solution) поговорим позже (21.3).  

Затем – Open. Перед вами появится ваш проект. Если же не появится и даже закладки окон конструктора форм и кода не появляются над окном, сделайте двойной щелчок по значку Form1.vb в окне Solution Explorer (Рис. 1.5). Появится окно конструктора форм. Если же нигде не видно окна Solution Explorer, сделайте следующее: View ® Solution Explorer. Еще один способ: View ® Designer (чтобы появилось окно конструктора форм) и View ® Code (чтобы появилось окно кода).

Создание. Если вы работаете над каким-нибудь проектом, а затем хотите бросить его и начать новый проект, то сначала сохраните и закройте проект, над которым работаете. Убедитесь, что в окне Solution Explorer у вас пусто. Затем выполните File ® New ® Project, а далее – как уже описано в 1.3.1.

При создании нового проекта не забудьте дать ему подходящее имя. Всем вашим проектам придумывайте, конечно, разные имена. Для каждого нового проекта VS создает отдельную папку с данным вами именем. Через некоторое время у вас накопится несколько папок с сохраненными проектами. Все они расположены рядышком внутри папки Visual Studio Projects.

Ситуации. Если вы работали в некотором проекте, а затем, не сохранив и не закрыв его, решили открыть или создать другой проект, то VS сначала предложит вам сохранить старый и после сохранения автоматически удалит его из среды (не с диска, конечно), освобождая место для нового.

Если вы по ошибке вместо File ® Open ® Project

или File ® New ® Project выполните File ® Add Project, то старый проект не будет удален и в главном окне VS вы будете иметь вместо одного сразу два проекта. Вы это сразу же заметите, взглянув в окно Solution Explorer. Иногда иметь в среде сразу два проекта удобно, иногда просто необходимо, но пока вам это не нужно. Если это все же произошло, жмите, пока вы еще неопытны, File ® Close Solution, отвечая отказом на предложения сохраниться, до тех пор, пока окно Solution Explorer не опустеет.

Часто новый проект, который мы создаем, бывает похож на старый, и удобнее не новый создавать с нуля, а старый переделывать. Мой опыт таков. Я, не открывая старый проект, копирую целиком его папку. Таким образом, теперь у меня на диске два одинаковых проекта. Затем я обычным образом открываю копию проекта и переделываю ее в новый проект. Как копировать папки, написано в Приложении 2 «Действия над файлами и папками». Вы спросите: Зачем копировать, если можно просто переделывать старый проект в его папке? Ответ: в процессе переделки вы можете потерпеть неудачу, тогда у вас и новый проект не будет создан и старый испорчен.


Solution Explorer


Теперь поговорим о смысле некоторых окон VS.

В окне Solution Explorer (оно видно, например, на Рис. 1.5) мы видим структуру нашего проекта. Пока от этого окна пользы мало, так как у наших проектов структура простая – одна форма и связанный с ней код. Сложные проекты могут состоять из многих форм и других компонентов, взаимосвязь которых как раз и удобно видеть в этом окне.

Вы можете одновременно работать с несколькими проектами, объединенными в так называемое решение (Solution). О том, зачем это бывает нужно, вы узнаете позже. Все проекты решения видны в этом же окне Solution Explorer. До сих пор мы работали с одиночными проектами, но все равно считалось, что мы работаем не просто с проектом, а с решением, состоящим из одного проекта. Так считать мы будем и в будущем. Поэтому часто я не буду различать проект и решение.

Более подробно о решении и работе Solution Explorer написано в 21.3.



Создаем меню


Скопируйте папку проекта Калькулятор и работайте над копией.

Чтобы создать меню, нужно в Toolbox найти новый для нас элемент MainMenu (Главное меню) и разместить его на форме. Но, странное дело, оно оказывается не на форме, а под ней (значок  MainMenu1 на Рис. 3.18). Эта область, где расположен значок, называется дизайнером компонентов (Component Designer). VB помещает на дизайнер компонентов те элементы, которым во время работы проекта ни к чему быть видимыми.

Однако, одновременно на том же рисунке мы видим и «зародыш» нашего будущего меню: в левой верхней части формы, там, где обычно и размещается Главное меню, появилось белое поле со словами Type Here, что означает «Печатай сюда». Вот его-то мы видеть будем.

Рис. 3.18

Щелкните по этому полю и введите в него текст «Внешний вид». Как только вы начнете вводить этот текст, появятся еще дополнительные поля со словами Type Here (см. Рис. 3.19). Они появляются там, где по мнению VB вы можете пожелать создавать другие пункты меню. Сравнив местоположение этих полей с заданным местоположением пунктов меню на  Рис. 3.17, сделаем вывод, что на месте правого поля должен быть текст «О программе», а на месте нижнего – «Прозрачный».

Рис. 3.19

Введя текст «Внешний вид», щелкните по правому полю и введите текст «О программе». При этом появятся новые поля с текстом Type Here (см.Рис. 3.20). Взглянув на  Рис. 3.17, мы понимаем, что они нам не понадобятся.

Рис. 3.20

Введя текст «О программе», снова щелкните по полю с надписью «Внешний вид». При этом ниже него снова появится поле с текстом Type Here, куда мы и вводим текст «Прозрачный» (см.Рис. 3.21).

Рис. 3.21

Взглянув на  Рис. 3.17, мы видим, что ниже этого поля мы должны ввести текст «Цвет полей». Когда мы его будем вводить, справа от поля «Цвет полей» появится поле со словами Type Here, в которое мы, следуя за Рис. 3.17, введем текст «Желтый» (см. Рис. 3.22), а ниже текста «Желтый» – текст «Белый», оставив без внимания другие поля.

Рис. 3.22

Все в порядке – внешний вид меню готов. Запустите проект. Вы видите, что задуманное меню появилось на калькуляторе. Пощелкайте по пунктам. Вложенные меню выпадают, как положено, но больше, естественно, ничего не происходит. Для того, чтобы происходило, нужно заставить меню работать, а для этого нужно для каждого пункта написать свою процедуру.



Создаем проект


Теперь вам нужно сообщить компьютеру, что вы хотите создать новый проект на языке VB. Ваши действия: File ® New ® Project. Перед вами возникает диалоговое окно (см. Рис. 1.3):

Рис. 1.3

В левом поле вы выбираете Visual Basic Project в знак того, что хотите создавать проект именно на языке VB. В правом поле вы выбираете Windows Application (Приложение Windows) в знак того, что собираетесь создавать обычную программу, которая должна работать на вашем настольном компьютере или ноутбуке под управлением Windows в обычном окне. В этом поле вы могли бы выбрать, например, создание программы для работы в Интернете или что-нибудь другое.

Чуть пониже, в поле Name компьютер предлагает нам название вашего будущего проекта и одноименной папки, в которой он будет сохраняться – WindowsApplication1, а еще ниже, в поле Location компьютер предлагает папку, в которой будут храниться папки всех ваших будущих проектов – E:\Documents and Settings\Sergey Lukin\My Documents\Visual Studio Projects. Если вы сейчас нажмете ОК, то внутри этой папки тут же будет создана папка WindowsApplication1 и в ней немедленно появятся все необходимые файлы, которые и будут составлять ваш будущий проект.

Запомните: каждый проект состоит не из одного файла, а из нескольких файлов и папок, поэтому было бы глупо пытаться сохранять файлы и папки разных проектов «скопом» в одной папке. Они просто перемешаются. VS прекрасно это понимает и поэтому предлагает вам сохранять проект в отдельную папку. Вам остается только согласиться. Если вы согласитесь также на имя WindowsApplication1, то для следующего нового проекта VS предложит уже папку WindowsApplication2 и так далее. Все эти папки будут находиться рядышком внутри папки Visual Studio Projects, как показано на рисунке, изображающем фрагмент Проводника Windows.

Если вам не нравится папка Visual Studio Projects, то вы можете выбрать другую кнопкой Browse (неопытным не рекомендую).

Но мы щелкать на ОК все равно пока не будем, так как нам нужно придумать более подходящее, чем WindowsApplication1, имя для проекта. Поскольку смысл его, как я наметил, будет заключаться в том, чтобы «покрасить» некую «форму, то и введем в поле Name название Красим форму, после чего и нажмем ОК. Проект теперь будет храниться в папке с этим названием.


Перед вами возникнет следующая картинка (Рис. 1.4), говорящая о том, что вы можете приступать к проектированию (внешний вид картинки у вас может быть немножко другой).



Рис. 1.4

В заголовке окна вы теперь видите слова Microsoft Visual Basic.NET. Это означает, что среда разработки программ Visual Studio .NET приняла одно из своих обличий, а именно стала Средой разработки программ на VB. Если бы вы создавали проект на C++ .NET, то VS надела бы другую маску и выглядела бы немного по-другому.

Перейдите в Windows и проверьте содержимое появившейся папки Красим форму. Вы видите, что ваш проект состоит из нескольких файлов и папок.

На будущее хочу предупредить, что, если до вас в VS уже кто-то работал, то он мог перенастроить среду так, что она в чем-то будет вести себя совсем по-другому, чем я написал. В этом случае, если вы наткнетесь на трудности, изучите предварительно Глава 4. . Во всяком случае, не рекомендую щелкать по кнопкам и пунктам меню, смысла которых вы не понимаете. Старайтесь также не отвлекаться на большое количество присутствующих на экране кнопок и окон, о которых я пока умалчиваю, чтобы не утонуть в подробностях.


Стартовая страница


Когда вы впервые запускаете VS, первое, что вы видите, это стартовая страница (Рис. 1.1 или Рис. 1.2). Открыта она на закладке My Profile («Мой профиль»). Если у вас есть какие-то предпочтения и опыт программирования, то можете здесь настроить свой профиль в среде VS, если нет – оставьте все, как есть. Рекомендую только установить фильтр Help Filter на Visual Basic, чтобы система помощи не забивала экран ненужной вам информацией по другим языкам. Если раньше вы программировали на Visual Basic 6.0, то можете здесь выбрать соответствующий профиль, тогда VS предоставит вам  привычные настройки.

В следующий раз при запуске стартовая страница откроется на закладке Projects (в Visual Studio .NET 2003) или закладке Get Started (в Visual Studio .NET). Эта закладка предлагает вам выбрать для открытия один из последних проектов, с которыми вы работали, или создать новый проект, что весьма удобно.

Остальные закладки связаны с Интернет.

Если вам надоело, что при каждом запуске VS появляется стартовая страница, зайдите в закладке My Profile в список At Startup  (Рис. 4.22) и выберите один из вариантов. Вот они по порядку:

Показывать стартовую страницу.

Открывать решение (проект), с которым работали последним.

Показывать окно открытия проекта.

Показывать окно создания нового проекта.

Ничего не показывать.

Рис. 4.22

Если вы соскучились по стартовой странице, то Help ® Show Start Page..



Ставим задачу


Пусть нам нужно создать меню, которое выглядит так, как на Рис. 3.17.

Рис. 3.17

Меню, которое располагается непосредственно под заголовком приложения, называется главным меню. Значит, мы будем создавать главное меню.

Задачу для меню поставим такую: Щелкнув по пункту «Внешний вид», мы должны увидеть выпадающее меню из двух пунктов: «Прозрачный» и «Цвет полей». Щелкнув по пункту «Прозрачный» этого выпавшего меню, мы делаем калькулятор полупрозрачным. Наведя мышку на пункт «Цвет полей», мы должны увидеть другое выпадающее меню из двух пунктов: «Желтый» и «Белый». Щелкнув по пункту «Желтый»,  мы красим все три текстовые поля в желтый цвет, щелкнув по пункту «Белый» – в белый. Щелкнув по пункту «О программе», мы вызываем сообщение с кратким описанием программы.

Нам предстоит сначала создать меню, а затем

заставить его работать.



Строковые переменные


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



Свойства формы


WindowState (состояние окна). Определяет, в каком виде возникает на экране форма при запуске проекта: в нормальном, в минимизированном (то есть вы найдете ее на панели задач Windows) или максимизированном (во весь экран).

StartPosition (стартовая позиция). Определяет, в каком месте экрана возникает форма при запуске проекта. Так, вы можете заставить ее появиться в центре экрана (CenterScreen) или предоставить себе возможность вручную (Manual) настраивать место появления формы при помощи свойства Location (см. следующий раздел).

MaximizeBox (кнопка максимизации –  квадратик в правом верхнем углу формы). Сейчас значение этого свойства – True (Правда). Если установить его в False (Ложь), то квадратик станет недоступен. Свойство FormBorderStyle может совсем убрать этот квадратик.

MinimizeBox (кнопка минимизации – горизонтальная черточка в правом верхнем углу формы). Сейчас значение этого свойства – True (Правда). Если установить его в False (Ложь), то черточка станет недоступна. Свойство FormBorderStyle может совсем убрать эту черточку.

MinimumSize (минимальный размер). Устанавливает минимальную ширину и высоту формы, меньше которых форму нельзя уменьшить как  в режиме [run], так и в режиме проектирования.

MaximumSize (максимальный размер). Устанавливает максимальную ширину и высоту формы, больше которых форму нельзя увеличить как  в режиме [run], так и в режиме проектирования.

Icon (значок, пиктограмма, иконка). В левом верхнем углу формы вы видите значок. Его же вы видите на панели задач, когда проект запущен. Если он вам не нравится, вы можете его заменить на другой. Щелкните по свойству Icon. В поле значения появилась кнопочка с троеточием. Щелкните по ней – перед вами появится привычное вам окно открытия файла. Множество иконок вы можете найти в нем по адресу

Program Files\Microsoft Visual Studio .NET\Common7\Graphics\icons

ShowInTaskbar (показывать значок на панели задач). Вы можете запретить значку формы появляться на панели задач, установив это свойство в False.

Opacity (непрозрачность). Очень живописное свойство, которого не было в предыдущих версиях Visual Basic. Сейчас оно установлено в 100% и форма после запуска проекта полностью и привычно непрозрачна. Установите его, например, в 50% и запустите проект. Форма станет полупрозрачной (см. Рис. 3.10).

Рис. 3.10

При значении 0% форма будет невидима полностью. В 12.9мы поставим задачу материализации привидений, а сейчас вы вполне можете сделать полупрозрачным наш Калькулятор. А что – очень удобно!



Свойства из окна свойств


Начнем в режиме проектирования совершенствовать и украшать наш калькулятор.  Для этого нам понадобится изменять некоторые другие свойства формы, кнопок, текстовых полей, меток – объектов, из которых калькулятор сконструирован. Рассмотрим эти свойства. Многие из них имеются и у большинства других элементов управления, некоторые – только у одного-двух. Прочтя материал об очередном свойстве, вам надлежит тут же поэкспериментировать, проверить, как его различные значения влияют на вид и поведение объектов проекта в режиме [run].

Добрый совет: После нескольких экспериментов ваш проект будет напоминать помесь попугая с дикобразом. К тому же у объектов очень много и других свойств, которые я не объясняю, а природная любознательность толкнет вас «поперед батьки» разобраться, что они значат, придавая им для этого наугад какие-нибудь значения. Нет проблем – ломайте голову и проект на здоровье. Проблема же в том, что кое-кто норовит сохранить проект с измененными значениями неведомых свойств. А потом не может обломать попугаю рога. Выход такой. Перед началом экспериментов скопируйте папку проекта. И экспериментируйте над копией. «Чувство защищенности!».



Свойства текстового поля


Multiline (многострочное). Когда вы создаете текстовое поле, значение этого свойства – False. Это значит, что в текстовое поле нельзя ввести больше одной строки текста и высоту поля нельзя сделать больше, чем в одну строку. Если установить его в True, то все это становится можно. Установите. Увеличьте высоту поля. Попробуйте поработать. В режиме [run] такое текстовое поле ведет себя, как окно документа простейшего текстового редактора. Введите в него несколько строк произвольного текста. Правая клавиша мыши позволяет осуществлять простейшие операции редактирования.

WordWrap (свертывание). Сейчас значение этого свойства – True. Это значит, что когда при вводе строки в многострочное текстовое поле текст доходит до правого края поля, ввод, как мы и привыкли, автоматически продолжается с начала следующей строки. Если установить его в False, то ввод будет продолжаться в той же строке с прокруткой текста.

ScrollBars (полосы прокрутки). Чтобы легче было прокручивать текст в многострочном текстовом поле, вы можете снабдить его вертикальной полосой прокрутки, а если свойство  WordWrap установлено в False, то и горизонтальной.

ReadOnly (только для чтения). Когда вы создаете текстовое поле, значение этого свойства – False. Если установить его в True, то вы не сможете вводить туда информацию вручную, а только программным путем. Я думаю, имеет смысл установить это свойство в True текстовому полю, предназначенному для результата, в вашем Калькуляторе. Правда, при этом оно изменит цвет, но вы снова сможете его восстановить, задав свойство BackColor.

CharacterCasing (регистр). Вы можете заставить все буквы в текстовом поле быть только заглавными или только строчными, несмотря на то, что вводите вы в него (с клавиатуры или программно) и те и другие.



Типы переменных в VB


Типы Integer и Double. Много ли прав на нашем балу у барона Integer? Посмотрим. Попробуем ввести дробное значение длины прямоугольника – две целых одну десятую –  2,1. Именно так – с запятой, а не точкой. (Я полагаю, что ваш Windows настроен на Россию, где в дробных числах пишут запятую. В противном случае вам нужно писать точку, как это делают на Западе, причем не только в тексте программы, но и в текстовых полях). Посмотрим результат. VB при вычислениях считает a целым числом 2. А теперь –  2,8. VB считает a целым числом 3. Все правильно. Наш барон, как ему и положено, высокомерно отказывается быть дробным числом и поэтому любое число, которое мы ему предлагаем, округляет до целого. Так устроен тип Integer.

Предположим, мы этим недовольны. Мы желаем, чтобы все числа могли быть и дробными тоже. Пожалуйста! Для этого достаточно всех гостей объявить князьями. Изменив оператор Dim вот так:

        Dim a, b, S, p As Double

Оператор объявления

Dim 

a, b, S, p

As

Double 

переводится так:

Объявляю

a, b, S, p

как

десятичные дроби двойной точности

то есть вы обязуете VB обращаться с переменными величинами a, b, S, p, как с десятичными дробями и ничем иным. Десятичная дробь – это не только число, меньшее единицы. Нет – это вообще любое число, которое может иметь целую и дробную часть (например, 27,3908). В частности это и любое целое число. О смысле двойной точности попозже.

Законный вопрос: зачем нам нужен тип Integer, когда тип Double очевидно «гораздо богаче и лучше»? Ответ: Не во всем и не всегда он лучше, иначе не стали бы его создавать вообще. Подробнее об этом – в 5.4.5.

Список типов VB. На бал к VB вхожи не только бароны и князья, то есть типов переменных в VB довольно много и каждый полезен по-своему. Рассматривать новые типы я буду по мере надобности. Вот какие типы данных вы найдете в этой книжке:

Тип

Описание

Ссылка

Byte

Целое число – очень короткое, положительное (от 0 до 255)

5.4.3

Short

Целое число – короткое (от -32768 до 32767)

5.4.3

Integer

Целое число – обычное (от -2147483648 до 2147483647)

5.4.3

Long

Целое число – длинное (от -9223372036854775808 до 9223372036854775807)

5.4.3

Single

Десятичная дробь обычной точности

5.4.4

Double

Десятичная дробь двойной точности

5.4.4

Decimal

Десятичная дробь длинная, абсолютной точности

5.4.5

Char

Символ (любой из 65536 знаков, букв, цифр и других символов)

19.1.2

String

Строка (произвольный текст)

19.1

Boolean

Логический тип (истина – ложь)

7.5.4

Date

Дата и время

13.1

Массивы

Глава 15.

Enumerations

Перечисления. Типов перечислений много и все с разными именами.

13.3

Structures

Структуры – пользовательские типы. Типов структур много и все с разными именами.

16.3

Классы

Типов классов огромное количество и все с разными именами.

21.4

Object

Объект – всеобъемлющий тип-хамелеон

11.5.1

Для каждого из упомянутых в таблице типов вы можете объявлять переменные при помощи оператора Dim.



Toolbox


Взгляните на Рис. 1.5. В окне Toolbox имеются закладки Data, Components, Windows Forms и в нижней части окна – другие. В закладках расположены элементы управления. Наибольшая их часть расположена в закладке Windows Forms. Закладки не очень похожи на обычные закладки и ведут себя непривычно: разъезжают вверх-вниз. Но ничего, привыкнуть можно.

Обычно все элементы управления в закладке Windows Forms не помещаются по высоте окна Toolbox. Чтобы добраться до непоместившихся, прокручиваем окно черными треугольными стрелочками в верхней и нижней частях окна.

Вы можете таскать элементы управления вверх-вниз по окну Toolbox, размещая их удобным вам образом. Щелкните правой клавишей мыши по поверхности окна и в появившемся контекстном меню выберите Sort Items Alphabetically. Элементы управления расположатся в алфавитном порядке. Не выбирайте Cut и Delete, не то Toolbox лишится элементов управления.

Если Toolbox вашего компьютера слишком узкий или широкий, вы можете перетащить мышкой его границу.

В стандартном наборе элементов управления в окне Toolbox отсутствуют многие полезные и приятные элементы управления. Чтобы поместить на Toolbox нужный вам элемент управления, выберите в контекстном меню Toolbox пункт Add/Remove Items. Появляется окно Customize Toolbox (см. Рис. 4.16).

Рис. 4.16

В закладке  .NET Framework Components

(новые компоненты) или COM Components (старые компоненты) вы в длинном списке ставите галочку там, где она еще не поставлена, напротив нужного элемента. Затем – ОК. Соответствующий элемент управления оказывается в окне Toolbox. Теперь его можно размещать на форме обычным образом.



Tools


Здесь нам интересен пункт Options, который позволяет настраивать среду VS, то есть регулировать внешний вид и поведение окон, панелей инструментов и других элементов среды. Будьте осторожны и не меняйте настроек, которых вы не понимаете, иначе VS будет вести себя непривычным или неприятным образом. Некоторые настройки вступают в действие не сразу, а только после перезагрузки VS.

Загляните в пункт Options (Рис. 4.23).

Рис. 4.23

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

Страница General папки Environment. На Рис. 4.23 вы видите страницу General

(Общая) из папки Environment (Среда). Верхний переключатель позволяет вам выбрать для центральной группы окон один из двух способов представления окон: с закладками, к которому вы уже привыкли в VS (Tabbed Documents), и без закладок – тот, к которому вы привыкли в других приложениях Windows (MDI environment), когда окна могут перемещаться независимо друг от друга. Вы помните, что в других группах окон вы делаете выбор между этими двумя способами при помощи их контекстного меню – Dockable – Floating.

Справа (At startup) вы видите список того, чем вас встречает VS при загрузке. Вы его уже видели на Рис. 4.22, там же он и описан.

Флажок  Show status bar заведует появлением в нижней части экрана строки состояния. Снимите его, если вам не хватает места на экране.

Следующий флажок с регулятором позволяют регулировать скорость «выползания» из-за края экрана окна Toolbox и других окон с включенным Auto Hide.

Страница Fonts and Colors папки Environment. На Рис. 4.24 вы видите страницу Fonts and Colors (Шрифты и цвета) из папки Environment. Она позволяет выбрать шрифты и цветовое оформление окон, предназначенных для текстовой информации.

Рис. 4.24

Сначала в поле Show settings for мы выбираем окно или тип окон, для которого будем настраивать шрифты и цвета. На рисунке выбран Text Editor, то есть попросту окно кода (а, например, для настройки окна Output нам понадобится Text Output Tool Windows). В полях Font и Size мы выбираем шрифт и размер шрифта для этого окна. Установив флажок Bold, мы делаем шрифт полужирным.


Теперь займемся цветом. В поле Display items мы выбираем элемент окна, для которого будем настраивать цвет. Так, Text означает основной текст в окне кода, Selected Text – выделенный текст, а Keyword – ключевые (зарезервированные, служебные) слова VB (вы привыкли видеть их синими). В списках Item foreground (цвет переднего плана) и Item background (цвет заднего плана) мы настраиваем соответственно цвет самого текста и цвет фона для этого текста. Кнопки Custom позволяют настроить цвет более тонко.

Поле Sample позволяет нам видеть результат наших настроек.

Страница Projects and Solutions папки Environment. На Рис. 4.25 вы видите страницу Projects and Solutions (Проекты и решения) из папки Environment.



Рис. 4.25

В поле Visual Studio Projects location мы вручную пишем или при помощи кнопки Browse выбираем папку, в которой VS будет по умолчанию сохранять новые проекты. По умолчанию означает, что человек не вмешается и не выберет другой вариант.

Если вам не нужно, чтобы при каждом запуске проекта на выполнение появлялось окно Output, а при ошибках во время запуска появлялось окно Task List, то снимите следующие два флажка.

Переключатель Build and Run Options определяет, будет ли VS перед любым запуском проекта на выполнение автоматически сохранять проект (Save changes to open documents), предлагать сохранить проект (Prompt to Save Changes to open documents) или не сохранять (Don't save changes to open documents). Беспечным советую первое.

Папка Projects. Здесь мы включаем или отключаем опцию Option Explicit (см. 5.2.4) и две другие опции.

Страница General папки Windows Forms Designer. Здесь мы устанавливаем расстояние между линиями сетки на форме по горизонтали и вертикали (Grid Size) и имеем возможность скрывать или показывать эту сетку (Show Grid). Установив в True опцию SnapToGrid, мы приказываем, чтобы очертания элементов управления проходили только по линиям сетки.


Третий этап - инсталляция


Инсталляцию вообще я уже вкратце описал в начале раздела. Начнем с того, что в качестве эксперимента проведем инсталляцию на том же компьютере, на котором вы создавали инсталляционный пакет.

1. Сделайте двойной щелчок мышкой по файлу Мой калькулятор.msi. Инсталляция запустилась. Появившееся окно мастера установки (Рис. 4.40) предупреждает, что тот, кто установит эту программу без вашего разрешения, сядет в тюрьму. После этого с легким сердцем можете нажимать Next.

Мастером называется программа, позволяющая пользователю делать сложные вещи с минимальной затратой умственных сил. Обычно работа мастера состоит из нескольких шагов, на каждом из которых мастер задает пользователю вопросы. Переход к следующему шагу осуществляется кнопкой Next. Вернуться назад вы можете кнопкой Back, прервать установку – кнопкой Cancel.

Рис. 4.40

2. В следующем окне (Рис. 4.41) вам предлагается адрес папки, в которую будет устанавливаться ваша программа. Если он вам не нравится, нажмите кнопку Browse  и выберите нужную папку или впишите адрес в текстовое поле. При помощи переключателя внизу задайте, кто будет пользоваться этой программой: все пользователи компьютера (Everyone) или только вы (Just me). Next.

Рис. 4.41

3. Следующее окно (Confirm Installation) предлагает вам на всякий случай подтвердить, что вы хотите начать инсталляцию (ведь это связано с записью файлов на компьютер и бог знает чем может закончиться). Next.

4. Идет процесс установки (Рис. 4.42).

Рис. 4.42

5. Последнее окно сообщает, что установка завершена (Installation Complete). Можно нажимать Close.

Программа установилась. Теперь можете запускать ее из стартового меню «Пуск», там появился необходимый ярлык.

Вам будет полезно заглянуть в папку Мой калькулятор в папке Program Files, куда установилась ваша программа, и обнаружить там запускающий файл Калькулятор.exe и графический файл Earth.JPG.

Инсталляция на другом компьютере.

Чтобы установить вашу программу на другом компьютере, скопируйте любым способом инсталляционный файл Мой калькулятор.msi на диск этого компьютера и запустите его там (скопировать вы можете, например, при помощи сети или дискеты, или CD-RW).

Проблема на сегодняшний день (начало 2005) состоит в том, что далеко не на каждом компьютере инсталляция может успешно осуществиться. Однако эта проблема должна уйти в прошлое, как только .NET Framework станет стандартной составной частью Windows.



Усложняем проект


Закройте проект ошибок. Скопируйте папку проекта «Красим форму» тут же, рядышком с собой внутри папки Visual Studio Projects. Переименуйте как-нибудь скопированную папку, например, «Красим форму 1». Над копией будем продолжать работу. Откройте проект из этой папки. Это можно сделать в Windows двойным щелчком по файлу проекта или решения. Обратите внимание, что от изменения названия папки имя проекта не изменилось.

Усложним проект. Пусть при щелчке по кнопке Button1 происходит что-нибудь еще, кроме изменения ширины полосы прокрутки, а именно три вещи:

В текстовом поле TextBox1 появляется текст  Ширина полосы = 100 

Исчезает второй элемент переключателя (RadioButton2).

Вторая кнопка (Button2) окрашивается в желтый цвет.

Для этого достаточно в процедуру добавить 3 оператора. Начнем по порядку.

Меняем текст в TextBox1. У текстового поля TextBox1 есть свойство Text, значением которого является текст в этом поле. Поэтому добавим в процедуру оператор

TextBox1.Text  =  "Ширина полосы = 100"

Запомните: В окне кода значение свойства Text для текстового поля и других объектов должно браться в двойные кавычки.

Привыкайте к похожим обозначениям в VB разных вещей (у нас это TextBox1 и Text) и будьте внимательны. Наш оператор можно перевести так: Содержимое текстового поля TextBox1 сделать таким –  Ширина полосы = 100.

Не думайте, что смысл слов  Ширина полосы = 100 что-то значит для компьютера. Во-первых, он по-русски не понимает, а во-вторых, что бы ни было написано внутри двойных кавычек, он в это не вдумывается и как приказ не воспринимает, а просто воспроизводит в текстовом поле. Чтобы проверить, можете написать внутри кавычек любую абракадабру и запустить проект.

Вот что у нас должно получиться:

Public Class Form1

    Inherits System.Windows.Forms.Form

Windows Form Designer generated code

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        HScrollBar1.Width = 100

        TextBox1.Text = "Ширина полосы = 100"


    End Sub

End Class

Для экономии места по вертикали я стер здесь пустые строки. И вам тоже не возбраняется.

Запустим проект. Нажмем кнопку Button1. При щелчке по кнопке Button1 VB выполнит по порядку все операторы процедуры между строками Private Sub Button1… и End Sub. Убедимся, что оба оператора выполнились. Поскольку компьютер работает очень быстро, нам будет казаться, что оба оператора выполнились одновременно. Но это не так: сначала поменялась ширина полосы прокрутки, а уж затем текст в текстовом поле.

Измените вручную текст в текстовом поле. Снова нажмите кнопку Button1. Что произошло? Завершите выполнение проекта.

Исчезает RadioButton2. Для исчезновения элемента RadioButton2 достаточно дописать в процедуру такой оператор:

RadioButton2.Hide()

Пояснение: Кроме свойств, объекты обладают и так называемыми методами. Метод  – это то, что данный объект умеет делать. Вспомним пример с игрушечной железной дорогой. Там были объекты: паровозы, светофоры, стрелочники и т.п. У паровоза могут быть такие методы: ехать, гудеть, выпускать пар … У светофора – зажигать красный, зажигать зеленый … У стрелочника – переводить стрелку, петь песни … Команды паровозу и стрелочнику могли бы звучать так:

Паровоз . гуди

Стрелочник . переводи стрелку

Поскольку «Hide» по-английски означает «прятаться», то оператор  RadioButton2.Hide() означает не что иное, как приказ элементу RadioButton2 спрятаться, сделаться невидимым. Говорят, что выполнился метод Hide объекта RadioButton2. На скобки ( ) пока внимания не обращаем. О них позже.

Многие методы называют функциями. Но и об этом тоже позже.

Запишите оператор, запустите проект, проверьте его работу.

Красим Button2. Теперь нам нужно покрасить кнопку Button2 в желтый цвет. Приведу аналогию. Чтобы покрасить в желтый цвет газету, мы бы написали так:

Газета . цвет = желтый

Однако это было бы неточно, так как слово «желтый» может иметь переносный смысл – «желтая пресса». Поэтому лучше было бы написать так:

Газета . цвет бумаги = желтый



Однако и это было бы неточно, так как желтая краска из разных коробочек с красками может иметь разные оттенки. Поэтому лучше было бы написать так:

Газета . цвет бумаги = Коробка №5 . желтый

Теперь не спутаешь.

Компьютер тем более требует точности, поэтому нужный нам оператор мы пишем так:

Button2.BackColor = Color.Yellow

Пояснение: Здесь BackColor – свойство объекта Button2. Оно означает цвет поверхности кнопки. (А есть еще, например,  ForeColor – цвет букв на кнопке.) Слово Yellow переводится «желтый». А слово Color, которое стоит перед ним – не что иное, как название «коробки с красками». Не путайте близкие по написанию, но абсолютно разные по смыслу слова: Color и  BackColor. А также пусть не обманывает вас их буквальный перевод с английского. Не спрашивайте также меня, что значит с точки зрения VB «коробка с красками». Завтра, завтра, не сегодня!

Вот как теперь выглядит ваша процедура:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

      HScrollBar1.Width

= 100

      TextBox1.Text

= "Ширина полосы = 100"

      RadioButton2.Hide()

      Button2.BackColor

= Color.Yellow

End Sub

Запустите проект, нажмите кнопку Button1. Вы должны увидеть такую картинку (Рис. 1.20).



Рис. 1.20


Вглубь пространства имен


Аналогия. До сих пор все, что мы достигали в VB, нам удавалось легко. Захотели укоротить полосу прокрутки – раз! – и коротенькой строкой кода это сделали. Захотели спрятать элемент переключателя – раз! – и сделали это строкой, состоящей вообще из двух слов. Вам достаточно было знать простое название «инструмента», которым вы добивались цели – Width, Hide и т.д.

Но не все в VB делается так просто.

Помните сказку, где Ивану-царевичу нужно было разделаться с Кащеем Бессмертным? Для этого ему надо было переломить иглу. Но добраться до этой иглы было довольно трудно, потому что игла-то – в яйце, а яйцо – в утке, а утка – в зайце, а заяц – в ларце. Если ларец у вас в руках и вы знаете устройство этой «матрешки», тогда – другое дело. Вернее, полдела. Полдела, но не все дело. Потому что заяц из ларца выпрыгнет – его надо догнать, утка из зайца выскочит, да в небо – ее надо подстрелить и т.п. В общем – морока. Так ведь и не зря же! Через эту мороку мы многое поймем в программировании на VB.

Если вы хотите в VB что-нибудь совершить какой-нибудь заковыристой «иглой», то, чтобы ее найти, вам нужно будет проделать весь путь вглубь «ларца». Мы уже отчасти столкнулись с этой ситуацией, когда в поисках «иглы» Yellow  вместо простого

Button2.BackColor = Yellow

нам пришлось писать более сложное

Button2.BackColor = Color.Yellow.

Здесь дополнительное слово Color – и есть то «яйцо», в котором находилась «игла» Yellow. Правда, «утку» и прочее VB нам простил, не потребовал. Но не всегда он бывает таким добрым. Нам нужно точно знать, как добраться до нужной «иголки». А также, когда нас прощают, а когда нет. И об этом наш разговор.

Вглубь ларца. При программировании для платформы .NET «ларцом» является как раз упомянутая Библиотека классов .NET Framework. Открыв крышку этого ларца, мы увидим внутри два других ларца. Они называются пространствами имен. (не будем пока вникать в буквальный смысл этого названия, ибо сказано: «Хоть горшком назови, только в печь не сажай!»). У каждого пространства имен есть свое имя. Одно из двух упомянутых называется System, а другое – Microsoft. Каждое из них – настоящая кладовая возможностей!

Создайте новый проект. Проделаем сейчас весь путь вглубь наших ларцов.

Чтобы узнать, что находится внутри у пространств имен System и Microsoft, достаточно написать их имя с точкой. Создайте кнопку, дважды щелкните по ней. В получившейся заготовке процедуры мы и будем пробовать что-нибудь написать.



View


Это меню нужно в основном для того, чтобы показывать окна и панели инструментов, и состоит главным образом из названий этих окон и панелей. Щелчок по нужному пункту – и окно или панель появляется на экране.



Вкладка Команды (окно диалога Настройка)


Позволяет добавлять или изменять элементы управления в строке меню или панели инструментов. Допускается также изменение изображения кнопок и текста добавленных пользователем команд.

Параметры вкладки

Категории Отображает список различных категорий команд.

Команды Отображает список элементов управления, доступных для категории, выбранной в списке категорий. Допускается перетаскивание команды с помощью мыши в нужную панель инструментов. Для добавления команды в меню следует перетащить ее на соответствующий заголовок меню, а затем в нужное место раскрывшегося меню.

Описание Отображает краткую справку для выделенного элемента управления.

Изменить выделенный объект Позволяет изменить выделенную команду.

Сброс - Восстанавливает состояние команды по умолчанию.

Удалить - Удаляет команду.

Имя - Изменяет имя элемента управления. Клавиша быстрого вызова задается с помощью символа амперсант (&).

Копировать значок на кнопке - Копирует изображение кнопки в буфер обмена.

Вставить значок на кнопке - Вставляет изображение кнопки из буфера обмена.

Восстановить значок на кнопке - Восстанавливает заданное по умолчанию изображение кнопки.

Изменить значок на кнопке - Отображает окно диалога Редактор кнопок.

Выбрать значок для кнопки - Отображает список значков, из которого следует выбрать новое изображение кнопки.

Основной стиль - Для кнопок панели инструментов отображать только значок, для команд меню - значок и имя.

Только текст (всегда) - Отображать только имя команды.

Только текст (в меню) - Скрывает значок (если есть) для команды меню. Для кнопок панели инструментов не работает.

Значок и текст - Отображает значок и имя для панелей инструментов. Для команд меню не работает.

Начать группу - Для панелей инструментов перед элементом управления помещает разделитель. Запрещена, если элемент управления находится в самом начале панели инструментов.

|



Вкладка Панели инструментов (окно диалога Настройка)


Позволяет создавать, переименовывать, удалять или сбрасывать панели инструментов.

Параметры вкладки

Список Панели инструментов Отображает список встроенных в Visual Basic панелей инструментов, а также созданных пользователем. Если панель инструментов отображена, рядом с ней появляется отметка.

Примечание. Строку меню скрыть невозможно. Ее можно только сбросить.

Создать Отображает окно диалога Создание панели инструментов для ввода в поле Панель инструментов имени новой панели инструментов.

Переименовать Отображает окно диалога Переименование панели для ввода нового имени панели инструментов. Команда доступна только для панелей, определенных пользователем.

Удалить Удаляет определенную пользователем панель управления из текущего проекта. Команда доступна только для панелей, определенных пользователем.

Сброс Отменяет любые изменения, внесенные во встроенные панели инструментов и восстанавливает их первоначальное состояние. Команда доступна только для встроенных панелей.



Вкладка Параметры (окно диалога Настройка)


Позволяет изменять внешний вид строки меню и панелей инструментов.

Параметры вкладки

Крупные значки Делает значки панели инструментов крупными.

Отображать подсказки для кнопок Включает и выключает режим отображения подсказки для кнопок.

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

Эффект при выводе меню Отображает список доступных эффектов анимации, применимых к меню.



Второй этап – создание инсталляционного пакета


Итак, у нас имеется проект Калькулятор, готовый к тому, чтобы из него можно было создавать инсталляционный пакет. В среде VS инсталляционный пакет создается так. Прежде всего создается некий новый проект особого типа, который будет инструментом для получения из проекта Калькулятор инсталляционного пакета. Затем программист производит в этом новом проекте определенные действия по настройке будущего инсталляционного пакета. Затем этот новый проект компилируется обычным образом. Результатом компиляции и является инсталляционный пакет.

Рассмотрим эти шаги по порядку.

Создаем инсталляционный проект. Запустите VS. Затем File ® New ® Project ® в левом поле окна создания проекта (Рис. 4.30) выберите Setup and Deployment Projects, а в правом – Setup Project  ® придумайте название для инсталляционного проекта, например, Мой калькулятор.® OK.

Рис. 4.30

Инсталляционный проект и решение созданы. Инструмент создан (Рис. 4.31).

Рис. 4.31

Если бы вы собирались инсталлировать Web-приложения, то вам нужно было бы выбрать Web Setup Project.

Добавляем нужный проект. Теперь инструменту нужно объяснить, над чем он должен трудиться, чтобы получить инсталляционный пакет. Этим «предметом труда» и будет как раз наш проект Калькулятор. Нужно просто добавить проект Калькулятор в решение. Делается это привычным образом: File ® Add  Project ® Existing Project ®

Таким образом, наше решение теперь состоит из двух проектов: инсталляционного проекта Мой калькулятор и самого проекта Калькулятор (Рис. 4.32). Очевидно, эти проекты не могут иметь одинаковые имена, иначе VB спутается. Более подробно о нескольких проектах в решении и о Solution Explorer написано в 21.3.

Рис. 4.32

Определяем содержание будущей инсталляции. Следующий шаг. Выделите в Solution Explorer проект Мой калькулятор. Далее: Project ® Add ® Project Output. Перед вами возникнет окно (Рис. 4.33).

Рис. 4.33

Проследите, чтобы вся информация в полях окна была такая же, как на рисунке. В этом окне мы указываем, что инсталляционный пакет нужно создавать именно для проекта Калькулятор (верхнее поле), и определяем содержание работы инсталляционного пакета (список в центре окна). Выделенный элемент Primary output означает, что результатом инсталляции будет то главное, что требуется, а именно: исполняемый файл приложения (exe) или библиотека (dll).  Однако результатом инсталляции могут быть и другие, вспомогательные объекты, например, файлы с исходным кодом программы. При необходимости вы можете выделить в списке все элементы, но сейчас нам достаточно Primary output.


Нажмите ОК. В окне  Solution Explorer проект Мой калькулятор начал наполняться содержанием (Рис. 4.34).



Рис. 4.34

Окно File System. Поговорим о структуре окна File System нашего инсталляционного проекта Мой калькулятор, которое вы видите на рисунке. Оно позволяет производить определенную настройку инсталляции. В его левой панели вы видите схематическое изображение некоторых (имеющих отношение к инсталляции) элементов файловой системы компьютера, на который будет устанавливаться приложение. Вот смысл этих элементов:

File System on Target Machine

Файловая система компьютера, на который будет устанавливаться приложение

Application Folder

Папка приложения

User’s Desktop

Рабочий стол пользователя

User’s Programs Menu

Программы в стартовом меню пользователя

В правой панели вы видите содержимое выделенного элемента левой панели. Пока внутри двух последних элементов пусто.

Убираем производителя. Займемся настройкой папки приложения. Выделите элемент Application Folder и зайдите в окно свойств. Значением свойства DefaultLocation (Расположение по умолчанию) является некая условная схема:

[ProgramFilesFolder][Manufacturer]\[ProductName]

Она означает, что файлы инсталлируемого приложения по умолчанию располагаются на компьютере в папке с названием этого приложения (ProductName), которая располагается внутри папки с именем производителя приложения (Manufacturer) , которая располагается внутри папки Program Files. Вы можете оставить все как есть, а можете, если знаете механику этой схемы, что-то изменить. Давайте, например, выкинем производителя. Получится вот что:

[ProgramFilesFolder]\[ProductName]

Ярлык в меню «Пуск».Теперь позаботимся о том, чтобы в стартовом меню пользователя оказался ярлык нашего приложения, иначе пользователь не сможет запускать наше приложение из стартового меню. Для этого, выделив в левой панели элемент Application Folder, щелкните правой клавишей мыши по элементу Primary output в правой панели и в контекстном меню выберите Create Shortcut to Primary output. Ярлык с длинным названием добавляется в папку приложения (Рис. 4.35).





Рис. 4.35

Там ему делать нечего, перетащите его в папку User’s Programs Menu, а там переименуйте во что-нибудь более удобоваримое и короткое, например, в Калькулятор.

Добавляем файлы в папку приложения. Если в коде вашего проекта Калькулятор есть ссылки на какие-нибудь внешние файлы, о чем я говорил в предыдущем подразделе, то эти файлы должны быть включены в инсталляционный пакет. Пусть в коде проекта Калькулятор есть такой оператор:

Кл_деления.Image = Image.FromFile("Earth.JPG")

Это значит, что в папке BIN внутри папки проекта Калькулятор имеется графический файл Earth.JPG, которым проект пользуется во время работы. Этот файл необходимо включить в инсталляционный пакет. Для этого выделяем в Solution Explorer проект Мой калькулятор, затем Project ® Add ® File ® находим на диске файл и делаем по нему двойной щелчок.  Файл оказывается в папке приложения (Рис. 4.36). После инсталляции на компьютер пользователя он окажется там тоже в папке приложения.



Рис. 4.36

Добавляем файлы в другие папки. Если вы хотите, то можете сделать так, чтобы при инсталляции какие-то другие нужные вам файлы добавлялись не в папку приложения, а в другие папки на компьютере пользователя. Щелкните правой клавишей мыши по элементу File System on Target Machine и в контекстном меню выберите одну из предложенных папок, например, Windows Folder. Она появится в окне File System рядом с другими (Рис. 4.37).

 


Рис. 4.37

Теперь добавьте в папку приложения несколько нужных вам файлов, а затем перетащите их оттуда в папку Windows Folder. После инсталляции они появятся на компьютере пользователя в папке Windows (чего я делать, в общем, не рекомендую).

Значок приложения. Если вы хотите, чтобы запускающий файл вашего приложения имел значок, отличающийся от надоевшего стандартного значка запускающих файлов, проделайте следующее. Щелкните правой клавишей мыши в окне Solution Explorer по проекту Калькулятор и в контекстном меню выберите Properties. В появившемся окне свойств (Рис. 4.38) выберите Build. Нажав на кнопку с троеточием, выберите подходящую пиктограмму. Затем ОК.





Рис. 4.38

Это не значит, что на панели задач ваше приложение будет иметь этот значок. Для этого нужно, как написано в 3.4.3, установить соответствующим образом свойство Icon формы.

Настраиваем конфигурацию. Ваши действия: Build ® Configuration Manager. Появляется окно (Рис. 4.39).



Рис. 4.39

Проекты могут иметь конфигурацию Debug, удобную для отладки, а могут иметь конфигурацию Release, необходимую, когда уже все отлажено и приложение выпускается (Release) в большой свет. Нам отлаживать уже ничего не надо, поэтому в верхнем списке выбираем Release. Все должно быть как на рисунке. Нажмите Close.

Компиляция. Основные необходимые настройки мы сделали. Завершающий аккорд – компиляция инсталляционного пакета. Для этого – Build ® Build Solution. Некоторое время компьютер компилирует (причем компилируются оба проекта), в окне Output появляются сообщения, наконец в строке состояния возникает сообщение Build Succeeded. Это значит, что создание инсталляционного пакета успешно завершено.

Где же он – наш инсталляционный пакет? Выйдем из VS в Windows. Заглянем в папку проекта Мой калькулятор. Там появилась папка Release. В ней вы видите среди других файлов файл Мой калькулятор.msi. Этот файл и есть наш инсталляционный пакет.


Второй способ – Imports


И все же хотелось бы быть еще лаконичнее. Оператор Imports позволяет опускать имена не только пространств имен, но и объектов, в них входящих: классов, модулей (не путать с абсолютной величиной), структур, перечислений. Поставим задачу опустить в нашей программе имена классов  Debug и Math. Для этого самой верхней строкой в окне кода вы должны записать оператор Imports:

Imports   System.Diagnostics.Debug ,  System.Math

После слова Imports через запятую перечисляются имена объектов (в нашем случае классов  Debug и Math) с обязательным указанием пространств имен, в которые они входят. Вот как теперь будет выглядеть наше окно кода (для краткости я оставил в процедуре только две строки):

Imports

System.Diagnostics.Debug, System.Math

Public Class Form1

    Inherits System.Windows.Forms.Form

Windows Form Designer generated code

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        WriteLine(3 + 2)

        WriteLine(Abs(-20))

    End Sub

End Class

Как видите, теперь вместо Debug.WriteLine вы можете писать WriteLine, а вместо Math.Abs –  просто Abs.

А как же теперь с двусмысленностями, когда объекты с одинаковыми именами входят в разные пространства имен? В этом случае отказывайтесь от Imports или пользуйтесь его дополнительными возможностями, на которых я не останавливаюсь.

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



это новый мощный язык программирования,


Visual Basic .NET – это новый мощный язык программирования, созданный корпорацией Microsoft в начале тысячелетия. Сохранив во многом внешнюю простоту своего предшественника – языка Visual Basic 6.0 – он радикально обогатил и усложнил свое внутреннее содержание, предоставив программисту огромное количество новеньких, с иголочки, инструментов. Самый главный из них – настоящее, полноценное объектно-ориентированное программирование.
Visual Basic .NET конечно же по-прежнему чрезвычайно силен во всех областях традиционного программирования для обычных настольных компьютеров, то есть там, где был силен и Visual Basic 6.0. Но, откликаясь на веление времени, он приобрел и новую направленность – программирование в сетях. Теперь он позволяет удобно и легко писать программы для локальных сетей и Интернета, для карманных компьютеров и даже для мобильных телефонов.
Visual Basic .NET – это производительное и надежное оружие в руках профессионального программиста. К тому же очень удобное и, несмотря на мощь, достаточно простое. Поэтому Visual Basic .NET более других профессиональных языков подходит для освоения начинающими программистами. На написание программы уходит минимум времени. Изучив эту книгу, вы сможете быстро писать такие, например, приложения, как собственные калькулятор или проигрыватель MP3-файлов, шифровщик секретных сообщений или будильник, веб-браузер или простенькая игра…. Приложив же достаточные усилия, вы сможете создавать вполне солидные продукты, такие, например, как система управления базами данных, графический редактор или сложная, красивая игра, которую не стыдно опубликовать в Интернете.
В дальнейшем для краткости я часто буду обозначать Visual Basic .NET как VB. Иногда, впрочем, я буду писать Visual Basic или даже просто
Бейсик.

Вывод сообщений – MsgBox


Можно заставить компьютер в любой момент выполнения программы выводить нам какое-нибудь сообщение. Поместите внутрь какой-нибудь процедуры (пусть это будет процедура сложения) такой новый для нас оператор:

MsgBox ("Привет всем!")

Теперь каждый раз, как вы нажимаете на клавишу сложения, вы увидите на экране такое окно сообщения:

Прочитав сообщение, щелкните ОК. Не щелкнув, вы не сможете продолжать работать с проектом. Окно сообщения специально сделано таким назойливым, чтобы программист вынужден был обратить на него внимание и прочитать, что там написано. Для этого писать туда нужно действительно важные вещи.

Вскоре мы дадим окну сообщения реальное дело. А сейчас мы с ним только познакомились.



Какие главные моменты нужно вывести


Какие главные моменты нужно вывести из рассмотрения этих двух примеров? Их два:
1. Библиотека классов .NET Framework включает в себя  колоссальное количество объектов, их свойств, методов и других элементов. До всех них можно добраться рассмотренным выше способом.
2. Разберемся в строении двух написанных операторов. Каждый из них состоит из трех частей, разделенных точками. Пойдем справа налево:
Крайняя правая часть – это свойство или метод со скобками или без.
Левее через точку идет объект – «хозяин» этого метода или свойства.
И самая левая часть – одно или несколько пространств имен, разделенных точками.
Запомните эту простейшую архитектуру. Скоро мы будем ее и укорачивать и разнообразить.
Пространство имен можно называть так: «Пространство имен Diagnostics, находящееся в пространстве имен System». А можно называть короче: «Пространство имен System.Diagnostics». Говорят еще так: «Сработал метод WriteLine объекта Debug из пространства имен System.Diagnostics».
Еще точки. Чтобы перед нами развернулся список, нам нужно начинать запись со слов System или Microsoft или с известного нам имени объекта, который входит в упомянутые пространства имен. А еще с чего? В 1.3 мы начинали запись с имени элемента управления, который уже находится на вашей форме, например, Button1. И с «местоимения» формы Me. Можно начинать и с имени проекта, но это нам пока не нужно.
Доберемся «по всем правилам» до желтого цвета. Добавьте в процедуру следующую строку:                
      Button1.BackColor = System.Drawing.Color.Yellow
В процессе ее ввода вы уяснили, что Color – это, оказывается, объект пространства имен System.Drawing, а  Yellow – его свойство. А раньше мы писали короче. Когда можно писать короче, рассказано в следующем разделе.
Не вся библиотека классов .NET Framework в настоящий момент подключена к вашему проекту. Сделано это из экономии. Если у вас уже есть опыт и вы точно знаете, чего именно вам не хватает, вы можете быстро подключить дополнительные пространства имен из этой библиотеки (см. 21.3.1).
В дальнейшем вы увидите, что свойства и методы сами могут «быть объектами», тогда после них тоже можно ставить точку, и так до бесконечности.

Window


Здесь нам интересен пункт Split. Он позволяет смотреть на ваш код через два окна, а не через одно, что бывает удобно, когда кода много. Пусть в вашем коде содержится несколько десятков процедур. Все они, естественно, не умещаются в поле зрения и, чтобы увидеть, например, нижнюю процедуру, вам приходится окно кода прокручивать. Но тогда из поля зрения уходят верхние процедуры. Пусть вам нужно держать в поле зрения самую верхнюю и самую нижнюю процедуры одновременно. Для этого пункт Split делит окно кода на два окна, расположенных одно под другим (Рис. 4.27). В них вы видите один и тот же код, точно так же, как через два окна в вашей квартире вы видите один и тот же двор. Если вы поменяете текст кода в одном окне, вы сможете увидеть эти изменения и в другом. Каждое окно вы можете прокручивать независимо и поэтому в поле зрения направлять любой участок кода.

Чтобы снова превратить два окна кода в одно, еще раз щелкните по этому пункту (который на этот раз будет именоваться Remove Split).

Есть более быстрый способ делить окно на два и вновь соединять. Поставьте мышь в область, помеченную на Рис. 4.26 овалом.

Рис. 4.26

Мышь изменит свою форму. Тащите ее вниз. Два окна получены (Рис. 4.27).

Рис. 4.27

Чтобы вновь слить окна, таким же движением задвиньте мышь наверх.



Задание на проект «Калькулятор»


В Глава 1.  мы с вами ничего путного не создали, зато прошли с начала до конца весь путь создания проекта на VB.

Сейчас мы поставим перед собой задачу сделать реальную вещь – калькулятор. Примерно такой же, какой имеется в Windows. Если вы его забыли, то в Windows (а отнюдь не в VS), выполните такие действия: Пуск ® Программы ® Стандартные ® Калькулятор. Посчитайте в нем что-нибудь. Как по вашему – много сил затратила фирма Microsoft на его создание? Калькулятор, который создадим мы, в смысле математики будет попроще, зато он будет красивым, снабжен музыкой, паролем и разными другими шутками.

Начнем с того, что придумаем нашему калькулятору внешний вид (пока скромный) – см. Рис. 3.1.

Рис. 3.1

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



Запись нескольких операторов в одной строке


VB допускает писать в одной строке несколько операторов, разделяя их двоеточиями. Например, вместо

Button1.Width = 200

Button2.Width = 100

Button3.Width = 140

можно написать вот так:

Button1.Width = 200  :  Button2.Width = 100  :  Button3.Width = 140

Это приятно экономит место по вертикали экрана.



Запускаем наши программы без VS


В Windows вы привыкли запускать игры и другие программы двумя способами: щелкнув по значку программы на рабочем столе Windows (или в папке или в проводнике) или выбрав программу в стартовом меню на панели задач. Созданные нами в VB приложения запускаются пока только из среды VS, что, возможно, уязвляет вашу гордость. Попробуем запустить их, как независимые программы, то есть без запуска VS.

Завершите работу VS. Находясь в Windows, зайдите (при помощи проводника или из значка Мой компьютер) в папку вашего проекта, например, Калькулятор. Там вы увидите несколько файлов и папок, созданных компьютером. Зайдите в папку BIN. Там вы увидите файл Калькулятор.exe. Это и есть программа вашего калькулятора, которая может запускаться без запуска VS. Запустите ее щелчком (или двойным щелчком). Она работает. Вы можете ее скопировать куда угодно или создать для нее ярлык где угодно в компьютере.

Как попал запускающий файл Калькулятор.exe в папку BIN? Когда мы запускали наш проект в VS, проект автоматически компилировался и откомпилированный файл Калькулятор.exe записывался в эту папку. Можно добиться того же и без запуска: Build  ® Build Solution.

Однако, если вы попытаетесь скопировать ваш Калькулятор.exe на другой компьютер и там его запустить, то вас может ждать неудача. Здесь могут понадобиться более сложные действия, чем я описал (см.4.6).



Запускаем Visual Studio NET


Как я уже писал во введении, VB входит в состав единой программы, которая называется среда программирования Visual Studio.NET и обеспечивает программисту возможность удобной разработки программ на VB и некоторых других языках. Поэтому, чтобы программировать на VB, вам нужно запустить Visual Studio.NET. Английские слова «Visual Studio» можно вольно перевести, как «Визуальная студия», то есть то место, где художник (программист) может творить свои произведения (программы) визуально (имеется в виду 1 этап – сборка вручную).

В дальнейшем вместо слов «Visual Studio .NET» я часто для краткости  буду писать VS. Не путайте VS и VB. Когда я пишу VB, я имею в виду язык программирования, все то, что связано с самой программой, с правилами написания программного текста и его смыслом. Когда я пишу VS, я имею в виду среду программирования, то есть все то, что создает удобства и возможности программирования, загрузки, сохранения программ, их просмотра и настройки взаимодействия. Аналогии: VB – это бифштекс, VS – ресторан и официанты; VB – это мозг, VS – это тело; VB – это программа, VS – это компьютер. Однако, надо признаться, что не всегда удается четко сказать, где кончается VS и начинается VB.

Если VS у вас на компьютере не установлена, читайте 4.1, а если установлена, то запускайте ее следующим образом:

Нажмите на панели задач Windows кнопку «Пуск» (Start), в появившемся меню выберите «Программы» (Programs), затем в появившемся меню – Microsoft Visual Studio.NET,  а затем в появившемся меню – снова Microsoft Visual Studio.NET. (В дальнейшем вместо словесного описания щелчков мыши в меню я для краткости буду писать так: Пуск ® Программы ® Microsoft Visual Studio .NET ® Microsoft Visual Studio .NET).

Если вы впервые запускаете VS, то в результате запуска на экране появляется главное окно VS со стартовой страницей (Start Page). Если у вас установлена Visual Studio .NET 2003, то окно имеет примерно такой вид, как на Рис. 1.1.

Рис. 1.1

Если у вас установлена Visual Studio .NET, то окно имеет примерно такой вид, как на Рис. 1.2. Разница между окнами чисто внешняя.

Рис. 1.2

Если вы запускаете VS не впервые, то в главном окне может и не быть стартовой страницы или она может иметь несколько другой вид. Сейчас это не важно, стартовая страница нам пока не понадобится. В любом случае вы можете почитать о ней в 4.3.

В заголовке окна вы видите слова Microsoft Development Environment, что означает «Среда разработки программ фирмы Microsoft». Смысл этих слов такой же, что и у слов «Visual Studio».



Заставляем меню работать


Каждый пункт меню – это объект. Чтобы убедиться в этом, щелкните в режиме проектирования по пункту «Прозрачный» и загляните в окно свойств. Вы видите, что у пункта меню есть свойства, как и у других объектов. Замените его имя (Name) на Menu_Прозрачный. Это для того, чтобы им было удобнее пользоваться при программировании.

Теперь сделайте по пункту «Прозрачный» не одиночный, а двойной щелчок мышью. В окне кода возникнет заготовка процедуры, которая будет выполняться при выборе этого пункта меню:

Private Sub Menu_Прозрачный_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Menu_Прозрачный.Click

End Sub

Слова  Menu_Прозрачный.Click  в правой части заголовка  означают, что речь идет о щелчке (Click) мыши по пункту Menu_Прозрачный. Остается написать код для выполняемого действия:

Private Sub Menu_Прозрачный_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Menu_Прозрачный.Click

        Me.Opacity = 0.7

End Sub

Здесь словом Me обозначена форма, Opacity – ее свойство непрозрачности (см. 3.4.3). Число  0.7  обозначает величину 70%.

Запустите проект, проверьте работу этого пункта меню.

Аналогично организуем работу остальных 3 пунктов меню. Сначала дайте им имена:   Menu_Желтый,   Menu_Белый,   Menu_О_программе. Затем запрограммируйте их действия в окне кода:

Private Sub Menu_Желтый_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Menu_Желтый.Click

        Число1.BackColor = Color.Yellow

        Число2.BackColor = Color.Yellow

        Результат.BackColor = Color.Yellow

End Sub

Private Sub Menu_Белый_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Menu_Белый.Click

        Число1.BackColor = Color.White

        Число2.BackColor = Color.White

        Результат.BackColor = Color.White

End Sub

Private Sub Menu_О_программе_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Menu_О_программе.Click

        MsgBox("Калькулятор создан в 2003 году")

End Sub

В первых двух процедурах речь идет о цвете трех текстовых полей: Число1,  Число2,  Результат. В операторах все привычно (см. 1.3.9). В последней процедуре создается окно сообщения (см. 3.7).

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

Если вам не хочется щелкать по меню мышкой, вы можете для каждого пункта меню выбрать комбинацию клавиш клавиатуры с тем же действием. Эта комбинация называется Shortcut и выбирается установкой одноименного свойства пункта меню в режиме проектирования в окне свойств.

Средствами VB можно создавать, преобразовывать и уничтожать меню, причем не только в режиме проектирования, но и в режиме работы. Но на этом я не буду останавливаться. Кроме обычных меню VB умеет создавать и контекстные меню (как это делать, рассказано в 18.9).



Значки, использующиеся в окне просмотра объектов и в окне модуля


Окно просмотра объектов и окно модуля содержат большое число значков, представляющих классы и их компоненты. Следующий список поясняет их значения.

Этот значок:

Представляет:

Свойство

Свойство по умолчанию

Метод

Метод по умолчанию

Событие

Константу

Модуль

Класс

Определяемый пользователем тип

Глобальный объект

Библиотеку

Проект

Встроенные ключевые слова и типы

Перечислимый тип



Знакомимся с некоторыми объектами


Для тренировки и для полезного знакомства с некоторыми функциями вам надлежит записать в процедуру еще несколько строк. Но сначала разберитесь в пояснениях, приведенных ниже, а уж потом записывайте. Вот как должна выглядеть процедура:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Debug.WriteLine(10 - 2 * 2 + 30 / 3)

        Dim a = 4 - 3

        Debug.WriteLine(a)

        Debug.WriteLine(a + 1000)

        Debug.WriteLine("Привет всем!")

        Dim b = System.Math.Abs(-20)

        Debug.WriteLine(b)

        Debug.WriteLine(System.Math.Abs(-20))

        Debug.WriteLine(Math.Abs(-20))

        Debug.Write(Microsoft.VisualBasic.Strings.Len("Мир"))

        Debug.Write(Strings.Len("Мир"))

        Debug.Write(Len("Мир"))

        Debug.WriteLine(Len("Война") + Math.Abs(-80) + a + 1)

End Sub

Когда вы запустите проект и нажмете кнопку, в окне Output вы увидите следующий результат:

16

1

1001

Привет всем!

20

20

20

33387

Перед тем, как вы перейдете к чтению пояснений, прочтите очень полезный совет по работе над программами:

Когда вы проверяете, как работает программа из книжки (например, только что приведенная) или как работает программа, созданная вами, никогда не вводите всю программу целиком, чтобы потом запустить ее и посмотреть, как она целиком работает.  Вводите и запускайте понемножку.

Причина вот в чем. Каждый программист, даже самый опытный, при вводе программного текста допускает ошибки и просто описки. И большим грехом это не считает. На 100 строк программы ошибок 5-10 – это норма. Не все эти ошибки VB обнаружит. Поэтому, хотите вы этого или нет, запускать на выполнение вам придется программу ошибочную. Когда вы получите результаты работы ошибочной программы, они тоже, конечно, будут ошибочными. И вам, глядя на эти результаты, предстоит догадываться, в чем ошибки состоят. Трудно искать ошибки в длинной программе, да еще когда их там несколько!


Делайте так. Ввели первые две- три строки программы, запустили проект, посмотрели результаты, проверили, правильные ли они или хотя бы правдоподобные ли. Если все в порядке, вы можете быть спокойны: в этих строках ошибок скорее всего нет. Добавили к ним следующие две-три строки, снова запустили проект, проверили. И так далее. Каждый раз, натыкаясь на ошибочный результат, вы можете быть почти уверены, что причина его – в последних 2-3 строках программы.

Еще одна причина: так легче изучать материал из книжки. Чтобы не сломать зубы о гранит науки, от него нужно откусывать понемножку.

Учитывая все это, переходите к чтению пояснений, параллельно вводя по одной строчке кода и запуская проект.

Пояснения к первым 5 строкам:

        Debug.WriteLine(10 - 2 * 2 + 30 / 3)

Этот оператор выводит первое число (16). После слова WriteLine

вы обязаны поставить скобки и в скобках указать, что именно вы хотите вывести. Здесь звездочка  *  обозначает умножение, а косая черта  /

 (slash) – деление. Таким образом, в скобках, стоящих за именем метода WriteLine, можно писать любое арифметическое выражение.

        Dim a = 4 - 3

Здесь мы объявляем (Dim) переменную величину a и задаем ей значение 4-3 = 1.

        Debug.WriteLine(a)

Значение a, равное 1, выводится в окно Output. Таким образом, в скобках, стоящих за именем метода WriteLine, можно писать переменные величины

        Debug.WriteLine(a + 1000)

и любые арифметические выражения, содержащие переменные величины,

        Debug.WriteLine("Привет всем!")

а также любую строку символов, взятую в двойные кавычки.

Поясняю математические функции

        Dim b = System.Math.Abs(-20)

Здесь мы объявляем переменную b и присваиваем ей модуль[†] числа ?20. Как мы это делаем? Модуль есть математическая функция и чтобы компьютер нам ее вычислил, нам нужно в VB найти соответствующий инструмент. Пишем после знака равенства название пространства имен System, затем точку и в развернувшемся списке выбираем класс Math. Он предназначен для того, чтобы снабжать нас различными математическими функциями. Затем снова пишем точку и в развернувшемся списке выбираем метод Abs этого класса. Он-то как раз и вычисляет модуль. В скобках после него пишем  ?20[‡]. Напоминаю, что многие методы называются функциями, так как сообщают нам какое-нибудь число или другую информацию.



        Debug.WriteLine(b)

Значение b, равное 20, выводится в окно Output.

        Debug.WriteLine(System.Math.Abs(-20))

Этот оператор тоже выводит в окно Output число 20, то есть делает то, что предыдущие два оператора вместе взятые. Я написал его, чтобы показать, что можно было обойтись и без переменной b, потому что в скобках, стоящих за именем метода WriteLine, можно писать и обращения к математическим функциям.

        Debug.WriteLine(Math.Abs(-20))

Здесь я выбросил название пространства имен System

и все обошлось – выведено еще одно число 20.

Поясняю работу с текстовой информацией: Часто нам бывает нужно узнать что-нибудь про какой-нибудь текст. Например, хотя бы, сколько в нем букв.

        Debug.Write(Microsoft.VisualBasic.Strings.Len("Мир"))

Функция  Len класса Strings пространства имен Microsoft.VisualBasic находит, сколько символов (букв, других знаков и пробелов) присутствует в строке, являющейся ее аргументом. В слове «Мир» 3 буквы, поэтому в окно Output выводится число 3. Обратите внимание, что здесь я пользуюсь не методом WriteLine, а методом Write. Разница в том, что следующая за нашей тройкой информация в окне Output будет напечатана в той же строке, что и 3, а не в следующей.

Можем писать короче:

        Debug.Write(Strings.Len("Мир"))

        Debug.Write(Len("Мир"))

Последняя строка вычислит и выведет 5+80+1+1=87:

        Debug.WriteLine(Len("Война") + Math.Abs(-80) + a + 1)


Знакомимся со строками


Создайте двухкнопочный проект с такой программой:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim a As Integer

        a = 98

        Debug.WriteLine(a)

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim b As String

        b = "Привет всем!"

        Debug.WriteLine(b)

    End Sub

Сравним две процедуры.

Объявление Dim a As Integer говорит о том, что переменная a обязана иметь числовое значение, и поэтому в первой процедуре оператор  a=98  записывает в ячейку a число 98.

Объявление Dim b As String говорит о том, что переменная b обязана иметь строковое (текстовое) значение. Это значит, что ее значением будет не число, а произвольная цепочка символов, например,       Привет всем!     или    рпН2Н(+*fD6:u   . Оператор b ="Привет всем!" записывает в ячейку b строку  Привет всем! . Оператор Debug.WriteLine(b), поскольку он обязан всегда выводить на экран содержимое ячейки b, выведет на экран текст  Привет всем!

Обратите внимание, что в окне кода текст должен браться в двойные кавычки, а в памяти он хранится без кавычек и на экран выводится без кавычек. И когда вы его вводите в текстовое поле или в InputBox, то тоже вводите без кавычек.

Информация в ячейке памяти под строковую переменную может в процессе выполнения программы меняться точно так же, как и в ячейке для числовой переменной. Например, при выполнении процедуры

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Dim a As String

        a = "Минуточку!" : Debug.WriteLine(a) : a = "Здравствуйте!" : a = "До свидания!" : Debug.WriteLine(a)

    End Sub

в ячейке a будут по очереди появляться строки

Минуточку!              Здравствуйте!             До свидания!

а на экран будут выведены строки:

Минуточку!

До свидания!


Размеры ячейки под строковую переменную не фиксированы, они прямо зависят от размеров строки.

Операция &. Над строками, так же как и над числами, можно выполнять некоторые операции. Простейшая операция обозначается символом & и мы с ней знакомы – она просто соединяет строки в одну. Рассмотрим программу:

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

        Dim S As String = "беда"

        Dim T As String

        T = "По" & S

        Debug.WriteLine(T)

        Debug.WriteLine(T & T & T)

        Debug.WriteLine(T + T + T)

    End Sub

Вот что она печатает:

Победа

ПобедаПобедаПобеда

ПобедаПобедаПобеда

Вы видите, что операция +

по отношению к строкам равнозначна операции &.

Строковые выражения и литералы. Встретившиеся нам выражения   

"По"  &  S

T & T & T

"Объем = "   &   Format(V, "0.###")

и другие являются ни чем иным, как строковыми выражениями. По той простой причине, что в них производятся действия, результатом которых является строка. Конкретные взятые в двойные кавычки строки текста, которые мы видим в окне кода, будем называть строковыми литералами. Так, в приведенных выше строковых выражениях мы видим литералы  "По",  "Объем = ", "До свидания!"  и другие. Строковые же выражения, как и любые другие выражения, не заключаются в двойные кавычки. В них заключаем только конкретные строковые литералы.

Операция & по отношению к числам. Если операцию & применить к числам, то она их «насильно» преобразует в строки и соединит, как привыкла, в одну строку. Рассмотрим программу:

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        Dim a As Integer = 1234

        Debug.WriteLine("Здесь было " & 76 & a & a & 908 & " зайцев")

    End Sub

Вот что она печатает:



Здесь было 7612341234908 зайцев

Разумеется, строка цифр  7612341234908  это просто строка символов и не имеет никакого отношения к реальному числу. Это просто бывшие числа, ставшие строками и затем соединенные вместе.

Задание 14.         

Определите без компьютера, что напечатает следующая программа?:

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

        Dim a As String = "Цикл"

        a = a & a

        Debug.WriteLine(a)

        a = a & a

        Debug.WriteLine(a & a & "Конец цикла")

    End Sub

Пример. Строковую переменную можно задавать не только оператором присваивания, но и функцией InputBox:

    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

        Dim a As String

        a = InputBox("Введите какое-нибудь слово")

        Label1.Text = "Вы ввели слово " & a

    End Sub

Пусть после нажатия на кнопку вы ввели слово Вперед. Вот результат в метке:

Вы ввели слово Вперед

Обратите внимание на пробел между буквой «о» и кавычкой в литерале "Вы ввели слово  ".  Пробел нужен для того, чтобы слова при выводе не сливались. Если бы его не было, результат был бы такой:

Вы ввели словоВперед


Звук и видео Проект «Плеер»


Поскольку у вашего компьютера есть видеоадаптер (видеокарта) и наверняка есть звуковой адаптер (звуковая карта), вы можете добавлять в ваш проект просмотр видео и прослушивание звука. Например, можно сделать так, чтобы при нажатии на кнопку или прямо при запуске проекта раздавалась музыка или на экране, помещенном на форму, воспроизводился видеоклип. Для этого необходимо, чтобы видеофайл или звуковой файл с музыкой или вашим голосом уже находились на диске компьютера.

Свой голос вы можете записать в звуковой файл, если у вас есть микрофон. Делается это стандартным приложением Windows «Звукозапись», до которого добираются так: В среде Windows нажмите Пуск ® Программы ® Стандартные ® Развлечения ® Звукозапись.

Вы можете прекрасно прослушивать и просматривать с помощью VB файлы самых разных форматов.

Звук и видео в Windows. Для воспроизведения звуковых и видеофайлов нужна специальная программа. Работая в Windows, вы наверняка для этого пользовались медиаплеером. Возможно, вы просто щелкали по значку звукового или видеофайла, после чего слушали и смотрели, не обращая внимания, что проигрывает вам эти файлы именно программа «Медиаплеер» (Windows Media Player). Медиаплеер входит в стандартный состав Windows последних версий. Если вы никогда им не пользовались, вам сейчас полезно чуть-чуть потренироваться в его использовании. Откройте его: Пуск ® Программы ® Стандартные ® Развлечения ® Windows Media Player. Приблизительный внешний вид медиаплеера вы можете видеть на Рис. 3.23. Правда, в последних версиях Windows он перенастраивается и может быть весьма причудливым.

Рис. 3.23

Дальнейшие ваши действия интуитивно ясны. При помощи  File ® Open (затем, возможно, Browse) вы ищете и открываете на жестком или компакт-диске или в сети звуковой или видеофайл. Затем воспроизводите его при помощи привычных кнопок и регуляторов в нижней части медиаплеера: «Воспроизведение», «Пауза», «Стоп», «Громкость» и т.д.

Если вы не можете найти ни одного файла, подскажу, что несколько звуков и мелодий находятся на жестком диске вашего компьютера по адресу Windows\Media, а несколько простейших коротеньких видеоклипов – по адресу


Program Files\Microsoft Visual Studio .NET\Common7\Graphics\videos

Если звука не слышно, проверьте настройки вашей звуковой карты в приложении Микшер. Для этого в среде Windows нажмите Пуск ® Программы ® Стандартные ® Развлечения ® Регулятор громкости. В возникшем окне снимите флажки (галочки) выключения канала и установите максимальный уровень у каналов Wave (для WAV-файлов и MP3-файлов) и MIDI (для MID-файлов и RMI-файлов). Если вы сначала хотите записать звуковой файл с микрофона, зайдите в «Свойства», затем в закладку «Запись», установите флажок включения канала «Микрофон» и установите достаточно большой уровень канала «Микрофон».

Звук и видео в VB. Медиаплеер может быть вставлен в ваш VB проект, где вы имеете возможность свободно им пользоваться, управлять и настраивать, причем как в режиме проектирования, так и в режиме работы. Чтобы воспользоваться медиаплеером в VB, вам нужно расположить на форме специальный элемент управления Windows Media Player, который является «копией» медиаплеера в вашем проекте. Но его нет в стандартном наборе на панели Toolbox. Сначала его нужно туда поместить. Для этого: Tools ® Customize Toolbox ® COM Components ® вы находите Windows Media Player в длинном списке и ставите против него галочку ® OK. Он появился в Toolbox. Теперь его можно размещать на форме обычным образом. Подробнее процесс добавления нового элемента управления в Toolbox рассмотрен в 4.2.3.

Постановка задачи. Давайте на основе медиаплеера создадим собственный небольшой проигрыватель примерно такого вида, как на Рис. 3.24.



Рис. 3.24

Мы видим его в момент воспроизведения видеофайла. В центре расположен элемент управления Windows Media Player в виде экрана с инструментами управления сразу под ним. Кроме этого на форме мы видим 12 кнопок: по бокам 6 белых и внизу 6 серых. Слева – 3 белые кнопки с названиями звуковых клипов. Справа – 3 белые кнопки с названиями видеоклипов. Я сделал только по 3, но их может быть, сами понимаете, хоть сотня. В дальнейшем, чтобы не связываться с кнопками, мы научимся пользоваться списком (18.5) или просто просматривать диск (20.2).



Пользоваться нашим проигрывателем просто. Сначала щелчком по белой кнопке выбираем, что будем проигрывать. Затем запускаем воспроизведение щелчком по кнопке «Старт». Щелчком по кнопке «Стоп» – останавливаем. Мы можем пользоваться и собственными инструментами управления медиаплеера, которые видны сразу под экраном.. А вот 4 кнопки в центре внизу убеждают нас, что средствами VB вы можете управлять медиаплеером тоньше и удобнее, чем в Windows.

Проектируем проигрыватель. Создадим новый проект. Поместим Windows Media Player в Toolbox, а оттуда – на форму. Там он будет иметь примерно такой вид, как на Рис. 3.23, только без меню. В окне свойств мы видим большое количество его свойств. Не нужно менять значения тех свойств, которые вы не понимаете.

Проделайте следующее:

Дайте ему имя (например, Плеер).

Установите свойство AutoRewind (автоперемотка) в True, чтобы после окончания воспроизведения плеер устанавливался на начало клипа.

Установите свойство AutoStart в False, чтобы плеер не начинал воспроизводить файл сразу после открытия его щелчком по белой кнопке, а ждал нажатия на кнопку воспроизведения (хотя, можно и не делать этого).

Щелкните правой клавишей мыши по плееру и выберите в контекстном меню Properties. Здесь вы тоже можете настроить кое-какие его свойства.

Поместим на форму 2 метки и 12 кнопок. Дадим кнопкам подходящие имена (лучше всего, если они будут похожи на текст кнопок).

Пишем программу. Для того, чтобы конкретный файл начал воспроизводиться, нужно выполнить всего два оператора. Первый должен указать плееру адрес этого файла на диске, чтобы плеер знал, «что играть». Второй должен непосредственно отдать плееру команду начать воспроизведение. Вот пример записи этих двух операторов:

        Плеер.FileName = "E:\WINNT\Media\Windows Logon Sound.wav"

        Плеер.Play()

Здесь:

Плеер – это наш объект плеер.

FileName – это его свойство (имя, адрес файла). В кавычках указывается полный адрес файла.

Play – это метод объекта Плеер – приказ начать воспроизведение.



Двойными щелчками по кнопками переходим в окно кода и заполняем заготовки процедур. Не забывайте, что после ввода очередной процедуры проект нужно запускать и результаты работы процедуры проверять. Вот что у нас должно получиться (пояснения ниже):

Private Sub Звук_загрузки_Windows_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _

Handles Звук_загрузки_Windows.Click

        Плеер.FileName = "D:\WINNT\Media\Windows Logon Sound.wav"

End Sub

Private Sub Каньон_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Каньон.Click

        Плеер.FileName = "D:\WINNT\Media\canyon.mid"

End Sub

Private Sub В_пещере_горного_короля_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                                                                       Handles В_пещере_горного_короля.Click

        Плеер.FileName = "D:\WINNT\Media\In the Hall of the Mountain King.RMI"

End Sub

Private Sub Штопор_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Штопор.Click

        Плеер.FileName = "D:\Program Files\Microsoft Visual Studio .NET\Common7\Graphics\videos\DRILLRLE.AVI"

End Sub

Private Sub Счетчик_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Счетчик.Click

        Плеер.FileName = "D:\Program Files\Microsoft Visual Studio .NET\Common7\Graphics\videos\COUNT24.AVI"

End Sub

Private Sub Notre_Dame_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Notre_Dame.Click

        Плеер.FileName = "D:\Documents and Settings\d\My Documents\Visual Studio Projects\Разное\Notre2.avi"

End Sub

Private Sub Старт_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Старт.Click

        Плеер.Play()

End Sub

Private Sub Стоп_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Стоп.Click

        Плеер.Stop()



End Sub

Private Sub Играть_непрерывно_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)  _

Handles Играть_непрерывно.Click

        Плеер.PlayCount = 0

End Sub

Private Sub Играть_1_раз_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Играть_1_раз.Click

        Плеер.PlayCount = 1

End Sub

Private Sub Быстрее_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Быстрее.Click

        Плеер.Rate = 2

End Sub

Private Sub В_обычном_темпе_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)  _

Handles В_обычном_темпе.Click

        Плеер.Rate

= 1

End Sub

Пояснения. Прежде всего, некоторые операторы из-за их длины я перенес на следующую строку при помощи «знака переноса», состоящего из пробела и знака подчеркивания. Подробнее об этом – в 3.12.2

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

Смысл остальных 6 процедур ясен после следующих пояснений:

Stop – это метод объекта Плеер – приказ остановить воспроизведение. При следующем нажатии на кнопку «Старт» воспроизведение продолжится с того места, на котором оно было остановлено.

PlayCount – это свойство объекта Плеер (сколько раз подряд проигрывать файл). Если установить его в 0, то воспроизведение будет повторяться бесконечно.

Rate – это свойство объекта Плеер (темп воспроизведения). Если установить его, например, в 2, то воспроизведение будет осуществляться в 2 раза быстрее нормального, то есть люди на экране будут бегать, как сумасшедшие, и разговаривать голосом Буратино. А если в 0,5 – будут ползать, как вареные, и рычать.

Запустите проект. Проверьте, как работают все кнопки. Потаскайте влево-вправо указатель текущей позиции воспроизведения, подвигайте регулятор громкости.



Дополнительные замечания. Если вы установите свойство Visible плеера в False, то плеер вместе со своими инструментами управления не будет виден на форме, но вы все равно сможете им управлять, так как на форме останутся кнопки, созданные вами. Таким образом, вы сможете прослушивать звуковые клипы даже при «отсутствии» плеера на форме. Правда, когда вы попытаетесь просмотреть видеоклип, он все же появится.

Скопируйте папку с проектом и поэкспериментируйте над ней. Вот простые методы и свойства, с которыми можно поэкспериментировать:

AboutBox

Метод, показывающий окно с краткими сведениями о медиаплеере.

Duration

Свойство – общая продолжительность выбранного клипа в секундах.

CurrentPosition

Свойство – на какой секунде находится в данный момент воспроизведение клипа.

Volume

Свойство – громкость. Отрицательное число -10000 означает самую маленькую громкость – полную тишину. Число 0 (ноль) – самую большую громкость. промежуточные числа – промежуточную громкость.

Show

Несколько свойств, начинающиеся на Show, управляют тем, какие части медиаплеера показывать на экране.

Многие свойства объектов, такие как Rate или FileName, позволяют в программе устанавливать и менять их значение, как это мы только что и делали (скажем, Плеер.Rate = 1). К ним относятся также Volume и CurrentPosition. Но существуют свойства, которые этого не позволяют. Они называются свойствами только для чтения (ReadOnly). К ним относится Duration. Какая же от них тогда польза? Польза от них хотя бы та, что мы можем посмотреть, чему равно их значение, пусть даже задаем его не мы. Сделать это можно, например, поместив на форму текстовое поле и применив оператор такого вида:

TextBox1.Text = Плеер.Duration

Он означает, что значение свойства Text текстового поля TextBox1 становится равным значению свойства Duration объекта Плеер.

Множество остальных свойств и методов медиаплеера позволят вам пользоваться всем богатством его возможностей, включая выбор клипов из списка, проигрывание DVD и аудиодисков. Но на них я останавливаться не буду.



Microsoft Multimedia Control 6.0. В Visual Basic 6. 0 есть собственный проигрыватель звуковых и видеофайлов – Microsoft Multimedia Control 6.0. Если у вас на компьютере установлен не только VB, но и  Visual Basic 6.0, вы можете им воспользоваться и в VB. Но методы и свойства там другие. Описаны они в моей книжке (см. Список литературы).

Задание 4.   

Усовершенствуйте ваш проигрыватель:

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

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

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

Добавьте кнопку и текстовое поле для определения продолжительности клипа. Когда вы щелкнете по кнопке, в поле должно появляться значение общей продолжительности выбранного клипа.

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

Добавьте кнопку и текстовое поле для задания текущей позиции воспроизведения. При щелчке по кнопке текущая позиция воспроизведения должна устанавливаться в то значение в секундах, которое вы ввели в текстовое поле.

Задание 5.   

«Музыка в кнопках калькулятора». Пусть при нажатии на калькуляторе каждой из четырех кнопок арифметических действий раздается какой-нибудь короткий мелодичный звук, причем для каждой кнопки свой. Таких звуков много на диске по адресу Windows\Media. Там они записаны в файлах, имеющих расширение wav. Указание: Установите свойство AutoStart в True.