Beep
Совершим экскурсию внутрь одного из этих двух «ларцов». А чтобы экскурсия была не бесцельной, поставим задачу: Извлечь из компьютера при нажатии на кнопку короткий звук (звон, пик).
Я знаю, что этот звук находится внутри «ларца» Microsoft. А если бы не знал? – Сел бы читать учебник или справочник, или систему помощи Help. Эта глава ни в коем случае не расскажет вам, где находятся все объекты. Для этого объектов слишком много. Она только расскажет вам, как добраться до нужного объекта, местоположение которого вам уже заранее известно.
Напишите слово Microsoft и поставьте точку. Перед вами развернется список, представляющий содержимое пространства имен Microsoft. В нем 3 строки (Рис. 2.1).
Рис. 2.1
Каждая из этих 3 строк – не что иное, как еще одно пространство имен. Получается, что внутри «ларца» Microsoft находятся другие 3 «ларца» поменьше: CSharp, Visual Basic, Win32. В знак того, что это именно «ларец», то есть пространство имен, а не что-нибудь другое, в строке стоит значок из двух фигурных скобок {}.
Заглянем внутрь «ларца» Visual Basic. (Почему именно внутрь него? – Потому что я знаю, что нужный нам звук сидит там.) Для этого сделаем двойной щелчок на соответствующем пространстве имен и снова нажмем точку. Перед нами развернется список того, что входит внутрь Visual Basic. Прокрутим немного этот список (Рис. 2.2).
Рис. 2.2
Мы видим, что внутрь пространства имен Visual Basic входит еще одно пространство имен – CompilerServices, внутри которого тоже, наверное, что-нибудь есть. Но нам туда не надо. Потому что кроме него мы видим в списке и множество других строк, обозначенных другими значками. Не будем пока разбираться в смысле этих значков, а выберем двойным щелчком строку Interaction и снова нажмем точку. Перед вами развернется список того, что входит внутрь Interaction. Выберем строку Beep. Это и есть наша «игла». Она-то и заставляет компьютер издать короткий звук. Вот как будет выглядеть теперь ваша процедура:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Microsoft.VisualBasic.Interaction.Beep()
End Sub
Запустите проект, нажмите кнопку, и если звуковая система вашего компьютера в порядке, вы услышите короткий звук. Скажем, что сработал метод Beep объекта Interaction (по аналогии с тем, как в 1.3.9 мы говорили, что сработал метод Hide (он прятал элементы переключателя)).
Итак, игла, яйцо, утка и заяц в коде присутствуют. Вы скажете: Неужели нужно запоминать так много названий этих «животных»? Отнюдь нет. Вам достаточно знать только название «иглы», а система помощи (4.4.9) или Object Browser (4.2.4) подскажут вам, где она находится.
Если вы были внимательны, то у вас наверняка возникли еще кое-какие вопросы. Надеюсь ответить на них и для этого следующий пример рассматриваю более подробно.
Build, Debug, Data
Build используется для компиляции проекта, Debug – при отладке проекта. Их работа описана в соответствующих местах книги. Data используется при работе с базами данных.
Целые числа или десятичные дроби? Числовой тип Decimal
Вы спросите: зачем использовать типы целых чисел Integer и Long, если типы десятичных дробей Single и Double обеспечивают нам работу как с целыми, так и с дробными числами? Здесь дело в наличии или отсутствии абсолютной точности вычислений. При использовании типов десятичных дробей вполне мыслима ситуация, когда дважды два будет не точно 4, а, скажем, 4.00000000000381. Связано это с особенностями представления десятичных дробей в компьютерах. В большинстве реальных задач такая маленькая погрешность несущественна, однако существуют задачи, где точность нужна абсолютная. При использовании же типов целых чисел VB присматривает за тем, чтобы все числа и результаты были абсолютно точными целыми числами. При сложении, вычитании и умножении это, сами понимаете, не проблема, а вот при делении компьютеру приходится округлять.
Совет: Если вы уверены, что переменная всегда должна быть целым числом и никогда дробным, объявляйте ее целым типом, если есть хоть маленькое сомнение – дробным.
Однако абсолютная точность бывает нужна и при работе с дробными числами. Например, в финансовых расчетах доллары или рубли – это целая часть десятичной дроби, а центы или копейки – сотые доли этой дроби. Ошибаться здесь нельзя ни на копейку. В этой ситуации идеально подходит тип Decimal. Этот тип хоть и имеет дробную часть, сложение и вычитание дробных чисел выполняет абсолютно точно. Количество значащих цифр у него рекордное (см. таблицу в 5.4.2).
Попробуем теперь проверить работу типа Decimal.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a, b, c As Decimal
a = 1234567890123456789
b = 0.0098765432109
c = a + b
WriteLine(a) : WriteLine(b) : WriteLine(c)
End Sub
Запустите проект. Вот результат:
1234567890123456789
0,0098765432109
1234567890123456789,0098765432
Как видите, VB, как и положено, обрезал сумму до 29 значащих цифр.
Символы типа. Обратите внимание, что значения переменным а и b я дал не длинные, тип Decimal может проглотить и гораздо длиннее. Попробуем добавить цифр к литералу переменной а. VB подчеркивает литерал и выдает подсказку об ошибке, в которой мы видим слово overflow. В чем дело? Снова укоротим литерал, поставим на него курсор мыши и увидим подсказку «Long». Почему? Ведь переменная a имеет тип Decimal! Дело в том, что VB без явного приказа человека не хочет причислять литералы к типу Decimal. А приказ такой – буква D в конце литерала:
a = 12345678901234567890123456789D
Теперь все в порядке. Буква называется символом типа (Literal type character).
Если вы захотите заставить VB причислить литерал к определенному числовому типу, то вот вам соответствующие символы типов:
Short |
Integer |
Long |
Single |
Double |
Decimal |
S |
I |
L |
F |
R |
D |
Часть I Программирование без программирования
У этой части две цели:
Научить самым основным и элементарным приемам работы в VB.
Показать, что в VB можно добиваться впечатляющих результатов практически безо всякого программирования.
Доказательством тому – проекты «Калькулятор» и «Плеер», причем «Калькулятор» получится у вас гораздо ярче и забавнее, чем стандартный калькулятор Windows.
Эта часть нужна для того, чтобы, прочтя ее, вы могли сказать себе: «Я вполне освоился и могу делать в VB интересные вещи, не особенно напрягаясь». То есть (поясню) почти без программирования. Почти, но не абсолютно. Простенький программный текст все-таки придется писать.
В 1 главе вы создадите свой первый проект на VB.
Во 2 главе вы погрузитесь в глубины библиотеки классов .NET Framework. Ведь для того, чтобы строить дом из классов-кубиков, нужно уметь нужные кубики находить и прилаживать на место.
В 3 главе вы создадите собственный калькулятор, снабдив его фотографией, музыкой и даже видео. Цель главы – распахнуть перед вами основные простые и одновременно яркие возможности VB и показать, что создавать простые проекты действительно легко. В завершение главы вы создадите еще и собственный плеер.
Завершается часть главой 4 «Работа в среде Visual Studio .NET», которая излагает основные приемы работы на компьютере при программировании на VB.
Я постарался написать книгу так, чтобы сесть за компьютер и программировать на VB мог даже тот, кто ни разу в жизни за компьютер не садился. Специально для такого человека я написал Приложения 1 и 2, в которых объясняю все элементарные и необходимые для этого вещи: как устроен компьютер, какова структура папок на диске, как работать с текстом в текстовом редакторе, как управляться с окнами Windows. Если вы чувствуете пробелы хотя бы в одной из этих областей, то ни в коем случае не садитесь за компьютер и дальше не читайте, а читайте сначала Приложения.
Кстати, вы прочитали Введение? Там содержится нужная в дальнейшем терминология.
Часть II Программирование на VB – первый уровень
Кончилась наша сладкая жизнь. Вернее, в ней наметился большой перерыв. Действительно, жизнь наша была беззаботной. Ведь калькулятор и плеер достались нам без труда. Работы мало – удовольствия много. Хотелось бы, чтобы так было всегда… Но жизнь сурова и предлагает свой традиционный выбор – или засучить рукава или надеть легкую обувь для бега. Действительно, калькулятор и плеер мы создали, а есть ли у вас ощущение, что вы можете самостоятельно сделать что-нибудь другое? Вряд ли, ведь вас вели за ручку.
И все же … есть ли еще возможности почти без программирования быстренько получить что-нибудь «эдакое»? Есть, и их много. В популярных журналах, посвященных программированию, вы найдете немало программок из двух-трех строчек кода, скопировав которые в свой компьютер, вы получите на экране (и не только на нем) любопытные вещи. Только вот беда – хоть этих строчек всего две-три, по-настоящему понять их нет никакой возможности и самостоятельно ничего похожего вы сделать не сможете. Кто вы в таком случае – программист или переписчик иероглифов? Вот то то и оно! И от этого факта не уйдешь. Программирование – это гора, которую не объедешь, это тот самый гранит науки, который придется грызть.
Совет: грызите потихоньку, не надо пытаться откусить сразу большой кусок – можно поломать зубы.
В этой части начинается настоящее программирование. Цель ее – провести вас от создания самых простых программ до сложных. Вы изучите такие серьезные вещи, как переменные величины, циклы, ветвления, процедуры, графику, работа со временем, управление компьютером при помощи мыши и клавиатуры. Подробно разбирается создание трех довольно солидных проектов. Заканчивается часть заданием на самостоятельное создание проекта. Предполагается, что после выполнения этого задания у вас должно возникнуть ощущение всесильности. Вы должны почувствовать, что теперь вам по плечу программа любого размера.
Эта часть состоит из 10 глав. Не все читатели пройдут сквозь их огонь и воду. Но с теми, кто пройдет, можно идти в разведку. По пути вас ждет много интересного: графика, рисунки, узоры, движение объектов по экрану, мультики, диалог с компьютером, измеритель шустрости, определитель – «экстрасенс» ли вы, пароль на калькулятор, проект «Будильник» и первая в вашей жизни собственная игра «Гонки». В путь!
Числовые переменные Математика Точность
Простые арифметические вычисления лучше делать на калькуляторе, чем на компьютере, а вот сложные – наоборот.
Числовые типы данных
Данные – это то, над чем работает программа, чтобы получить результат. А программа – это инструкция о том, что нужно делать с данными, чтобы получить результат. Так, в нашем проекте Калькулятор данными были числа, вводимых нами в два верхних текстовых поля, а результатом – число в нижнем текстовом поле. В проекте Плеер данными были звуковые и видеофайлы на диске, а результатом – звук в наушниках и изображение на экране.
Данные часто выступают в качестве значений переменных. Поэтому мы имеем право говорить о типах данных точно так же, как говорим о типах переменных. Это одни и те же типы. Литералы, которые мы пишем в тексте программы – тоже данные, ведь программа работает и над ними тоже. Поставьте курсор мыши на любой литерал в тексте программы и увидите подсказку с названием типа данных, к которому, по мнению VB, относится этот литерал. Поэтому в дальнейшем я не буду различать типы данных и типы переменных.
Вкратце и без пояснений типы данных VB перечислены в 5.2.3. В этом подразделе мы будем говорить только о типах числовых данных.
В VB имеется 7 числовых типов. В таблице все они приведены, а подробные пояснения – в следующих разделах. Для справки я привел сведения и по простым нечисловым типам.
Тип | Описание | Размер ячейки (в байтах) | Диапазон значений типа | ||||
Byte | Целое число –положительное | 1 | От 0 до 255 | ||||
Short | Целое число – короткое | 2 | От -32768 до 32767 | ||||
Integer | Целое число – обычное | 4 | От -2147483648 до 2147483647 | ||||
Long | Целое число – длинное | 8 | От -9223372036854775808 до 9223372036854775807 | ||||
Single | Десятичная дробь обычной точности | 4 | От ±3.4028235*10+38
до ±1.401298*10-45. Точность – примерно 7 значащих цифр. | ||||
Double | Десятичная дробь двойной точности | 8 | От ±1.79769313486231570*10+308
до ±4.94065645841246544*10-324. Точность – примерно 17 значащих цифр. | ||||
Decimal | Десятичная дробь длинная, абсолютной точности | 16 | Число длиной в 29 цифр, причем десятичная точка может стоять в любом месте.
Самое большое число такое: ±79228162514264337593543950335, а самое маленькое – такое: ±0.0000000000000000000000000001 | ||||
Boolean | Логический тип | 2 | Всего два значения: истина – ложь | ||||
Char | Символ | 2 | Любой из 65536 знаков, букв, цифр и других символов | ||||
String | Строка | * | Произвольный текст | ||||
Date | Дата и время | 8 | Любая дата с рождения Христа и до 9999 года. Любое время суток. |
* – Размер ячейки под строковую переменную зависит от размеров строки и от компьютера.
Что дальше?
Итак, проект готов и работает. Что дальше? Пока не очень понятно, как нам запрограммировать что-нибудь посложнее, например, игру с перестрелкой из введения. Могу пояснить. Вы растягиваете форму во весь экран и придаете ей не цвет, а фотографию или нарисованный вами рисунок города. Это делается просто (см. 3.6). Получается город во весь экран. Далее берете в Toolbox и расставляете по форме объекты типа PictureBox (изображение) – это ваши будущие автомобили, прохожие, гангстеры, пули и т.п. Затем придаете каждому объекту нужную фотографию. Наконец, пишете для каждого из этих объектов программу поведения, включая реакцию на нажатия клавиш клавиатуры и мышиные щелчки. Игра готова, можно запускать. Основная трудность здесь, конечно, в написании программы, она будет достаточно сложной и вам предстоит еще многому научиться, чтобы почувствовать себя в силах ее создать.
В VB много любопытных и полезных элементов управления. Так, вставив в форму объект типа Timer, вы сможете управлять работой проекта «по секундам». Многие элементы управления на Toolbox не показаны. Но их легко туда поместить и пользоваться ими. Так, вставив в форму объект типа Windows Media Player, вы сможете сопровождать игру музыкой, звуковыми эффектами и видео. Глава 3. познакомит вас со многими полезными и приятными возможностями VB.
Однако, чтобы понять эту главу, вам придется съесть небольшой «пуд соли». Это – Глава 2.
Что делает оператор присваивания с памятью
Я только что рассказывал о работе оператора присваивания, используя такие выражения, как «компьютер знает», «компьютер помнит» », «компьютер присваивает». Но нам необходимо более строгое понимание работы этого оператора, понимание ближе к «железу», к оперативной памяти.
Рассмотрим пример программы:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a, b, y As Integer
a = 10
b = 6
y = a + b + 1
Debug.WriteLine(y + 200)
End Sub
В программе встречаются три переменные, все они объявлены. Компьютер отведет для них в памяти три четырехбайтовые ячейки. Вот как будет работать оператор присваивания:
Выполняя оператор присваивания (например, y=a+b+1), компьютер сначала смотрит на его правую часть (a+b+1). Если в ней встречаются переменные (в нашем случае это a и b ), то компьютер перед вычислением ищет их значения в отведенных ячейках памяти (и находит там 10 и 6, так как их туда перед этим записали операторы а=10 и b=6), подставляет эти значения в правую часть и вычисляет ее. Затем вычисленное значение (17) компьютер записывает в ячейку памяти, отведенную под переменную, поставленную в левой части (y).
Таким образом, когда мы говорим "Компьютер запомнил, что а равно 2", мы подразумеваем "Компьютер записал в ячейку памяти, предназначенную для а, число 2".
А теперь рассмотрим, как будут заполняться информацией ячейки a, b, y в процессе выполнения нашей программы. В самом начале выполнения программы в них находятся нули. Первым выполняется оператор а=10. Согласно только что приведенному определению оператора присваивания в ячейку a будет записано число 10. Затем выполняется оператор b=6 и в ячейке b появляется шестерка. Затем выполняется оператор y=a+b+1. Компьютер смотрит, что находится в ячейках a и b, видит там 10 и 6, подставляет их в выражение a+b+1, получает 17 и записывает в ячейку y. Наконец выполняется оператор Debug.WriteLine(y+200). Компьютер заглядывает в ячейку y, видит там 17, вычисляет 17+200 и выводит 217 в окно Output.
Что такое программа на VB?
Что такое программа с точки зрения VB и большинства других объектно-ориентированных языков программирования, удобнее всего рассмотреть на аналогии. Представьте себе, что к вам, живущему в большом городе, в гости приехал ваш знакомый, никогда не выезжавший из своего поселка. Он хочет сходить на футбол, а вам идти вместе с ним некогда. Чтобы он смог добраться до стадиона и вернуться живым и здоровым, вы пишете ему на листе бумаги такую инструкцию.
Что делать, если тебе хочется сходить на футбол
1. Спустись на лифте во двор 2. Дойди до метро 3. Доберись до станции "Спортивная" 4. Купи билет на стадион "Лужники" 5. Иди на трибуны и смотри футбол 6. Возвращайся на метро до станции "Отрадное" 7. Дойди до нашего дома и подъезда 8. Поднимись на лифте 9. Позвони в дверь Как спускаться на лифте 1. Подойди к лифту и нажми кнопку 2. Когда дверь откроется, проверь, есть ли там кабина 3. Если есть, заходи 4. Нажми на кнопку с цифрой 1 5. Когда дверь откроется, выходи Как дойти до метро 1. Поверни налево и дойди до угла 2. Перейди улицу 3. ……………….. Как доехать до станции "Спортивная" 1. ………………….. 2. …………………... Как переходить улицу 1. Найди переход 2. Посмотри на светофор 3. ………………….. ……………………………………………………….. Что делать, если лифт застрянет 1. Нажми на кнопку вызова диспетчера 2. ………………….. Что делать, если ты заблудился 1. Спроси у прохожих, где здесь поблизости телефон-автомат 2. Позвони домой ……………………………………………………….. |
Как видите, на листке – несколько инструкций. Они – двух типов. Одни начинаются со слов «Что делать, если …», другие – со слова «Как…».
Самая верхняя главная инструкция состоит из 9 команд и предписывает строгий порядок действий для достижения цели. Инструкции, начинающиеся со слова «Как», описывают каждое из этих действий более подробно. Так, инструкция «Как дойти до метро» подробно описывает выполнение команды «Дойди до метро». Так как в этой инструкции встречается команда «Перейди улицу», которая сама нуждается в пояснении, то имеется инструкция «Как переходить улицу». И так далее.
Зачем я написал так много инструкций типа «Как»? Не проще ли было написать одну длинную главную инструкцию из «пары тыщ» команд, в которой бы задавались по порядку все мелкие действия от начала до конца похода, начиная с «Подойди к лифту и нажми кнопку» и кончая «Подойди к дверям нашей квартиры и позвони»? – Возможно и проще, но вот инструкция в этом случае получилась бы слишком длинной. Почему длинной? Потому что, например, переходить улицу надо будет раз восемь, и выходит, что в инструкции придется восемь раз писать одни и те же пояснения, как это делать. И еще по той причине не нужно писать длинную инструкцию, что человеку гораздо приятней и удобней воспринимать короткие инструкции, чем длинные.
Порядок выполнения команд в инструкциях строго определен. Попробуйте нарушить его и увидите, что произойдет. Например, сначала попытайтесь пройти на трибуны, и только потом купить билет. Или сначала зайдите в дверь лифта и только потом проверьте, есть ли там кабина.
Однако жизнь сложна, и в ней могут происходить события, которые трудно привязать к какому-то конкретному этапу выполнения инструкции. Например, вы можете заблудиться (причем, в любом месте, как по пути туда, так и по пути обратно), или ваш лифт может застрять. На этот случай пишутся инструкции, начинающиеся словами "Что делать, если …" и предписывающие, как реагировать на то или иное событие.
В программировании на VB все эти инструкции называются процедурами. Команды, из которых они составлены, называются операторами. Весь набор инструкций на листке назовем программой. А события так и будем называть событиями.
Программа не должна содержать команд, которые исполнитель программы не способен выполнить. Например, «Перелети через улицу». Когда дело касается возможностей человека, тут более-менее все ясно. А если мы пишем программу для компьютера? Нам нужно четко знать, что компьютер умеет, а что не умеет. Лучше всего, если перед нами будет справочник, в котором перечислены все команды, которые компьютер способен исполнить. И такой справочник есть – это система Help, которой вы можете пользоваться, программируя на VB.
Но вы удивитесь, когда увидите, насколько «слабы», «мелки», «маломощны» все команды, которые умеет выполнять компьютер. На каком бы языке вы ни программировали, нигде вы не найдете таких шикарных команд, как «Рассчитай траекторию полета на Луну» или «Выиграй в шахматы у Каспарова». На любом языке вы можете отдавать только очень примитивные команды, типа «Умножь 5 на 4» или «Нарисуй на экране кружочек». Но ведь вы точно знаете, что компьютер уже давно и рассчитал траекторию полета на Луну, и выиграл у Каспарова! В чем тут волшебство? Волшебства нет, есть волшебники. – Приходит хмурый программист и из примитивных команд языка программирования пишет длинную программу, вычисляющую траекторию полета на Луну, или еще более длинную программу, выигрывающую у Каспарова.
Исходя из сказанного, можно заключить, что знание программирования состоит из двух областей:
Знание списка команд, из которых составляются программы
Умение по правилам записывать команды друг за другом так, чтобы получилась нормальная программа.
Дальнейшее усложнение
Закройте проект и сделайте еще одну копию его папки – «Красим форму 2». Над копией будем продолжать работу. Откройте проект из этой папки.
Работа для второй кнопки. Давайте напишем программу и для второй кнопки (Button2). Пусть при щелчке по ней:
Ширина горизонтальной полосы прокрутки становится равной 200
В текстовом поле TextBox1 появляется текст «Ширина полосы = 200»
Вновь становится виден элемент переключателя (RadioButton2).
Кнопка Button2 окрашивается в красный цвет.
В результате картинка должна стать такой, как на Рис. 1.21.
Рис. 1.21
В режиме дизайна (проектирования) сделаем по кнопке Button2 двойной щелчок мышкой. Перед нами – снова окно кода, но в нем появилась заготовка другой процедуры, то есть новое приглашение – на этот раз приглашение для ввода операторов, реагирующих на щелчок кнопки Button2. Введем их. Теперь содержимое окна кода таково:
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"
RadioButton2.Hide()
Button2.BackColor = Color.Yellow
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
HScrollBar1.Width = 200
TextBox1.Text = "Ширина полосы = 200"
RadioButton2.Show()
Button2.BackColor = Color.Red
End Sub
End Class
Пояснение: Для того, чтобы элемент RadioButton2 стал снова виден, мы использовали его метод Show. Кнопка же красится в красный цвет.
Запустите проект. Пощелкайте по кнопкам. Картинка у вас попеременно будет иметь вид то Рис. 1.20, то Рис. 1.21 .
Visual Studio .NET 2003 для удобства программиста отделяет процедуры в окне кода горизонтальной чертой. В книжке я не буду этого делать, ограничившись пропуском строки.
Аналогия. Давайте проведем аналогию между нашей программой и программой, которую мы дали любителю футбола в 1.1
Та программа состояла из нескольких процедур, эта также состоит из нескольких (двух) процедур.
Та программа описывала поведение одного человека в городе, эта описывает поведение нескольких объектов на форме.
В той программе процедуры состояли из команд, записанных одна за другой и выполнявшихся в порядке записи. В этой программе – то же самое: процедуры состоят из операторов, записанных один за другим и выполняющихся в порядке записи.
В той программе встречались процедуры двух типов ("Как…" и "Что делать, если…"). В этой программе обе процедуры одного типа - "Что делать, если нажата кнопка". О процедурах типа "Как…" поговорим позже.
В той программе события – это "Застрял лифт", "Заблудился", в этой события - это нажатия на кнопки.
Красим форму. А как же с обещанной покраской формы? Ах, да, забыл! Поместите на форму третью кнопку и создайте для нее такую процедуру:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Me.BackColor = Color.White
End Sub
Me – по-русски «Я». Так называют в окне кода формы саму форму, несмотря на то, что ее официальное имя – Form1. Красим мы ее в белый цвет (White). Результат нажатия на кнопку 3 виден на Рис. 1.22.
Рис. 1.22
DebugWriteLine
Пусть вам нужен инструмент для вывода чисел и текста в специальное окно VS, которое называется Output. Зачем такой вывод нужен, вы узнаете позже.
Чтобы найти этот инструмент, заглянем в «ларец» System. Наберите в начале новой строки внутри процедуры это слово и точку. Перед вами развернется список того, что входит внутрь пространства имен System. Мы видим, что туда входят другие пространства имен, например Diagnostics. Кроме них мы видим и множество других элементов, помеченных разными значками. Будем называть их объектами. Впоследствии вы обнаружите, что в большинстве своем они совсем не похожи на то, что мы называли объектами раньше – форму и элементы управления.
Объекты бывают разных видов. Укажем некоторые виды:
классы | |||
структуры | |||
модули | |||
перечисления |
Это еще не «иглы», но уже нечто вроде «яйца». Все эти объекты – важные инструменты программирования, вместилища полезных свойств, методов и других нужных вещей.
Наша же дорога ведет мимо – внутрь пространства имен Diagnostics. Выберите его в упомянутом списке и введите точку. Перед вами развернется список объектов, которые входят внутрь пространства имен Diagnostics.
Выберите здесь класс Debug и снова введите точку. Перед вами развернется список того, чем обладает класс Debug. Будем называть это компонентами (members) класса. Обратите внимание, что значки здесь уже другие: нет ни классов, ни модулей, ни других объектов. А есть то, чем эти объекты обладают, то есть компоненты. В случае класса Debug это свойства и методы. Вот значки наиболее распространенных компонентов:
свойства | |||
методы (многие методы называются также функциями) | |||
события |
Вот это уже настоящие «иглы». Выберем метод WriteLine, а в скобках после него напишем 3+2. Кстати, после ввода открывающей скобки VB услужливо предложит подсказку на тему о том, что должно быть в скобках. Со временем вы научитесь эту подсказку понимать.
Вот как выглядит теперь наша процедура:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Microsoft.VisualBasic.Interaction.Beep()
System.Diagnostics.Debug.WriteLine(3 + 2)
End Sub
Если вы не видите сейчас на экране окна Output, проделайте View ® Other Windows ® Output. Запустите проект, в окне Output вы увидите возникающие строчки служебной информации, связанной с запуском и компиляцией вашего проекта. Затем на экране появится форма. Нажмите кнопку, вы услышите звук и в окне Output появится число 5. Все верно. Завершите работу проекта. В окне Output появится строчка служебной информации, связанной с завершением работы вашего проекта.
Диалог с компьютером
Напишем программу, которая осуществляла бы такой диалог человека с компьютером:
КОМПЬЮТЕР ВЫВОДИТ НА ЭКРАН: Здравствуй, я компьютер, а тебя как зовут?
ЧЕЛОВЕК ВВОДИТ С КЛАВИАТУРЫ: Коля
КОМПЬЮТЕР ВЫВОДИТ НА ЭКРАН: Очень приятно, Коля. Сколько тебе лет?
ЧЕЛОВЕК ВВОДИТ С КЛАВИАТУРЫ: 16
КОМПЬЮТЕР ВЫВОДИТ НА ЭКРАН: Ого! Целых 16 лет! Ты уже совсем взрослый!
Очевидно, что человек в процессе беседы имеет право вводить с клавиатуры какие угодно имена и какой угодно возраст.
Пусть компьютер задает свои вопросы в InputBox, человек вводит свои ответы в тот же InputBox, а последнюю реплику компьютер подает в MsgBox. Для хранения в памяти имени человека выдумаем переменную imya, а для возраста – vozrast.
Вот программа:
Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
Dim imya As String
Dim vozrast As Integer
imya = InputBox("Здравствуй, я компьютер, а тебя как зовут?")
vozrast = InputBox("Очень приятно, " & imya & ". Сколько тебе лет?")
MsgBox ("Ого! Целых " &
vozrast & " лет! Ты уже совсем взрослый!")
End Sub
Обратите внимание на запятые, точки и некоторые пробелы внутри кавычек. Если бы их не было, слова бы сливались вот так:
КОМПЬЮТЕР ВЫВОДИТ НА ЭКРАН: Очень приятноКоляСколько тебе лет?
КОМПЬЮТЕР ВЫВОДИТ НА ЭКРАН: Ого! Целых16лет! Ты уже совсем взрослый!
Диалог будет отличаться только той информацией, которую вводит человек. Так, в другой раз по этой же программе будет осуществлен следующий диалог:
КОМПЬЮТЕР: Здравствуй, я компьютер, а тебя как зовут?
ЧЕЛОВЕК : Фантомас!
КОМПЬЮТЕР: Очень приятно, Фантомас! . Сколько тебе лет?
ЧЕЛОВЕК: 100
КОМПЬЮТЕР: Ого! Целых 100 лет! Ты уже совсем взрослый!
Не подумайте, что эта программа очень умна. Она совершенно не анализирует, какую информацию человек ввел с клавиатуры. Поэтому с ней возможен и такой диалог:
КОМПЬЮТЕР: Здравствуй, я компьютер, а тебя как зовут?
ЧЕЛОВЕК: Сгинь с моих глаз!
КОМПЬЮТЕР: Очень приятно, Сгинь с моих глаз!. Сколько тебе лет?
ЧЕЛОВЕК: -2
КОМПЬЮТЕР: Ого! Целых -2 лет! Ты уже совсем взрослый!
Задание 15.
Напишите программу для следующей задачи: Компьютер запрашивает названия двух планет, радиусы их орбит (в миллионах километров) и скорости движения по орбите (в миллионах километров в сутки). После этого он вычисляет продолжительность года на планетах и выдает результат в таком виде:
Продолжительность года на планете Земля – 365 суток, а на планете Эоэлла – 12 суток.
Результат нужен в трех вариантах: вывод в текстовое поле, метку и MsgBox.
Указание для тех, кто не знает физики и геометрии: Год равен времени одного оборота по орбите, а оно равно длине орбиты, деленной на скорость движения по орбите. Длина орбиты равна 2?R, где R – радиус орбиты.
Edit
Undo. Отменить последние действия. Работает не только в окне кода, но и в окне конструктора.
Redo. Вернуть отмененные действия. Работает не только в окне кода, но и в окне конструктора.
Cut, Copy, Paste, Delete. Обычные и привычные для вас команды перемещения, копирования, удаления слов и фрагментов текста вашей программы. Применяются не только к тексту в окне кода, но и к элементам управления на форме в окне конструктора. Как проводят эти действия с текстом, рассказано в Приложении 2. А с элементами управления вот как: Часто, когда нам нужно иметь на форме несколько совершенно одинаково настроенных элементов управления, удобнее не брать их поодиночке в Toolbox и настраивать каждый по0отдельности, а разместив один на форме и тщательно настроив его нужным образом, затем скопировать несколько раз. Копировать можно двумя способами:
Щелчок по копируемому объекту ® Edit ® Copy ® щелчок по форме ® Edit ® Paste ® Edit ® Paste…
Щелчок по копируемому объекту правой клавишей мыши ® пункт Copy в выпавшем контекстном меню ® щелчок по форме правой клавишей мыши ® пункт Paste в выпавшем контекстном меню ® еще несколько раз пункт Paste… Так быстрее.
Аналогично используются Cut (вырезать для переноса в другое место) и Delete (уничтожить).
Find and Replace. Команды поиска и замены в тексте вашей программы отдельных слов и фрагментов.
Advanced ® Word Wrap. Программный текст в окне кода автоматически переносится со строки на строку.
Advanced ® Make Uppercase. В выделенном фрагменте делает все буквы заглавными.
Advanced ® Make Lowercase. В выделенном фрагменте делает все буквы строчными.
Advanced ® Comment Selection (Uncomment Selection). Данные пункты меню ставят и снимают кавычки комментариев сразу во всех строках выделенного вами фрагмента кода. Зачем это нужно? У программистов при отладке программы часто возникает необходимость заставить несколько строк кода не выполняться. Но стирать их жалко, так как они еще могут понадобиться. Тогда программисты ставят в начале каждой из этих строк одинарную кавычку. VB думает, что эти строки – комментарий, и не выполняет их, что и требовалось. Когда эти строки кода понадобятся вновь, программист кавычки удаляет. Когда таких строк много, ставить и снимать кавычки в каждой строке по-отдельности утомительно.
Еще о пользе переменных
Переменные быстры. Значения переменных величин не обязаны, подобно тексту элементов управления, отображаться «на медлительной поверхности проекта». Они спрятаны глубоко в сверхбыстрой оперативной памяти компьютера, там над ними удобно проводить вычисления и разнообразные логические преобразования. Фактически вся мыслительная работа компьютера проводится над переменными величинами. И лишь иногда, когда человеку понадобится, они показываются «на поверхности» в виде содержимого текстовых полей или как-нибудь еще.
Создавая калькулятор, мы не ведали ни о каких переменных, поэтому вместо изящного
Рез = Чис1 + Чис2
писали громоздкое
Результат.Text = Val(Число1.Text) + Val(Число2.Text)
Вообще, попытки использовать для вычислений вместо переменных текстовые поля напоминает попытку неуклюжих королей-тугодумов (текстовых полей) из разных государств договориться между собой. После безуспешных попыток они вызывают своих шустрых министров иностранных дел (переменные величины), которые в два счета договариваются и отдают готовый договор на подпись королям (имеется в виду, что результат вычислений показывается в текстовом поле).
Улучшаем калькулятор. С учетом сказанного попробуем улучшить программу калькулятора:
Public Class Form1
Inherits System.Windows.Forms.Form
Windows Form Designer generated code
Dim Чис1 As Double 'Переменная, содержащая число из текстового поля Число1
Dim Чис2 As Double 'Переменная, содержащая число из текстового поля Число2
Dim Рез As Double 'Переменная-результат, предназначенный для текстового поля Результат
Private Sub Кл_сложения_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Кл_сложения.Click
Чис1 = Число1.Text 'Значения исходных данных переходят из текстовых полей в переменные
Чис2 = Число2.Text
Рез = Чис1 + Чис2 'Обработка переменных для получения результата
Результат.Text = Рез 'Значение результата переходит из переменной в текстовое поле
End Sub
Private Sub Кл_вычитания_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Кл_вычитания.Click
Чис1 = Число1.Text
Чис2 = Число2.Text
Рез = Чис1 - Чис2
Результат.Text = Рез
End Sub
Здесь не показаны процедуры умножения и деления, так как они совершенно аналогичны процедурам сложения и вычитания. Переменные Чис1, Чис2 и Рез встречаются в каждой процедуре, поэтому в данном случае удобно объявлять их не в каждой процедуре, а один раз – вне процедур. Теперь каждая процедура может этими переменными пользоваться. Переменными же, объявленными внутри процедуры, может пользоваться только процедура, в которой они объявлены, а другие не могут. Традиционно объявления таких «общих» переменных делаются перед текстом всех процедур, как это сделал я.
Остальное ясно из комментариев к тексту программы. Нельзя сказать, что программа стала короче, мы пока не умеем писать короткие программы. Зато мы получили возможность спокойно работать с переменными, а эта возможность нам понадобится в будущем, когда мы будем бороться с вводом в текстовые поля нечисловой информации.
Эта схема, когда информация из текстовых полей (или других средств задания исходных данных) передается в переменные, затем обрабатывается, а уж затем из переменных передается обратно – в текстовые поля – весьма разумна и я рекомендую ей пользоваться.
Три совета. Дорогие читатели-новички! Вот вам три моих совета, по своей силе приближающихся к непререкаемым приказам:
1. Программы, которые вы видите в книге, вам необходимо вводить в компьютер и выполнять их, даже если они кажутся вам понятными, и даже если я явно этого не требую. В ряде случаев вы получите неожиданные результаты, из чего сделаете вывод, что программы эти вы поняли не до конца и «как хорошо, что я не поленился их проверить».
2. В каждой из этих программ экспериментируйте, то есть разными способами изменяйте в них то, что я как раз в этот момент объясняю. Например, если я объясняю оператор For i=1 To 5, пробуйте For i=1 To 10 и смотрите, что будет.
3. Выполняйте и сверяйте с ответом все задания. Это, конечно, главный совет из трех. Учтите, что сверенная с ответом правильно работающая программа – ваша победа, сверенная с ответом неправильно работающая программа – временное поражение, отказ от сверки – разгром.
Если вы пожалеете времени и пренебрежете этими советами, то через несколько страниц можете обнаружить трудности в понимании материала и вскоре не сможете правильно составить большинство программ.
File
New ® Project. Удаляет из среды все открытые проекты и создает новый проект.
Open ® Project. Удаляет из среды все открытые проекты и открывает для работы один из проектов, сохраненных вами ранее.
Add Project ® New Project. Если у вас в среде уже открыты проекты, то добавляет к ним новый пустой проект.
Add Project ® Existing Project. Если у вас в среде уже открыты проекты, то добавляет к ним один из проектов, сохраненных вами ранее.
Close Solution. Удаляет из среды решение, то есть все проекты.
Save All. Сохраняет решение, то есть все содержимое всех открытых проектов.
Print. Распечатывает программу или другую информацию проекта на принтере.
Page Setup. Настройка печати.
Recent Projects. Небольшой список проектов, с которыми вами велась работа в последнее время. Щелчок по проекту открывает его. Это быстрее, чем Open ® Project.
Exit. Выход из VS.
Format
Это меню имеет дело с размерами, формой и местоположением элементов управления на форме и друг относительно друга, то есть с тем, с чем вы и так прекрасно справляетесь безо всяких меню. Однако, когда элементов управления на форме много и их нужно расположить как-то упорядоченно, это меню помогает сэкономить время.
Меню Format недоступно, когда вы работаете в окне кода или запустили проект.
Смысл пунктов меню показан в Таблица 4.1. В левой части таблицы вы видите открытое меню Format. В центральной части таблицы я для удобства поместил соответствующую панель инструментов VS для выполнения тех же действий. О панелях инструментов читайте в следующем разделе.
Создайте проект. Расположите на форме несколько кнопок, меток и других элементов управления разной величины и продолговатости. Выделите один или несколько объектов на форме. Чтобы выделить несколько объектов, щелкайте по ним при нажатой клавише Ctrl или обведите их рамочкой. Попробуйте применить эти пункты. Посмотрите, что получится. Это тот случай, когда легче понять на опыте, чем разбираться в объяснениях.
Меню Format | Панель инструментов Layout | Смысл инструментов | |||
Левый верхний угол выделенного элемента управления совмещается с ближайшим узлом сетки | |||||
Выравнивание выделенных эл-в управления по горизонтали | |||||
Выравнивание выделенных эл-в управления по вертикали | |||||
Выравнивание выделенных эл-в упр-я по ширине, высоте, размеру | |||||
Выравнивание горизонтального промежутка между выделенными эл-ми упр-я, увеличение, уменьшение, уничтожение его. | |||||
Выравнивание вертикального промежутка между выделенными эл-ми упр-я, увеличение, уменьшение, уничтожение его. | |||||
Центрирование выделенных эл-в упр-я на форме по горизонтали и вертикали | |||||
Перенесение выделенных эл-в упр-я на передний или задний план | |||||
«Запирание» и «отпирание» выделенных эл-в упр-я | |||||
Таблица 4.1
Пояснения:
В пунктах Align и Make Same Size выравнивание осуществляется относительно элемента управления, выделенного последним.
Order. Бывает, что в результате вашего проектирования формы некоторые элементы управления перекрываются другими. Для примера поместите на проект две большие кнопки так, чтобы одна частично или полностью закрывала другую. Тогда приобретает важность вопрос – какой из объектов ближе к вам, а какой дальше. Управлять этим вы можете, выбрав Bring to Front (выдвинуть на передний план) или Send to Back (задвинуть на задний план).
Lock Controls. Иногда неловким движением мыши вы можете сдвинуть или изменить размер объекта в тщательно сконструированном вами проекте. Чтобы этого не произошло, и нужен этот пункт. Объекты примерзнут к месту. Когда вы захотите их разморозить, снова выберите этот пункт.
Форматирование чисел
Одни и те же значения могут выглядеть по-разному. Например, в школьной тетрадке одну и ту же дату вы можете записать так – 25.12.03 и так – 25 декабря 2003 года. Одно и то же число вы можете записать так – 500 и так – 5*102. Что касается VB, то он выбирает внешний вид данных, исходя из своих соображений, которые не всегда совпадают с нашими желаниями. В этом случае возникает необходимость строго указать компьютеру, в каком виде (формате) мы хотим лицезреть то или иное значение.
Взгляните на такую программу:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a As Double = 1230000000000000000
WriteLine(a)
End Sub
Запустите проект. Вот результат:
1,23E+18
Что это значит? Это значит, что VB не любит слишком длинных чисел и представляет их вам не в привычном для обычного человека, а в так называемом экспоненциальном или научном формате. Число 1,23E+18 это то же самое число 1230000000000000000, только выглядящее по-другому. Конструкция E+18 означает просто умножение на 1018. Таким образом, 1,23E+18 означает 1,23*1018. По-другому, вам нужно передвинуть запятую на 18 позиций направо – и получится нормальное число.
А теперь взгляните на такую программу:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim a As Double = 0.00000000000654
WriteLine(a)
End Sub
Результат:
6,54E-12
Конструкция E-12 означает просто умножение на 10-12
или, что то же, деление на 1012. Таким образом, 6,54E-12 означает 6,54*10-12. По-другому, вам нужно передвинуть запятую на 12 позиций налево – и получится нормальное число.
Если после этих объяснений вы все еще не полюбили экспоненциальный формат, вы можете приказать компьютеру, чтобы он вас не утомлял им, а показывал результаты по-человечески. Для этого в операторе WriteLine(a) нужно использовать функцию форматирования, то есть управления внешним видом. Функция эта называется Format. Для конкретности возьмем первую из наших двух программ, ту, где присутствует большое целое число. Здесь нужно вместо a написать Format(a, "#"). Получится
WriteLine(Format(a, "#"))
Символ # внутри кавычек означает, что вы желаете видеть число в обычном виде и без дробной части. Вот тот же результат в новом формате (проверьте):
1230000000000000000
А теперь разберем наиболее популярные возможности функции Format по форматированию чисел (а форматировать она может, кстати, данные и других типов). Возможности эти иллюстрирует следующая программа:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim a As Double = 12345.67890123
Dim b As Double = -0.0729
WriteLine(Format(a, "#"))
WriteLine(Format(a, "0"))
WriteLine(Format(a, "#.###"))
WriteLine(Format(a, "0.000"))
WriteLine(Format(a, "########.##########"))
WriteLine(Format(a, "00000000.00000000000"))
WriteLine(Format(b, "########.##########"))
WriteLine(Format(b, "00000000.00000000000"))
WriteLine(Format(b, "0.##########"))
WriteLine(Format(b, "P"))
WriteLine(Format(a, "E"))
WriteLine(Format(a, "C"))
WriteLine(Format(a, "Ж###У###Ч###К###А####.#К###А###Ш###Т##А#Н#К#А"))
End Sub
Запустите проект. Вот результаты:
12346
12346
12345,679
12345,679
12345,67890123
00012345,67890123000
-,0729
-00000000,07290000000
-0,0729
-7,29%
1,234568E+004
12345,68р.
ЖУЧК1А2345,6К789А012Ш3ТАНКА
Поясним то, что мы увидели. В скобках функции Format располагаются через запятую два аргумента. Первый аргумент – это то, что мы форматируем – переменная, число, выражение. Второй аргумент – строка в кавычках, при помощи которой мы и управляем внешним видом числа. Символы в кавычках называются символами формата и спецификаторами формата (мы не будем вдаваться в тонкости, объясняя какие из них какие). Вот пояснение действия этих символов (полный смысл символов # и 0 становится ясен по прочтении нескольких строчек таблицы):
Символы и результаты |
Пояснение |
# |
Вы желаете видеть число в обычном виде и без дробной части |
12346 | |
0 |
Вы желаете видеть число в обычном виде и без дробной части |
12346 | |
#.### |
Вы желаете видеть число в обычном виде. После запятой вы желаете видеть не больше 3 знаков, целая часть дроби все равно будет показана полностью |
12345,679 | |
0.000 |
Вы желаете видеть число в обычном виде. После запятой вы желаете видеть ровно 3 знака, целая часть дроби все равно будет показана полностью |
12345,679 | |
########.########## |
После запятой вы желаете видеть не больше 10 знаков. Если целая часть состоит из одного нуля, то ноль перед запятой показан не будет |
12345,67890123 ?,0729 |
|
00000000.00000000000 |
После запятой вы желаете видеть ровно 10 знаков, недостающие места будут заполнены нулями. Если целая часть дроби короче 8 цифр, недостающие места будут заполнены нулями. |
00012345,67890123000 ?00000000,07290000000 |
|
0.########## |
Слева от запятой действуют «законы 0», а справа – «законы #» |
?0,0729 | |
P |
Число переводится в проценты умножением на 100 и добавлением знака % |
-7,29% | |
E |
Число показывается в экспоненциальном виде |
1,234568E+004 | |
C |
Число показывается в виде валюты страны, на которую настроена Windows |
12 345,68р. | |
Последняя строчка процедуры «с Жучкой и Каштанкой» показывает, что внутрь кавычек мы можем добавлять любые символы и они будут отображены на соответствующих местах. Это открывает перед нами возможности необычного форматирования. Надо только, чтобы эти символы не совпадали со стандартными, а то VB спутается. |
Результат.Text = Val(Число1.Text) / Val(Число2.Text)
можете написать
Результат.Text = Format(Val(Число1.Text) / Val(Число2.Text), "0.####################")
Только имейте в виду – если ваш результат будет такой маленький, что двадцати цифр, указанных мной после точки, не хватит, то ничего, кроме нулей, вы и не увидите, а вот экспоненциальный формат покажет вам результат, пусть и непривычный для чтения.
Фейерверк возможностей
В этой главе на примере создания двух проектов – Калькулятора и Плеера – я хочу познакомить вас с простыми и приятными возможностями VB. Глава поневоле носит несколько рекламный оттенок. Перед вами распахнется скатерть-самобранка, на которой вы увидите в основном то, что повкуснее и не требует разгрызания. Однако, среди вкусного абсолютно все полезно, и почти все совершенно необходимо. Несмотря на легкость материала, эта глава служит фундаментом для остальных, поэтому читать ее «по диагонали» никак нельзя, без нее не будет понятно дальнейшее.
Объекты и пространства имен
В предыдущей главе вы познакомились с некоторыми объектами (кнопка, метка и т.п.), их свойствами (Width, BackColor и др.) и методами (Hide, Show). Вся мощь ваших возможностей в VB определяется тем, с каким количеством объектов, их свойств, методов и других элементов вы знакомы и умеете правильно пользоваться.
Все стандартные объекты вам предоставляет Библиотека классов .NET Framework, о которой я упоминал во Введении. Для начинающего данная библиотека кажется лабиринтом. В этой главе мы поучимся передвигаться по лабиринту в поисках нужного нам объекта, а заодно и познакомимся с некоторыми из объектов.
Понятие объекта – центральное в VB и достаточно сложное для новичка. Углублять это понятие мы будем на всем протяжении книги.
Переменные величины
Чтобы сделать в VB что-нибудь более существенное, чем примитивные калькулятор и плеер, нам нужно резко увеличить объем знаний о VB. Первая ступенька на лестнице набора знаний – переменные величины. Удовольствие больше для Холмса, чем для Джекки Чана. Но что может сделать Джекки Чан с Холмсом?
Первые шаги
В этой главе вы создадите и опробуете на компьютере свою самую первую программу на VB. Для этого глава и написана.
Работа в среде Visual Studio NET
Начиная со следующей главы мы будем изучать программирование уже по-серьезному. Но выходя на бой, нужно привыкнуть к доспехам. Не будем ли мы спотыкаться в нашей броне? Наша броня – Visual Studio .NET. Мы не можем допустить, чтобы головоломка из окон, панелей инструментов, меню и кнопок среды VS стала для нас камнем преткновения. И наоборот – знание VS придаст нашему программированию необходимые удобство и мощь. Поэтому сейчас мы будем изучать именно работу в среде VS, то есть программировать не будем, а будем учиться нажимать на кнопки.
Не все, что здесь изложено, пригодится вам немедленно, но даже если вы очень спешите, внимательно проглядите весь материал главы, чтобы, когда возникнет необходимость, знать, что для решения возникшей проблемы средство есть и вы о нем где-то читали. В любом случае когда-нибудь в будущем, споткнувшись в очередной раз, вы бросите все и изучите эту главу систематически.
Если вы решили изучать книжку, начиная с этой главы, знайте, что самые основы работы в среде VS уже изложены в 1.3 и далее на примерах создания проектов. В частности, в 1.3.3 кратко описана работа с Toolbox, в 3.2.1 – с окном свойств.
Кроме этого, некоторую часть материала, относящегося к среде VS, мне показалось уместным изложить позже, в тех местах книги, где в них возникнет необходимость. Вот эти места: Глава 9. «Отладка программы», 11.5.9«IntelliSense», 21.3«Структура проекта и решения. Окно Solution Explorer.», 24.4«Работа в VS с базами данных без проекта с помощью Server Explorer».
Все остальное изложено здесь.
В этой же главе я кратко излагаю процесс инсталляции Visual Studio .NET на ваш компьютер и порядок установки вашего готового проекта на другие компьютеры. Если вы даже не собираетесь делать ни того, ни другого, все равно внимательно проглядите этот материал, так как в нем содержатся необходимые сведения о VS.
Главное меню
Какое же приложение Windows без своего меню?! Нашему калькулятору оно, вроде бы, ни к чему, но, все равно, интересно и полезно сделать хотя бы простенькое.
Главное меню Visual Studio NET
А теперь кратко рассмотрим все нужные нам на первых порах пункты главного меню среды VS. О многих из них мы уже говорили или будем говорить позже и поэтому они здесь только упомянуты.
Обратите внимание, что меню VS и отдельные его пункты значительно меняют свое содержание в зависимости от того, что мы сейчас делаем. Так, пункт Format не виден (как ненужный), когда мы работаем в окне кода.
Help
Когда вы пишете оператор на VB, вы должны, во-первых, понимать, что он означает и что означает каждая его часть, а во-вторых, вы должны знать правила его записи. К тому же библиотека классов .NET Framework чрезвычайно богата, в нее входят тысячи элементов – свойств, событий и др. Невозможно запомнить смысл и правила записи каждого элемента. Вот здесь-то и нужен Help – система помощи, которая позволит вам быстро найти информацию по любому элементу. Если, конечно, вы знаете английский.
Пользоваться помощью VB можно по-разному. Самый распространенный способ – такой:
F1. Если вы хотите узнать подробности о каком-то слове из вашей программы, например, Width, вы щелчком мыши ставите на него текстовый курсор и нажимаете на клавиатуре клавишу F1. Появляется окно с пояснениями или указаниями (обычно оно присоединяется к центральной группе окон). Вы узнаете, какому классу принадлежит интересующее вас свойство или, скажем, метод. Если вы спрашиваете об объекте, то узнаете, какому пространству имен принадлежит его класс. По ссылке Members (компоненты) из окна помощи узнаете все свойства, методы и другие элементы, принадлежащие данному классу. Свойств здесь, между прочим, вы найдете больше, чем в окне свойств, так как здесь приведены и те свойства, которые имеют смысл только в режиме [run]. Например, свойство SelectedText объекта TextBox, которое выдает фрагмент текста, выделенного нами в текстовом поле.
По ссылке Overview прочтете общие слова и основной материал, касающийся данного класса, и т.д.
Нижеперечисленные средства помощи вы найдете в пункте Help главного меню VS.
Dynamic Help. Это еще более удобный способ. Выберите этот пункт. Перед вами появляется окно Dynamic Help (динамическая помощь). Поместите его в одну из групп окон. Когда вы вводите программный текст, это окно рекомендую держать открытым. В процессе ввода текста VB видит, какое слово и какой оператор вы вводите, и без вашей просьбы выводит в окно Dynamic Help заголовки справок по этому слову и по этому оператору, и по другим словам в операторе, а также заголовки справок по сопутствующим темам. Вам остается только в случае необходимости выбрать нужный заголовок. Аналогичная информация появляется и когда вы просто щелкнете мышью на любом слове программы. Аналогичная же полезная информация, касающаяся уже не слов VB, а вашей деятельности, появляется в этом окне, когда вы работаете в окне конструктора и в других окнах.
Contents представляет вам информацию о VB в систематизированном виде. Здесь вы лучше всего узнаете, что в VB есть, а чего нет. Но помните, что это не учебник, а справка.
Index удобен тогда, когда вы заранее знаете название элемента, который вас интересует (например, Button). Вы вводите это слово в поле и видите заголовки справок по этому слову.
Search. Этот пункт полезен тогда, когда вы ищете информацию не только по конкретным словам VB, но и по набору слов, например, «window types».
Show Start Page. Этот пункт к справке не относится, но полезен тем, что вызывает на экран стартовую страницу.
Имена переменных Ключевые слова VB
Как правильно давать имена элементам VB, мы уже говорили. Повторю:
Имя может состоять из букв, цифр и знаков подчеркивания, причем не должно начинаться с цифры. И не должно состоять из одних подчеркиваний.
Правда, в VB имя определяется несколько более широко, но то правило, которое я дал, можно считать хорошим советом.
В школе переменные величины мы привыкли обозначать буквами (a, s, d ... ). Большинство языков программирования, в том числе и VB, позволяет обозначать переменные именами из многих букв. Вот два равносильных фрагмента программы:
a=3; | Summa=3; | ||
b=4+a; | ШУРА=4+Summa; | ||
Debug.WriteLine(a, b) | Debug.WriteLine(Summa, ШУРА) |
В том и другом случае будут напечатаны числа 3 и 7. Очевидно, компьютеру все равно, какими именами мы обозначаем переменные величины или другие элементы, в смысл имен он не вдумывается и не удивляется, что переменная Summa никакой суммой не является, а просто числом 3.
Примеры правильной
записи имен:
a
s25
oshibka
polnaja_Summmma
_1
__________tri_plus_dva__a1b88qqQQQQQQQQQQQQ
_Это_не_имя_Уж_поверьте
Примеры неправильной
записи имен:
polnaja summa | содержится символ (пробел), не являющийся буквой, цифрой или знаком подчеркивания | ||
1 | начинается с цифры | ||
8as | начинается с цифры | ||
Domby&Son | содержится символ & , не являющийся буквой, цифрой или знаком подчеркивания | ||
Это верное имя Да да да | содержится символ (пробел), не являющийся буквой, цифрой или знаком подчеркивания |
VB игнорирует в именах разницу между строчными и прописными буквами. Так, для него Summa
и sUmmA – одно и то же имя. Но он присматривает за тем, чтобы в окне кода данное конкретное имя было написано всегда одинаково, а именно так, как объявлено (правда, я не уверен, что он так присматривает за всеми русскими буквами, во всяком случае Visual Basic 6.0 не всегда присматривал).
Ключевые слова. Ключевые слова (Keywords) – это служебные слова VB, которые он широко использует в тексте программы. Мы уже знакомы с некоторыми из них: Dim, Integer, Double, Sub и др. В нижеприведенной таблице перечислены все ключевые слова VB.
AddHandler |
AddressOf |
Alias |
And |
AndAlso |
Ansi |
As |
Assembly |
Auto |
Boolean |
ByRef |
Byte |
ByVal |
Call |
Case |
Catch |
CBool |
CByte |
CChar |
CDate |
CDec |
CDbl |
Char |
CInt |
Class |
CLng |
CObj |
Const |
CShort |
CSng |
CStr |
CType |
Date |
Decimal |
Declare |
Default |
Delegate |
Dim |
DirectCast |
Do |
Double |
Each |
Else |
ElseIf |
End |
Enum |
Erase |
Error |
Event |
Exit |
#ExternalSource |
False |
Finally |
For |
Friend |
Function |
Get |
GetType |
GoTo |
Handles |
If |
Implements |
Imports |
In |
Inherits |
Integer |
Interface |
Is |
Let |
Lib |
Like |
Long |
Loop |
Me |
Mod |
Module |
MustInherit |
MustOverride |
MyBase |
MyClass |
Namespace |
New |
Next |
Not |
Nothing |
NotInheritable |
NotOverridable |
Object |
On |
Option |
Optional |
Or |
OrElse |
Overloads |
Overridable |
Overrides |
ParamArray |
Preserve |
Private |
Property |
Protected |
Public |
RaiseEvent |
ReadOnly |
ReDim |
#Region |
REM |
RemoveHandler |
Resume |
Return |
Select |
Set |
Shadows |
Shared |
Short |
Single |
Static |
Step |
Stop |
String |
Structure |
Sub |
SyncLock |
Then |
Throw |
To |
True |
Try |
TypeOf |
Unicode |
Until |
Variant |
When |
While |
With |
WithEvents |
WriteOnly |
Xor |
#Const |
#ExternalSource |
#If...Then...#Else |
#Region |
- |
& |
&= |
* |
*= |
/ |
/= |
\ |
\= |
^ |
^= |
+ |
+= |
= |
-= |
Dim [Sub] As Integer
[Sub] = 99
Я также не рекомендую использовать на первых порах в качестве имен для создаваемых вами переменных имена популярных объектов, их свойств, методов и др. Например, если вы назовете переменную именем Button1, BackColor или WriteLine, то VB, может, и не спутается, но спутаетесь вы.
Называем по-русски. Взгляните в текст любой программы. Он состоит в основном из ключевых слов на английском (на латинице) и имен. Причем и тех и других так много, что глаза разбегаются и непонятно, где ключевое слово, а где имя. А если это имя – то создано ли оно программистом или взято из библиотеки классов .NET Framework – сразу не поймешь. Нам, русскоязычным, здесь удобнее: мы можем имена давать на русском (на кириллице). Разница между английскими и русскими буквами сразу бросается в глаза и разбирать текст программы становится не в пример легче: все, что мы создали сами, названо по-русски, а все, что досталось от VB – по-английски. Я так и делаю.
InputBox
Как мы можем задать, сообщить компьютеру какую-нибудь величину? Оператором присваивания – раз. А теперь рассмотрим еще один удобный и приятный способ – InputBox.
В вашем проекте о прямоугольнике вы можете хоть сто раз нажимать на кнопку – результаты все время будут одинаковые. Это потому что исходные данные a=27018 и b=3954 никто не меняет. Скучно. Хорошо бы компьютер при нажатии на кнопку каждый раз спрашивал нас, чему на этот раз равны стороны прямоугольника. А мы бы ему отвечали. А уж потом он вычислял.
Для этого нам нужно слегка изменить программу. Скопируйте папку предыдущего проекта и работайте над копией. Вот что у вас должно быть в процедуре нажатия на кнопку:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a, b, S
a = InputBox("Введите длину прямоугольника")
b = InputBox("Введите ширину прямоугольника")
S = a * b 'Площадь
Debug.WriteLine(S)
End Sub
Сравните с предыдущей программой. Как видите, заменены первые две строки: a=27018 и b=3954. Также из учебных соображений выкинуто все, касающееся периметра.
Конструкция
a = InputBox("Введите длину прямоугольника")
есть оператор присваивания и означает она приказ компьютеру вывести сначала на экран такое окно, как на Рис. 5.1.
Рис. 5.1
После этого человек вводит в белое текстовое поле этого окна любое число и нажимает ОК. Далее компьютер присваивает переменной a введенное значение и продолжает работу, то есть переходит к выполнению следующего оператора.
Если вам не нравится строка WindowsApplication1 в заголовке окна, то вы можете задать свою строку, дополнив оператор следующим образом:
a = InputBox("Введите длину прямоугольника", "Ввод данных")
Результат вы видите на Рис. 5.2.
Рис. 5.2
Запустите проект. Проверьте его работу.
Если при вводе вы нажимаете не кнопку ОК, а кнопку Cancel или крестик, VB считает, что вы не «отменили ввод», а ввели так называемую пустую строку (что это такое, выяснится позже, сейчас достаточно знать, что выполнять умножение над пустыми строками бессмысленно и VB выдаст ошибку).
Не вводите также нечисловую информацию, иначе VB по той же причине выдаст ошибку.
Инсталляция Visual Studio NET
Чтобы работать с VB, на вашем компьютере должна быть установлена (инсталлирована) Visual Studio .NET.
Если вы не знаете, установлена ли VS на вашем компьютере, попробуйте запустить ее из стартового меню, где она должна находиться в Программах под именем Microsoft Visual Studio .NET или Microsoft Visual Studio .NET 2003. Если в стартовом меню ее нет, то почти наверняка она не установлена. Есть еще способ проверки – посмотреть в Панели управления Windows, в пункте Установка и удаление программ. Самый лучший способ – добраться до запускающего файла программы. Вот его адрес: Program Files \ Microsoft Visual Studio .NET 2003 \ Common7 \ IDE \ devenv.exe. Сделайте по нему двойной щелчок – если VS запустится – все в порядке.
Если VS не установлена, ее надо установить. Если вы никогда ничего не устанавливали, то в начале 4.6 вы можете прочесть, что такое установка программ на компьютере вообще. По правде говоря, инсталляция VS – дело не для новичка. Но если рядом нет никого, кто мог бы вам помочь …? В общем, смело вперед. Вероятность того, что у вас получится, достаточно велика.
VS предъявляет довольно высокие требования к компьютеру и операционной системе. Требования эти быстро меняются от года к году. В 2004 году требовался как минимум Pentium II – 450 Мгц с 192 Mb памяти, а рекомендовался Pentium III – 600 Мгц с 256 Mb памяти. Что касается операционных систем, то полную функциональность программирования могли обеспечить только Windows 2000, Windows XP Professional и Windows Server 2003.
Чтобы установить VS, вам нужен инсталляционный пакет компакт-дисков. На разных компьютерах и для разных версий Windows установка идет немного по-разному.
Вот последовательность ваших действий по установке VS:
Вставьте диск №1 из пакета в дисковод CD-ROM. Для этого нужно сначала нажать на кнопку дисковода и подождать, когда из него выдвинется поднос для диска. Аккуратно, без перекосов, установите диск на поднос блестящей ненадписанной стороной вниз. Старайтесь не дотрагиваться до блестящей поверхности пальцами. Снова нажмите на кнопку дисковода. Поднос вдвинется в дисковод, унося с собой диск.
Далее возможно одно из двух. Если автоматически запустится мастер установки, то перепрыгните через два пункта (к пункту «Начнет работу мастер инсталляции»). Если же через пару минут ничего не произошло, то читайте следующий пункт.
Вам нужно добраться до файла Setup.exe на компакт-диске. Для этого зайдите в значок Мой компьютер на рабочем столе Windows (или в стартовом меню) и найдите в открывшемся окне значок дисковода CD-ROM. Щелкните по нему правой клавишей мыши и в возникшем контекстном меню выберите пункт «Открыть». Перед вами откроется окно со списком папок и файлов компакт-диска.
Найдите в этом окне файл Setup.exe и двойным щелчком запустите его на выполнение.
Начнет работу мастер инсталляции. Он ведет всю установку. Ваши действия задаются мастером. Ваше дело – отвечать на его вопросы и выбирать из предложенных вариантов. Время от времени вам придется выполнять просьбу мастера вставить в дисковод другой диск. Иногда компьютер будет просить вас перезагрузиться, иногда – согласиться на условия лицензирования (чтобы показать, что вы согласны на эти условия, выбирайте пункт I agree или I accept). Сейчас я по порядку рассмотрю ключевые моменты установки.
Прежде чем устанавливать на ваш компьютер собственно программу VS мастер установки должен установить целый ряд программ, примерный список которых вы видите на Рис. 4.3 и без которых VS работать не может. Так как на большинстве компьютеров этих программ нет, то в инсталляционном пакете VS они предусмотрительно содержатся. Поэтому через некоторое время вы увидите окно установки (Рис. 4.1) с выделенным шагом 1. Это значит, что компьютер обнаружил отсутствие некоторых нужных программ и предлагает их установить.
Рис. 4.1
Щелкните шаг 1. Через некоторое время вы увидите (Рис. 4.2) сообщение, которое заинтересует тех, кто собирается разрабатывать и размещать на своем компьютере Web-приложения (см. Глава 23. ) и использовать свой компьютер, как Web-сервер.
Рис. 4.2
Если не собираетесь, то нажмите Skip и переходите к следующему пункту. Если собираетесь, то щелкните Setup Instructions. В появившейся инструкции вы прочтете, что вам придется немедленно дополнить установку операционной системы Windows, добавив в нее и настроив так называемые Internet Information Services и FrontPage Server Extensions. Там же подробно указывается, как это сделать. Сохраните эту инструкцию, иначе потом до нее не доберетесь. Сделайте то, что в ней сказано. Для этого вам может понадобится системный диск Windows. После того, как инструкция выполнена, возвращайтесь к установке VS. Снова вставьте 1 диск и щелкните по 1 шагу установки.
Теперь компьютер показывает вам (Рис. 4.3), каких именно программ ему недостает для начала установки VS:
Рис. 4.3
Главными среди этих программ являются Internet Explorer 6 и .NET Framework. Последняя является даже не программой, а, как я уже говорил, целой платформой, на которой основывается работа не только VS, но и других программ. Она настолько важна, что фирма Microsoft собирается включить ее в следующую версию Windows. Нажимайте Install Now и выполняйте все, что скажет мастер, пока не установятся все необходимые программы. Наконец вы увидите ту же самую картинку, что на Рис. 4.3, но против каждой программы будет поставлена галочка в знак того, что программа установлена. Нажимайте Done. 1 шаг установки завершен.
Вскоре мастер покажет вам картинку (Рис. 4.4) в знак того, что можно приступать ко 2 шагу инсталляции, то есть уже непосредственно к установке VS.
Рис. 4.4
Щелкайте шаг 2.
После заключения лицензионного соглашения вам будет предоставлена возможность выбирать компоненты VS, которые вы хотите установить (Рис. 4.5).
Рис. 4.5
Установите флажок у Visual Basic .NET. Снимите флажки у Visual C++ .NET, у Visual C# и у Visual J#. Если вы хотите пользоваться полными возможностями VS, установите все остальные флажки, как показано на рисунке. Если вы хотите немного сэкономить место на диске, то оставьте их так, как предлагает мастер. Если у вас совсем уж не хватает места, вы можете их даже снять. В этом случае вам придется смириться с тем, что некоторые возможности VS будут недоступны. Таблица справа сверху показывает вам объем выделенного компонента, поле посредине – его смысл, а диаграмма справа снизу – свободное место на диске.
Нажимайте Install Now. Компьютер довольно долго копирует файлы с инсталляционных дисков на жесткий диск и наконец выдает картинку с сообщением, что 2 шаг установки завершен (Рис. 4.6).
Рис. 4.6
Нажимайте Done.
Компьютер показывает такую же картинку, как на Рис. 4.4, но с выделенным 3 шагом. Вам предлагается установить справочную библиотеку MSDN Library, которая одновременно является основой системы Help.
Щелкайте шаг 3. На ваш компьютер будет установлена MSDN Library. В процессе установки вы увидите ряд окон. Названия этих окон в порядке их появления и указатель на текущее окно вы можете видеть на Рис. 4.7 в левом столбце. В том числе вы увидите окно лицензионного соглашения (выбирайте пункт I agree или I accept) и окна, сообщающие вам ту или иную информацию (нажимайте Next, что значит «Дальше»).
В одном из окон вам нужно будет выбрать тип установки (Рис. 4.7).
Рис. 4.7
Выбирайте одно из трех:
Full – полная установка (требует 1,8 Гигабайта на диске).
Minimum – минимальная установка. Требует 620 Мегабайтов на диске. Для начинающих этого достаточно. В случае необходимости вы всегда можете получить информацию с компакт-диска.
Custom – выборочная установка – для опытных программистов, которые знают, как устроена MSDN Library.
В окне Ready to Install нажимайте кнопку Install – мастер приступит к длительному копированию файлов на ваш компьютер, после чего окном Finish завершит установку MSDN Library.
После установки MSDN Library шаг 4 предлагает сделать апгрейд VS через Интернет или со специального диска. Если не хотите, нажимайте Exit.
Установка VS закончена. После окончания инсталляции можете вынуть компакт-диск и запускать Visual Studio .NET.
Integer, Long, Short, Byte – целые числа
Создайте проект с кнопкой и введите такую программу:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim a, b, c As Integer
a = 201234567
b = 201234567
c = a + b
WriteLine(c)
End Sub
Каждая из переменных a и b имеет значение где-то около 200 миллионов. Работает программа нормально. Вот результат:
402469134
Посмотрим, насколько большие числа способна воспринимать наша программа. Добавим пару цифр к значению a:
a = 20123456789
VB подчеркивает литерал и выдает всплывающую подсказку об ошибке, в которой мы видим слово Integer. В чем дело?
Как видно из таблицы, число типа Integer занимает в памяти 4 байта. Значит, под переменные а и b компьютер отводит в памяти ячейки по 4 байта каждая. 4 байта – это небольшой объем памяти и уместиться в него может целое число не слишком большого размера, а именно, как мы видим в таблице – в диапазоне плюс-минус два миллиарда с небольшим. Мы же, дописав две цифры, превысили это число, вот VB и сказал нам, что типу Integer не по чину быть таким большим.
Зададим а и b значения двухмиллиардные:
a = 2012345678
b = 2012345678
VB не возражает, но когда мы запускаем проект и нажимаем на кнопку, выдает сообщение об ошибке, в котором мы видим слово overflow, что означает «переполнение».
Дело в том, что суммируя, вычитая или умножая числа типа Integer, VB присматривает, чтобы и результат умещался в тип Integer. Ведь два миллиарда плюс два миллиарда будет четыре миллиарда, а это слишком много для Integer.
Что же делать, если нам нужно больше? В этом случае наши переменные должны быть рассчитаны на более длинные числа. Для того, чтобы переменная имела право принимать значения очень больших целых чисел, она должна быть объявлена не как Integer, а как Long
(Длинное Целое). Под переменную типа Long компьютер, как мы видим в таблице, отводит в памяти 8 байтов и поэтому она может принимать значения чисел длиной в 19 цифр.
Объявите все три переменные, как Long. Тогда все будет в порядке. Вы скажете: это нелогично, достаточно было объявить типом Long одну переменную c! Попробуйте и посмотрите, будет ли работать программа. Не работает. Опять overflow! VB считает, что так безопаснее. Строговато, но делать нечего. Впредь объявляйте все
переменные, участвующие в вычислениях, самым вместительным типом из тех, что могут понадобиться для результатов вычислений.
Зачем нужен Integer, если есть Long? Ну, хотя бы для того, чтобы экономить память. Из соображений экономии можно использовать и типы Short и Byte (см. таблицу).
Задание 10.
Население Москвы равняется а=9000000 жителей. Население Васюков равняется b=1000 жителей. Вся Москва переехала в Васюки. Сколько там стало жителей? Используйте переменные величины – сначала типа Short, а когда не получится – Integer.
Экономим чернила
Все-таки операторы у нас получаются очень длинные. Нельзя ли записывать их покороче? Можно. Есть два способа.
Как мы в дальнейшем улучшим наш калькулятор
Обеспечим вразумительные сообщения об ошибке при делении на ноль и при неправильном вводе чисел в текстовые поля.
Снабдим его паролем, чтобы все, кому не лень, не могли наслаждаться его возможностями (то и другое см. в 7.7).
Обеспечим привычный для глаз вид результатов (см. 5.4.7).
Но для этого нужно знать переменные величины.
Как увидеть значение переменной величины
Необходимо помнить, что если слева от знака равенства стоит переменная величина, то VB выполняет оператор присваивания «в уме». Это значит, что результат его выполнения не отображается на экране, а только запоминается. Вы будете глядеть на экран, на котором ничего не изменилось, и не будете знать не только значения переменной величины, но даже выполнился ли вообще оператор или нет. Как же все-таки узнать значение переменной величины? Первый способ такой.
В метке и текстовом поле. Садитесь за компьютер, создайте проект, в нем – кнопку, метку и текстовое поле. Запишите для кнопки такую процедуру:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim
a, b
a = 5 + 5
b = a + 2
Label1.Text
= a
TextBox1.Text
= b
End Sub
Оператор Dim «объявляет» переменные величины. Зачем это нужно, написано в 5.2, а пока скажу, что все
переменные нужно сначала объявить, а уж потом пользоваться. Запустив проект и щелкнув по кнопке, вы увидите в метке число 10, а в текстовом поле – число 12.
При помощи Debug.WriteLine. Для учебных целей и для отладки программ вместо меток и текстовых полей удобней пользоваться оператором Debug.WriteLine (его применение уже описано в 2.1.2). Создайте вторую кнопку и запишите для нее процедуру:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim a, b
a = 5 + 5
b = a + 2
Debug.WriteLine(a)
Debug.WriteLine(b)
End Sub
Запустив проект и щелкнув по кнопке, вы увидите числа 10 и 12 в окне Output. Если вы не видите окна Output, то ваши действия: View ® Other Windows ® Output.
Есть много и других способов увидеть значения переменных величин, но о них позже.
Как VB реагирует на наши ошибки
В 1.1 на примере похода на футбол я уже показал вам, к каким катастрофическим последствиям могут привести ошибки в программе. Что будет, если вы допустите ошибку в программе на VB? Это зависит от того, что это за ошибка и сумеет ли VB ее своевременно обнаружить. Рассмотрим 3 типа ошибок.
Смысловые ошибки – 1. Итак, вы сохранили свой первый проект. Закройте его – File ® Close Solution. Создайте новый проект. Он предназначен для того, чтобы мы намеренно допускали в нем ошибки и учились их исправлять. Назовите проект как-нибудь, например, «Ошибки». Поместите на форму одну-единственную кнопку (Рис. 1.15).
Рис. 1.15
В режиме проектирования сделайте двойной щелчок по этой кнопке и в возникшей заготовке процедуры в окне кода введите такой код:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a = 90
Button1.Width = 100 - a
End Sub
Поясним его.
Оператор Dim a = 90 означает «Объявим, что существует переменная a и присвоим ей значение 90». Другими словами, «Пусть а будет равно 90». Оператор Button1.Width = 100 - a означает «Сделать ширину кнопки Button1 равной 100 – a», то есть в нашем случае 10. Если вы подзабыли, что такое переменная величина, читайте 5.1.
Запустите проект, нажмите кнопку. Кнопка стала слишком узкой, так как 10 – достаточно маленькая величина. Мы склонны считать это нашей ошибкой, но не можем требовать от VB, чтобы он такие ошибки обнаруживал. Действительно, откуда ему знать, может, нам нравится иметь такие узенькие кнопки. Таким образом, существуют смысловые (с точки зрения человека) ошибки в коде и дизайне проекта, которые VB ошибками не считает и поэтому не обнаруживает и в принципе обнаруживать не должен.
Смысловые ошибки – 2. Завершите выполнение проекта. Изменим код процедуры (я показываю только тело):
Dim a = 300
Button1.Width = 100 - a
Явная ерунда. Получается, что ширина кнопки должна стать отрицательной (-200). Так не бывает. Запустите проект, нажмите кнопку. Кнопка исчезает. Завершите выполнение проекта. Вот эту-то ошибочку VB мог бы обнаружить и дать нам знать. Но не захотел. Или не смог. Просто сделал ширину кнопки нулевой. А нам показалось, что она исчезла. Считать ли это недостатком VB? Не знаю. Во всяком случае мы должны знать, что VB не настолько умен и услужлив, чтобы обнаруживать все наши даже явные глупости.
Завершите выполнение проекта. Напоминаю, что перед любым изменением кода или дизайна проекта его выполнение нужно завершать.
Ошибки выполнения. Пока мы VB только ругали. Пришла пора хвалить. Изменим код процедуры:
Dim a = 0
Button1.Width = 100 / a
Знак «/» означает деление. Что получается? Сначала мы требуем, чтобы переменная a стала равной 0, после чего хотим, чтобы число 100 было поделено на 0. Но делить на 0 – не в человеческих силах. Интересно, может быть компьютер сможет то, что не дано человеку? Запустите проект, нажмите кнопку. VB выдает сообщение об ошибке (Рис. 1.16).
Рис. 1.16
Что же произошло? После нажатия кнопки VB начал честно выполнять процедуру и первый оператор Dim a = 0 выполнил без проблем. При выполнении второго оператора он столкнулся с необходимостью деления на 0 и, будучи не в силах это сделать, прервал работу программы и выдал соответствующее сообщение.
Сообщение предназначено для того, чтобы пояснить человеку, знающему английский и имеющему некоторый опыт в программировании, в чем состоит ошибка. Если у вас такого опыта нет, запомните, что слово «overflow» из текста сообщения является часто указанием на деление на 0.
Также VB любезно подсветил оператор, который не сумел выполнить, и пометил стрелкой-указателем строку, в которой он находится. Мы сразу же знаем, где искать ошибку.
Подробнее о том, как справляться с ошибками, вы можете прочитать в Глава 9. , а сейчас жмите кнопку Break в окне сообщения. Выполнение программы прервано, но не завершено. Оно замерло на моменте ошибки. Теперь для разгадки, в чем ошибка, полезно узнать, чему в настоящий момент выполнения программы (то есть перед выполнением помеченного оператора) равны значения переменных, свойств и других элементов проекта. Для этого достаточно поместить курсор мыши на этот элемент, не нажимая, и взглянуть на всплывшую подсказку. На Рис. 1.17 курсор поставлен на свойство Width и мы видим в подсказке, что ширина кнопки равна 96. Это та ширина, которая была до выполнения оператора Button1.Width = 100 / a, то есть та первоначальная ширина кнопки, которую мы видели до момента нажатия на нее.
Рис. 1.17
Поместите курсор на переменную a – и VB вам подскажет, что a действительно в этот момент равна нулю.
Сейчас в нашем простейшем случае вся эта информация не нужна, но в будущем, зная значения переменных, свойств и других элементов проекта на момент ошибки, вы легче ее найдете.
Завершите выполнение проекта нажатием кнопки (Stop Debugging) на панели инструментов и исправьте ошибку.
Итак, VB не в силах обнаружить ошибки выполнения заранее, еще до запуска проекта. Действительно, откуда ему знать, что в момент деления переменная a
будет равна 0? Это ж надо в другую строку заглядывать!
Ошибки выполнения еще называют исключениями (Exceptions).
Однако, существует целый ряд ошибок, которые VB обнаруживает именно заранее. Вот они.
Ошибки компиляции (построения, build errors). Если вы разговариваете с иностранцем, то для того, чтобы он вас понял, ваши предложения должны быть правильно грамматически построены и иметь понятный иностранцу смысл. Компьютер – тот же иностранец, но он кроме этого еще и очень «тупой» иностранец, поэтому все, что вы пишете в окне кода, должно быть абсолютно правильно с точки зрения VB и грамматически и по смыслу, иначе он вас просто не поймет. Я пока не буду углубляться в то, что такое «смысл» с точки зрения VB.
Когда вы запускаете проект на выполнение, VB прежде всего смотрит, нет ли в программе грамматических и смысловых ошибок, и только если все правильно, разрешает проекту выполняться. Этот поиск ошибок происходит даже раньше запуска, еще в процессе ввода вами программного текста в окно кода. Пусть вы неправильно записали слово Width (см. Рис. 1.18) и не заметили этого. Когда вы убираете текстовый курсор из строки, которую вводили, VB уже начинает над строкой работать. Он немного подправляет ее внешний вид, приводя к стандартному. В частности, знаки арифметических операций и знаки равенства берутся в пробелы; расставляются, как положено, заглавные буквы. Но самое главное, VB обнаруживает некоторые ошибки и подчеркивает их волнистой линией.
Рис. 1.18
Поместите курсор мыши на подчеркнутую часть строки, не нажимая, и взгляните на всплывшую подсказку. По тексту ее можно догадаться об ошибке. В нашем случае в тексте подсказки мы видим слово ‘Wids’. Наверное, с ним что-то не в порядке. Исправьте ошибку, подчеркивание пропадет.
Некоторые ошибки VB обнаруживает только тогда, когда вы запускаете проект на выполнение. Бывает, что и вы сами не замечаете подчеркивания и запускаете проект. В обоих случаях VB выдает сообщение (Рис. 1.19):
Рис. 1.19
Переводится оно так: «Были ошибки построения (компиляции, build errors). Продолжать работу проекта?». Это примерно то же самое, что спросить: «Тормоза не работают. Мчимся дальше?». Но даже если вы ответите Yes, VS все равно запустит на выполнение предыдущую версию проекта, в которой еще не было ошибок. Отвечайте No и исправляйте ошибки.
VB ошибается и сам. VB не всегда правильно находит место ошибки, а найдя, часто неправильно определяет, в чем ошибка состоит. Поэтому бывает, что программисту приходится превращаться в детектива, ищущего преступника по недостоверным свидетельским показаниям.
Совет. Я не буду здесь останавливаться на сложном процессе поиска ошибок, так как вы еще к этому не готовы (читайте Глава 9. ). Если VB выдает ошибку, еще раз посмотрите, так ли выглядит ваш код, как положено. Нет ли чего лишнего? Все ли английские буквы в тексте действительно английские, или среди них есть русские? Человеку очень легко спутать английские буквы с русскими того же начертания (особенно букву «с»), компьютер же не спутает никогда и придерется.
Какая польза от переменных величин?
Самая крохотная и простая польза в том, что с их помощью удобно решать несложные вычислительные задачи. Например, даны стороны прямоугольника: a=27018, b=3954. Вычислить его площадь и периметр (напомню, что периметр – это сумма длин сторон прямоугольника).
Создайте проект с кнопкой. Задачу решает следующая программа:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a, b, S, p
a = 27018 'Длина прямоугольника
b = 3954 'Ширина прямоугольника
S = a * b 'Площадь
p = a + a + b + b 'Периметр
Debug.WriteLine(S)
Debug.WriteLine(p)
End Sub
После запуска и щелчка по кнопке вы увидите в окне Output следующие два числа:
106829172
61944
Первое из этих чисел – площадь, второе – периметр. Без применения переменных величин операторы получились бы более громоздкими и менее понятными:
S = 27018 * 3954 'Площадь
p = 27018 + 27018 + 3954 + 3954 'Периметр
что особенно заметно в больших программах. К тому же, чтобы изменить значение длины или ширины, вам достаточно изменить число в одном месте программы, а не в трех.
Есть масса и других преимуществ, которые вы почувствуете в следующих главах.
Какие вам нужны компьютер и Windows?
Visual Studio .NET предъявляет довольно высокие требования к компьютеру и операционной системе. Полную функциональность программирования могут обеспечить только Windows Vista, Windows 2000, Windows XP Professional и Windows Server 2003. Для установки Visual Studio .NET вам понадобится несколько Гигабайтов свободного дискового пространства.
в тексте программы. Зачем они
Комментарии – это пояснения в тексте программы. Зачем они нужны?
Когда человек со стороны посмотрит на вашу программу, например, на эту (из калькулятора)
Private Sub Кл_вычитания_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Кл_вычитания.Click
Результат.Text = Val(Число1.Text) - Val(Число2.Text)
End Sub
он может и не понять, в чем здесь смысл и для какой задачи программа написана. Зачем, например, Val? Да и все остальное… Ну да ладно, если не поймет он, это еще полбеды, а беда наступит тогда, когда вы сами через некоторое время забудете, что здесь к чему.
Любой профессиональный программист знает две вещи. Первая – любая старая программа через 12 месяцев забывается напрочь. Вторая – любая старая программа через 13 месяцев бывает вдруг позарез нужна (например, как исходный материал для новой программы) и поэтому в ней срочно нужно разобраться. Наученный горьким опытом, программист снабжает многие строчки кода собственными комментариями. Из предыдущих трех строк получается вот что:
'Процедура обработки нажатия на кнопку вычитания:
Private Sub Кл_вычитания_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Кл_вычитания.Click
Результат.Text = Val(Число1.Text) - Val(Число2.Text) 'Функция Val нужна для "превращения текста в число"
End Sub
Компьютеру комментарий не нужен, он его не поймет, а если начнет понимать, то ничего хорошего из этого не выйдет. Так что заглядывать в него компьютер не должен. И чтобы ясно показать компьютеру, куда ему не надо заглядывать, программист в каждой строке кода перед комментарием ставит одинарную кавычку. VB, компилируя очередную строку кода, просматривает ее слева направо, и как только наткнется на кавычку, правее уже не глядит. Поэтому правее комментариев писать код нет смысла.
VS для нашего удобства выделяет комментарии зеленым цветом.
Кому предназначена эта книга?
Книга рассчитана на две категории читателей:
На начинающих программистов, в том числе даже на тех читателей, которые в своей жизни не запрограммировали ни строчки и просто хотят научиться программировать. Мало того – в конце книги вы найдете два Приложения, которые подготовят к восприятию книги даже тех, кто вообще никогда не садился за компьютер.
На программистов со средним опытом программирования, которые хотят освоить настоящий объектно-ориентированный язык и узнать, что такое объектно-ориентированное программирование. Они получат то, чего хотели – почувствуют, что значит объекты «на кончиках пальцев». Но им может показаться, что я слишком «разжевываю» материал. Что ж, каюсь: я всегда придерживался того мнения, что лучше «переобъяснить», чем «недообъяснить».
Это самоучитель. Книга написана с расчетом на то, что, изучив ее без посторонней помощи, вы сможете без посторонней помощи составлять программы на VB и выполнять их на компьютере тоже без посторонней помощи. Выражаясь рекламным языком: «Все, что вам нужно знать заранее, это где находится кнопка включения компьютера!». Все остальное в книге объяснено, включая инструкцию по установке VB на ваш компьютер, по работе в Windows и по вводу программного текста в компьютер.
Автор приложил специальные усилия для того, чтобы изложение было понятным. Везде, где можно, я старался объяснить не только то, что
делает компьютер, но и почему он это делает. Все объясняется на примерах. Рассмотрение почти каждой темы заканчивается задачами на составление программы (всего таких задач – 146).
Книга полна, то есть, несмотря на то, что она ориентирована на начинающих программистов, она полностью содержит традиционный материал, излагаемый в учебниках по VB такого же объема. В этом вы можете убедиться, заглянув в оглавление.
После освоения читателем простых учебных программ книга идет дальше и на примере создания реальных проектов объясняет методику написания сложных, солидных программ, дающих читателю ощущение мощи и уверенности в своих силах.
Кратко о NET Framework и о Visual Studio NET
Visual Basic .NET не является отдельной обособленной разработкой. Он создавался в рамках новой идеологии, предложенной компанией Microsoft. Эта идеология получила название .NET (именно так – с предшествующей точкой). Суть идеологии состоит в том, что программирование постепенно перемещается от отдельного компьютера в сеть (NET по-английски – «сеть») и в Интернет, а значит нужно делать упор на программирование в сетях, Интернете. Отсюда также следует, что особое внимание нужно обращать на безопасность выполнения программ. По замыслу ее создателей идеология .NET должна вывести информационный мир на новый уровень использования компьютеров, сетей, Интернета и разработки программ.
Претворяя в жизнь идеологию .NET, фирма Microsoft разработала комплекс программных средств для ее осуществления. Этот всеобъемлющий комплекс принято называть платформой .NET. Предполагается, что эта платформа будет поддерживаться не только Windows, но и другими операционными системами.
Важной составной частью платформы .NET является программный комплекс .NET Framework. Он предназначен специально для разработки программ и для поддержки их выполнения на компьютере. Вы не сможете программировать на VB, если на компьютере не установлен .NET Framework.
.NET Framework включает две основные части:
Библиотеку классов .NET Framework. Для начинающего скажу, что если ваша программа – это домик, то классы – это кубики, из которых строится значительная часть домика. Этих классов в библиотеке содержится много, хватит на постройку любой программы.
Common Language Runtime (CLR). Это часть .NET Framework, которая управляет выполнением вашей программы на компьютере и обеспечивает надежность и безопасность этого выполнения. Вы не сможете выполнить на чужом компьютере программу, созданную на VB, если на нем не установлен CLR. Microsoft собирается включить .NET Framework в будущую версию Windows, так что вскоре проблемы с выполнением программ, созданных на VB, на тех компьютерах, где CLR нет, должны исчезнуть.
Чтобы программировать для платформы .NET, нужны инструменты. Фирма Microsoft разработала в качестве этих инструментов серию тесно взаимосвязанных языков программирования. Вот они:
Visual Basic .NET
Visual C++ .NET
Visual C# .NET
Visual J# .NET
Все они включены в единую программу, которая называется Visual Studio .NET и продается на нескольких дисках. Программа эта включает в качестве своей неотъемлемой части единую среду разработки для всех этих языков и единые вспомогательные средства. Это удобно и должно способствовать легкости переучивания с языка на язык. Инсталляционный пакет Visual Studio .NET включает в себя .NET Framework и все другие необходимые системные программы. Таким образом, установив на свой компьютер Visual Studio .NET, вы можете программировать на любом из упомянутых языков и даже на всех четырех одновременно.
Краткое содержание с рекомендациями
Книга состоит из трех частей и двух приложений:
Часть I. Программирование без программирования.
У этой части две цели:
Научить самым основным и элементарным приемам работы в VB.
Показать, что в VB можно добиваться впечатляющих результатов практически безо всякого программирования.
Доказательством тому – проекты «Калькулятор» и «Плеер», причем «Калькулятор» получится у вас гораздо ярче и забавнее, чем стандартный калькулятор Windows.
Часть II. Программирование на VB – первый уровень. Здесь начинается настоящее программирование. Цель этой части – провести вас от создания самых простых программ до сложных. Здесь вы изучаете программирование на VB самым удобным способом – на примерах, то есть по принципу «делай, как я». Вы научитесь создавать небольшие программы, включающие циклы, ветвления, процедуры и использующие графику и звук. Но дело не ограничивается простыми программами. В этой части подробно разбирается создание трех довольно солидных проектов. Заканчивается часть заданием на самостоятельное создание еще одного такого проекта. Предполагается, что после выполнения этого задания у вас должно возникнуть ощущение всесильности, вы должны почувствовать, что теперь вам по плечу программа любого размера, а все, что может понадобиться в будущем – это дополнительные сведения о работе со всем богатством инструментария VB.
Часть III. Программирование на VB – второй уровень. Цель этой части – снабдить вас этими самыми сведениями об инструментарии VB. Вы познакомитесь с действиями над массивами, коллекциями, строками, файлами, объектами и другими элементами VB. Вы изучите процедуры и функции с параметрами, модули, узнаете, что такое рекурсия и сортировка. Здесь же работа в Интернет, базы данных и, конечно, создание собственных классов объектов, свойств, методов и событий.
Приложение 1. Это теоретический ликбез. Предназначен для тех, кто не знает, как устроен и работает компьютер.
Приложение 2. Это практический ликбез. Предназначен для тех, кто ни разу не садился за компьютер или садился только для игр. Здесь вы научитесь работать с окнами, папками и файлами Windows, вводить в компьютер текст, то есть приобретете все необходимые навыки, чтобы спокойно начать работу в среде Visual Studio .NET.
Не зная материала приложений, вы будете в VB спотыкаться на каждом шагу.
Затем в книге приводятся решения к заданиям и солидный алфавитный указатель.
От автора
Хочу выразить благодарность моим сыновьям: Алексею – за ценное обсуждение теоретических аспектов программирования; Леониду, необходимость консультирования которого по поводу создаваемой им игры The Siege подвигла меня к более глубокому изучению объектов. Но самая большая благодарность – моей жене, Любе, которая взвалила на себя весь груз домашнего хозяйства и несет его уже много лет, наблюдая, как я получаю удовольствие, сидя за компьютером и работая над этой книгой.
К читателю
Буду рад услышать ваши отзывы о книге. Особенно же буду благодарен за критические замечания. Мой e-mail: lukin63@mail.ru.
Математические действия и функции
В этом подразделе вы научитесь правильно вводить в компьютер сложные формулы. Если вы – школьник не самых старших классов, то не все математические функции, что здесь упомянуты, будут вам известны. Не огорчайтесь, при дальнейшем чтении непонятные вещи вам не понадобятся.
Действия арифметики обозначаются в VB следующим образом:
ДЕЙСТВИЕ | РЕЗУЛЬТАТ | СМЫСЛ | |||
2 + 3 | 5 | плюс | |||
4 - 1 | 3 | минус | |||
2 * 3 | 6 | умножить | |||
10 / 2 | 5 | разделить | |||
17 \ 5 | 3 | целочисленное деление (17 делится на 5, получается 3, в остатке 2) | |||
17 Mod 5 | 2 | остаток от деления | |||
37.2 Mod 10 | 7.2 | остаток от деления | |||
2 ^ 3 | 8 | 2 3 (два в кубе) – возведение в степень |
На уроках математики мы привыкли писать ab+cd, подразумевая: «a умножить на b плюс c умножить на d». В VB это выражение мы обязаны писать так: a*b+c*d. Иначе компьютер подумает, что нужно к переменной, имеющей имя ab, прибавить переменную, имеющую имя cd. Во избежание двусмысленности знак умножения положено писать всегда, в том числе и перед скобками. Например, a*(b+c) вместо a(b+c).
Скобки. Ввиду того, что с клавиатуры всю информацию приходится вводить символ за символом в одну строку, ввод двухэтажных выражений, таких как
затруднен. Поэтому для обозначения деления в программировании выбрана косая черта. Приведенное выражение на VB положено записывать так: a+1)/(b+1). Если бы мы не поставили скобок, то выражение получилось бы таким a+1/b+1, а это неправильно, так как компьютер, как и мы, всегда перед сложением и вычитанием выполняет умножение и деление, поэтому в последнем случае, не зная наших намерений, он бы сначала разделил 1 на b , а затем к результату прибавил бы a и 1.
Помните, что компьютер выполняет арифметические действия в привычном для нас порядке: сначала вычисляет функции, возводит в степень, извлекает корни, затем выполняет умножение с делением, затем сложение с вычитанием.
Вопрос: когда в выражениях можно ставить скобки? Ответ: всегда, когда у вас возникают сомнения в правильной очередности действий. Лишняя пара скобок не помешает. Пример: записать на VB выражение:
Запишем пока так:
(1 + a / (2+a*b)) / (3+a) * b
Разберитесь в этой записи. Сложные выражения с большим количеством скобок на глаз воспринимаются с трудом, так как трудно для конкретной скобки увидеть ее законную пару. В этом случае я могу посоветовать идти «от малого к большому», то есть сначала заметить самые малые из взятых в скобки фрагменты выражения. У нас это (3+a) и (2+a*b). Заметьте глазами их скобки. После этого вам будет уже легче заметить скобки для более крупных фрагментов, таких как (1 + a / (2+a*b)) , и т.д.
VB приходит вам на помощь, и в момент ввода очередной скобки выделяет полужирным шрифтом ее и ее пару.
Разобрались? Приведенная запись меня совсем не удовлетворяет, так как мы не знаем, что VB будет делать раньше – делить (1 + a / (2+a*b)) на (3+a) или умножать (3+a) на b. А от этого зависит результат. Добавим для верности пару скобок:
((1 + a / (2+a*b)) / (3+a)) * b
Теперь все в порядке.
Точка или запятая в десятичных дробях? Почти во всех языках программирования и уж, конечно, в VB, в программном тексте в окне кода принято в десятичных дробях вместо запятой ставить точку. Пример: y=62.8 – шестьдесят две целых восемь десятых. Однако, если помните, результаты в текстовое поле VB выводит с запятой. В чем дело? VS, являясь приложением Windows, частично воспринимает от нее привычку пользоваться в России запятой. Особой проблемы тут нет. В подавляющем большинстве случаев то, что я уже сказал, поможет вам сделать правильный выбор. В остальных случаях применяйте метод «научного тыка» – пользуйтесь, например, точкой, а если VS жалуется или начинает делать что-то не то, меняйте ее на запятую.
Математические функции. Кроме нескольких действий арифметики VB может выполнять и другие математические действия, например, извлечение квадратного корня. Однако на компьютере нет клавиши со значком , поэтому в VS имеется специальная функция – Sqrt. Например, корень из 25 обозначается так – Sqrt(25), корень из a+b так – Sqrt(a+b). Здесь Sqrt – сокращение от английского выражения Square root – квадратный корень. Аргумент, то есть то, из чего нужно извлечь корень, записывается в скобках.
Приведу неполный список математических функций VB: Почти все они являются методами класса System.Math.
ФУНКЦИЯ |
РЕЗУЛЬТАТ |
СМЫСЛ |
Math.Abs(-8) |
8 |
Абсолютная величина (модуль) числа |
Math.Sqrt(25) |
5 |
Корень квадратный |
Math.Round(17.952) |
18 |
Округление до целых |
Math.Round(17.48) |
17 |
|
Math.Round(51.23708, 2) |
51,24 |
Округление до 2 знаков после запятой |
Math.Ceiling(45.23) |
46 |
«Потолок» – ближайшее целое число, большее или равное аргументу |
Math.Ceiling(-45.23) |
-45 |
|
Math.Floor(8.92) |
8 |
«Пол» – ближайшее целое число, меньшее или равное аргументу |
Math.Floor(-8.92) |
-9 |
|
Fix(9.47) |
9 |
Целая часть числа (дробная часть отбрасывается) |
Fix(-9.47) |
-9 |
|
Math.Sign(300) |
1 |
Sign для всех положительных чисел равен 1 |
Math.Sign(0) |
0 |
Sign для нуля равен 0 |
Math.Sign(-480) |
-1 |
Sign для всех отрицательных чисел равен -1 |
Math.Max(29, 44) |
44 |
Максимальное из двух чисел |
Math.Min(29, 44) |
29 |
Минимальное из двух чисел |
Math.PI |
3,14159265358979 |
Число ? |
Math.E |
2,71828182845905 |
Число e – основание натурального логарифма |
Math.Exp(2) |
7,38905609893065 |
e2 – число e в заданной степени |
Math.Log(35) |
3,55534806148941 |
Натуральный логарифм ln 35 |
Math.Log10(1000) |
3 |
Десятичный логарифм log101000 |
Rnd |
0,7055475 |
Случайное число из диапазона (0 – 1) |
Работа со случайными величинами описана в 7.3.1.
Проверьте работу интересующих вас математических функций, написав программу такого вида:
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(PI)
WriteLine(Round(17.48))
End Sub
End Class
Проверьте в уме:
Выражение (2+1)^2 при вычислении даст 9
Выражение 1+ (2+8)^3 при вычислении даст 1001
Выражение 1+Abs(5-8) при вычислении даст 4
Выражение 2^4+Sqrt(35+1) при вычислении даст 22
Выражение Sqrt (8+ Floor(41.8)) при вычислении даст 7
Выражение 21 \ (Round (2.54+1)) при вычислении даст 5
Задание 9.
Определите устно, без компьютера, что напечатает процедура:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim a, b As Double
a = (2 ^ 2 + 1) * (20 - (2 ^ 2) ^ 2) - 11
b = Round((a + 2) / 10) * (11 \ (a - 4))
WriteLine(a ^ 2 + b - 1)
End Sub
Понятно ли вам, что здесь нужно округлять ((a+2)/10) , а не ((a+2)/10)*(11\(a-4)) ? Если непонятно, то внимательно найдите к каждой скобке ее пару, начиная с фрагмента (a+2).
Числовые литералы. Слово «число» имеет слишком широкий смысл. Поэтому целесообразно конкретные числа, встречающиеся в программном тексте в окне кода, иногда называть по-другому. Будем называть их числовыми литералами. Так, в строке
y = 20 * a - Round(-2.54) + 0.01
присутствует три числовых литерала: 20, -2.54, 0.01. Один из них целый, два – дробных. Литералы еще традиционно называют константами, но у этого термина в VB несколько другое значение.
В дальнейшем понятие литерала я расширю и на нечисловые типы данных.
Метки Свойства: имя, текст, шрифт
Имя и текст. У каждого объекта есть свойство имя (Name). У многих есть свойство Text. Попробуем их изменить и разобраться, зачем они нужны. В предыдущем проекте мы были беспечны и не заботились об именах и тексте. За это мы никак не были наказаны, потому что VB в случае нашей беспечности (как говорится – по умолчанию) сам придает значения свойствам, в том числе именам и тексту. Причем, недолго думая, имя и текст VB делает одинаковыми. без особых причин, просто так удобнее.
Проверим. Выделим форму. Заглянем в окно свойств и найдем там имя (Name) – оно в алфавите выше всех. Мы видим, что имя нашей формы – Form1. Это же слово мы видим в заголовке формы. Изменим имя, скажем, на слово Калькулятор. Изменили. И что же? В заголовке формы ничего не изменилось.
Внимание! Верните форме ее имя Form1, иначе проект не запустится (почему – объясняется в 21.1.2).
Найдем теперь в окне свойств формы свойство текст (Text). Ну конечно – текст на нашей форме – тоже Form1. Изменим его на Мой персональный калькулятор. Ага! Эти же слова появились в заголовке формы.
Теперь займемся первой кнопкой. Выделим кнопку Button1. Заглянем в окно свойств. Мы видим, что имя и текст этой кнопки одинаковы – Button1. Дадим ей имя Кл_сложения.
Внимание!
Имя должно состоять только из букв, цифр и знаков подчеркивания, причем начинаться имя должно с буквы или знака подчеркивания. Получается, что пробелы запрещены.
Раз в именах запрещены пробелы, я использовал вместо них знак подчеркивания.
Приведенное правило относится к именам не только объектов, но и остальных элементов VB – свойств, методов, переменных, пространств имен и т.д. Подробнее об именах см. в 5.3.4.
Текст нашей кнопки должен состоять из единственного символа +. Найдем +
на клавиатуре и введем его значением свойства Text .
Я думаю, вы уже догадываетесь, зачем нужны имя и текст и в чем их разница. На поверхности объекта мы видим не имя, а текст. Текст виден всем (Штирлиц), а имя остается скрытым (полковник Исаев). Еще аналогия: Мальчик идет по улице, на его рубашке – текст «Эммануил». А зовут его Коля, но это на рубашке не написано.
Зачем нужно имя? Затем, что в программе мы обращаемся к объекту именно по имени, а не по тексту.
Зачем мы изменили текст, нам ясно. Чтобы всем были видны удобные слова или символы. А почему надо было менять имя? Ну, хотя бы потому, что оператор
Кл_сложения.Width=60
как-то понятнее, чем
Button1.Width=60
Метки. А теперь займемся пояснительными надписями в левой части калькулятора (Первое число, Второе число, Результат). Для этого нам понадобится новый элемент управления – Label (метка), который в основном для пояснений и применяется. Найдите Label в окне Toolbox и поместите на форму три метки. Пока они имеют такой вид: Label1, Label2, Label3 .
Задайте, пожалуйста, всем объектам проекта следующие свойства Имя и Текст:
Объект |
Имя |
Текст |
Form1 |
Form1 |
Мой персональный калькулятор |
Button1 |
Кл_сложения |
+ |
Button2 |
Кл_вычитания |
- |
Button3 |
Кл_умножения |
х (это просто буква Икс) |
Button4 |
Кл_деления |
: |
TextBox1 |
Число1 |
|
TextBox2 |
Число2 |
|
TextBox3 |
Результат |
|
Label1 |
Label1 |
Первое число |
Label2 |
Label2 |
Второе число |
Label3 |
Label3 |
Результат |
Когда вы запустите ваш проект, он должен выглядеть так, как на Рис. 3.4.
Рис. 3.4
Шрифт. Пусть мы хотим, чтобы слово «Результат» было побольше и пожирней. Щелкнем по метке Label3. Найдем ее свойство Шрифт (Font) и щелкнем по плюсу. Из свойства выскочит с десяток свойств, в него входящих (размер шрифта, жирность и т.д.), и вы можете изменять каждое из них. Но лично мне кажется более удобным другой способ: Щелкнем по свойству Font. В поле значения появилась кнопочка с троеточием – это всегда приглашение к дальнейшему разговору (эту кнопку вы можете видеть на Рис. 3.3). Щелкнем по ней – перед нами появилось так называемое диалоговое окно (Рис. 3.5), предлагающее настроить шрифт текста, то есть выбрать размер шрифта (Size), начертание (Font style), название (гарнитуру, то есть рисунок букв) шрифта (Font) и кое-что другое. Начертание может быть обычным (Regular), курсивом (Italic), полужирным (Bold) и полужирным курсивом (Bold Italic). Среди гарнитур попадаются любопытные. Выберите размер и прочее по вкусу, после чего нажмите ОК.
Рис. 3.5
Значки арифметических действий на кнопках получились маловаты. Увеличьте их размер и сделайте пожирнее.
Все! Проектирование первой версии калькулятора закончено! Теперь калькулятор выглядит практически так, как задано на Рис. 3.1. Можно приступать к программированию.
Не программа, а проект
Visual Studio .NET принадлежит к так называемым средам визуальной разработки программ. Это значит, что она берет на себя значительную часть работы по написанию скучных команд, предоставляя программисту вместо этого «собирать домик из кубиков».
Для пояснения рассмотрим аналогию. Вообразите, что вы не программу на VB пишете, а собираете на столе игрушечную железную дорогу. В вашем распоряжении находятся объекты: стол, рельсы, паровозы, вагоны, светофоры, машинисты, стрелочники и т.д. Чтобы игрушка заработала, вам нужно выполнить 3 этапа:
1. Собрать ее вручную, то есть поместить на свои места и правильно соединить рельсы, вагоны и т.д.
2. Наша игрушка очень интеллектуальная, то есть поведение многих объектов (таких как машинисты, стрелочники, светофоры и другие) – сложное и осуществляется по программе. Поэтому вам нужно написать для каждого из таких объектов программу поведения. Например, в программе для машиниста одна из команд может быть такой: «Если впереди на светофоре красный свет – тормози», а в программе для светофора – такой – «Если два поезда опасно сблизились – зажигай красный свет» и так далее.
3. Запустить игрушку и посмотреть, как она работает. Если произошло крушение или что-нибудь еще пошло не так, как надо, значит или вы неправильно собрали игрушку, или написали неправильные программы, или и то и другое вместе. Вы исправляете ошибки и там и там и снова запускаете игрушку. Снова смотрите, снова исправляете. И так до тех пор, пока все не заработает нормально. Этот процесс называется отладкой.
Современный программист, работающий в средах визуальной разработки программ, выполняет те же три этапа. На 1 этапе он вручную расставляет на экране компьютера объекты, которые будут выполнять его программу, на 2 этапе пишет программу, на 3 этапе запускает ее. Что конкретно я имею в виду под расстановкой объектов, вы узнаете в следующем разделе, а сейчас остается сказать, что из-за 1 этапа работа программиста теперь напоминает работу конструктора-проектировщика и продукт работы программиста называют теперь не программой, а проектом. Хотя часто пользуются и прежним термином. Я тоже, наверное, буду их путать. Правда, обещаю, что не в ущерб смыслу.
Готовый проект будем называть приложением Windows или просто приложением. Это значит, что эта программа будет работать на компьютерах с запущенной операционной системой Windows (говорят: программа работает из-под Windows). Она не будет работать из-под других операционных систем, что вряд ли можно назвать недостатком. Таковы почти все современные программы. А у «всеядных» программ – свои минусы.
Еще один термин для готового проекта – продукт. Действительно: продукт работы программиста – продукт.
Объявление переменных величин
Когда на бал к графине N приезжает герцог M, то слуга объявляет на весь зал: "Герцог M!", отчего все гости сразу узнают, что перед ними именно герцог, а не какой-нибудь там барон, и обращаются к нему соответственно. Все хорошо, все прилично. Если бы слуга проморгал и объявил гостя, забыв указать его титул, то в большинстве случаев тоже ничего страшного не произошло. Однако иногда все же могли бы приключиться досадные недоразумения. Например, к герцогу могли бы обратиться так: «Эй, человек, шампанского!», а это уже скандал!
Бал – это проект. Гости – это переменные. Слуга – это программист. До сих пор мы объявляли всех гостей. И делали это оператором Dim. Правда, объявляли демократично, без указания титулов. Однако никаких эксцессов не было, все шло как по маслу. Это потому, что VB умный, он по глазам определяет, кто герцог, а кто нет. Но не у каждого гостя глаза говорят правду. Нам нужно как следует в этом разобраться. Но прежде изучим еще один полезный и приятный элемент VB – InputBox.
Object Browser
Object Browser – инструмент для обзора и поиска объектов и составляющих их свойств, методов и прочих компонент, а также пространств имен, в которых они расположены. То есть для обзора и поиска всего богатства библиотеки классов .NET Framework. И не только ее. Таким образом, Object Browser – это что-то вроде справочной системы.
Щелкнем View ® Other Windows ® Object Browser. Перед вами откроется окно Object Browser, в левой панели которого Objects
вы увидите несколько строк (Рис. 4.17).
Рис. 4.17
Сборки. Каждая строка здесь является так называемой сборкой. Сборка – это файл (бывает – несколько файлов), хранящий в себе одно или несколько пространств имен. На рисунке вы видите те сборки, пространства имен которых в настоящий момент находятся в распоряжении вашего проекта.
Обратите внимание, что среди прочих сборок указана и сборка вашего проекта. О ней поговорим позже, а сейчас можете не обращать на нее внимания.
Остальные сборки, которые вы видите на рисунке, служат вместилищем пространств имен библиотеки классов .NET Framework. Не вся библиотека классов .NET Framework в настоящий момент подключена к вашему проекту, а лишь ее самые широко используемые части. Сделано это из экономии. Соответственно, на рисунке вы видите далеко не все сборки библиотеки классов .NET Framework. Но вы можете при желании быстро подключить дополнительные сборки (см. 25.2.2).
Файл сборки обычно имеет расширение dll или exe. По назначению сборки близки к широко известным библиотекам dll, но это не одно и то же.
В одной сборке может находиться несколько пространств имен и наоборот – одно пространство имен может располагаться в нескольких сборках. Часто сборка содержит пространство имен, одноименное с ней.
Пример путешествия по Object Browser. Давайте доберемся в Object Browser до метода Write класса Debug. Щелкните по плюсу в строке сборки System. Мы видим (Рис. 4.18), что внутрь сборки System входит несколько пространств имен. Каждое из них помечено парой фигурных скобок {}.
Рис. 4.18
Особенность отображения в этом окне заключается в том, что видны сразу же все пространства имен, находящиеся в сборке, включая и пространства вложенные в другие пространства. Так, вы видите и пространство имен System, и входящее в него пространство имен System.ComponentModel, и пространства имен, входящие в System.ComponentModel.
Щелкните по плюсу в пространстве имен System.Diagnostics, которое предоставляет нам разнообразные инструменты, в том числе и для отладки программы. Мы видим (Рис. 4.19) внутри пространства имен большое количество объектов.
Рис. 4.19
Щелкните по классу Debug (по нему самому, а не по плюсу), чтобы выделить его. Мы видим (Рис. 4.20) в правой панели Object Browser компоненты класса Debug: свойства и методы. В нижней части окна вы видите краткое описание выделенного элемента. Со временем мы научимся понимать эти описания.
Рис. 4.20
Имейте в виду, что не все компоненты, входящие в данный класс, показаны в правой панели. Многие, доставшиеся «по наследству» от родительских классов (см. 22.7) не указаны.
Еще один пример: Доберемся до цвета Yellow объекта Color. Щелчками по минусикам сверните все строки в левой панели окна Object Browser, чтобы она приобрела первоначальный вид. Затем щелчком по плюсу зайдите в сборку System.Drawing, в ней зайдите в пространство имен System.Drawing, в нем найдите объект (структуру) Color и выделите ее щелчком. В правой панели вы увидите множество свойств этой структуры, имена которых являются названиями цветов. Среди них вы увидите и Yellow.
Как я уже говорил, некоторые пространства имен могут частями встречаться сразу в нескольких сборках. Так, части пространства имен Microsoft.VisualBasic
мы видим и в сборке Microsoft Visual Basic (по-другому – Microsoft Visual Basic.NET Runtime) и в сборке System, части пространства имен System мы видим и в сборке System в сборке mscorlib.
Замечание. Обратите внимание, что в Object Browser имеется много свойств, которых нет в окне свойств, так как здесь приведены и те свойства, которые имеют смысл только в режиме [run]. Например, свойство SelectionLength объекта TextBox, которое выдает длину фрагмента текста, выделенного нами в текстовом поле.
Поиск. Очень удобна возможность поиска в Object Browser нужных нам компонентов. Для этого используется кнопка поиска . Пусть вы забыли, где находится Beep. Вы щелкаете по кнопке поиска, затем в появившемся окне поиска (Рис. 4.21) набираете слово Beep, нажимаете Find и в появившемся ниже окне видите результат:
Microsoft.VisualBasic.Interaction
Рис. 4.21
Общие свойства
Сейчас я перечислю популярные и легкие свойства знакомых нам объектов, а именно: формы, кнопок, текстовых полей, меток. Другие вам понадобятся не скоро. Повторю, что эти свойства имеются и у многих других элементов управления.
Мы с вами уже познакомились в окне свойств со свойствами Name, Text, Width, Font. Познакомимся с другими.
Внешний вид
BackColor – цвет поверхности объекта – знакомое свойство. Выделим форму. Щелкнем по этому свойству. В поле значения появилась кнопочка с черной треугольной стрелкой. Такие кнопки есть во многих свойствах для удобного выбора их значений. Щелкнем по ней – перед нами появилось окно с тремя закладками (Рис. 3.6).
Рис. 3.6
Выберем цвет в закладках Custom или Web и щелкнем по нему. Форма, кнопки и метки (но не текстовые поля) приобрели этот цвет. Выделите кнопку и аналогично установите ей какой-нибудь другой цвет. То же самое проделайте с меткой и текстовым полем. О закладке System поговорим попозже.
Если предложенных цветов вам не хватает, щелкните правой клавишей мыши по одному из белых квадратиков в нижней части закладки Custom. Перед вами откроется окно определения цвета (см. Рис. 3.7).
Рис. 3.7
Щелчком по большому разноцветному квадрату вы выбираете цвет, а передвигая вверх-вниз движок в правой части окна, выбираете яркость цвета. В поле Color|Solid вы видите образец получившегося цвета. Нажимайте Add Color.
ForeColor – цвет текста и линий, рисуемых на объекте. Настраивается аналогично BackColor. Попробуйте сделать текстовое поле желтым с синим текстом.
BorderStyle (для текстовых полей и меток) – стиль границы. Определяет характер границы и объемность вида объекта.
FlatStyle (для кнопок) – примерно то же, что BorderStyle для текстовых полей и меток.
FormBorderStyle (для формы) – с одной стороны это примерно то же, что BorderStyle для текстовых полей и меток. Но с другой стороны здесь 7 вариантов, и заведуют они не только стилем границы, но и количеством кнопок в правом верхнем углу формы, и возможностью изменять размеры формы в режиме [run].
Положение и размер
Size (размер). Состоит из свойств Width (ширина) и Height (высота). Высота формы и элементов управления настраивается совершенно аналогично ширине. Попробуйте.
Задавать местоположение при помощи координат мы научимся чуть ниже, в 3.5.
Locked (заперт). Обычно значение этого свойства – False (что значит – Ложь). Если установить его в True (что значит – Правда), то элемент управления в режиме проектирования нельзя будет таскать по форме и изменять его размеры (а у формы – только изменять размеры). Это полезно, если вы боитесь случайным движением мыши сместить тщательно установленный элемент управления[§].
Anchor (якорь, привязка). Когда мы в режиме [run] изменяем размеры формы, элементы управления остаются на месте. Это значит, что они сохраняют свое расстояние до левого
и верхнего краев формы, а не до правого и нижнего. Мы изменим эту ситуацию для данного элемента управления, если изменим его свойство Anchor. Измените, например, это свойство для кнопки. Щелчками по каждой из 4 полосок (Рис. 3.8) вы приказываете поддерживать или не поддерживать постоянным расстояние от кнопки до соответствующего края формы. Сделайте для интереса темными все 4 полоски. Запустите проект. Изменяйте размеры формы и наблюдайте на поведением кнопки.
Рис. 3.8
Dock (пришвартоваться, приклеиться). Обычно значение этого свойства – None (что значит – Отсутствует). Если выбрать для элемента управления одно из предложенных значений этого свойства, то он будет «приклеен» к одному из краев формы, как бы мы ни меняли ее размеры. Так обычно приклеены полосы прокрутки к краям окна.
Другие свойства
Cursor (курсор, значок мыши, указатель мыши). Это свойство позволяет вам менять внешний вид мышиного курсора, когда он находится над объектом.
Выделите кнопку и, зайдя в окно свойств, выберите для ее свойства Cursor какое-нибудь значение из списка (например, курсор в форме креста). Запустите проект. Поместите курсор мыши на объект. Курсор приобрел вид креста.
Если вы зададите вид мышиного курсора для формы, то он будет иметь заданный вид над всей поверхностью формы и теми объектами на форме, для которых он еще не изменен (кроме текстовых полей).
Поиграли со значками мышиного курсора? А теперь верните все, как было. Не стоит без дела отвыкать от стандартного интерфейса[**]
– это рассеивает внимание. Экзотика хороша в Африке.
Visible (видимый). Обычно значение этого свойства - True (что значит – Правда). Если установить его в False (что значит – Ложь), то элемент управления перестанет быть виден в режиме работы. Но будет слушаться программу.
Enabled (в рабочем состоянии). Обычно значение этого свойства – True («правда»). Если установить его в False («ложь»), то объект установится в нерабочее состояние, то есть виден будет, но не будет работать и им нельзя будет пользоваться. Так, в текстовое поле нельзя будет вводить текст, на кнопку нельзя нажимать, текст объектов приобретет бледно-серый оттенок. Но программу объект слушаться будет. Установив в нерабочее состояние форму, вы тем самым устанавливаете в нерабочее состояние все элементы управления на ней.
TextAlign (выравнивание текста на поверхности объекта). Создайте высокую и широкую кнопку и выберите для нее в окне свойств один из 9 вариантов значений этого свойства (Рис. 3.9).
Рис. 3.9
В зависимости от выбранного значения текст на объекте окажется или в его левом верхнем углу, или в правом нижнем, или в других местах.
Одновременная настройка свойств у нескольких элементов управления. Очевидно, что все 4 кнопки калькулятора должны иметь одинаковые размеры, шрифт и цвет. Настраивать их по-отдельности для каждой кнопки скучно. VS позволяет легко настраивать свойства сразу у нескольких элементов управления. Все, что нужно предварительно сделать – это выделить эти несколько элементов.
Чтобы выделить несколько элементов, просто обведите их рамочкой. Или, щелкнув по первому из них, щелкайте по остальным при нажатой клавише Ctrl.
После того, как элементы выделены, окно свойств показывает только те свойства, которые являются общими для всех выделенных элементов. А значения свойств показываются только там, где они одинаковы для всех выделенных элементов. Например, свойство Location (местоположение) не показывает значения, так как местоположение у кнопок на форме разное.
Измените сейчас в окне свойств свойство BackColor. Оно изменится у всех выделенных элементов. Запишите в поле значений свойства Size два числа через точку с запятой: 100; 70 – все выделенные элементы приобретут указанный размер.
Группа выделенных элементов позволяет таскать себя по форме и изменять размеры элементов движением мыши. Снимается выделение клавишей Esc.
Оглядимся вокруг
Ну вот, с переменными величинами мы разобрались. Узнали что-то. А научились ли мы в результате этого знания делать что-нибудь новенькое и интересное? Вроде, нет. Ничего особенно приятного, за исключением, может быть, диалога с компьютером. Нда-а-а… Зачем же все мучения?
Вот зачем: Материал этой главы – патрон без пистолета, ненужная сама по себе вещь. А вот материал следующих глав – это самые разные пистолеты без патронов.
Окна среды Visual Studio NET
До сих пор я не рассматривал систематически окна, панели инструментов и меню VS. И вы, наверное, уже столкнулись в связи с этим с некоторыми проблемами. Для дальнейшего движения вперед необходимо рассмотреть их более подробно. Начнем с окон. Их в среде VS довольно много, глаза разбегаются и создается ощущение стога сена, в котором нужно найти иголку Поэтому на смысле разных окон я остановлюсь позже, а сначала мы должны научиться управляться с ними, независимо от их смысла: открывать, закрывать, передвигать, настраивать.
Окно свойств
Чуть раньше мы уже познакомились с такими свойствами объектов, как BackColor, Width, Text. Количество свойств у каждого из объектов довольно большое. Многие из них мы можем менять в режиме работы [run] при помощи программы, как мы это уже делали (например, HScrollBar1.Width = 100). Оказывается, многие свойства формы и элементов управления можно менять и в режиме проектирования [design]. Делается это вручную, безо всякого программирования (для того и задумано, что вручную легче!).
Вы сейчас в режиме [design]? Хорошо. Пусть вы хотите просмотреть свойства кнопки Button1. Один щелчок по этой кнопке. При этом на кнопке появляются маркеры. Говорят, что объект выделен, стал активным. В этом случае его свойства вы можете видеть в окне свойств (окно Properties в правой части Рис. 3.3).
Рис. 3.3
Если окна не видно, проделайте View ® Properties Window, после чего снова щелкните по кнопке Button1.
У вас это окно может занимать несколько другое положение. Если оно кажется вам маловатым, попробуйте расширить его, ухватившись за левый или нижний края. Более подробно работа с окнами среды VS разобрана в 4.2.
В окне свойств – два столбца: название свойства и его значение. Для вашего удобства свойства могут быть упорядочены по алфавиту (закладка Alphabetic
) или сгруппированы по категориям (закладка Categorized ).Выберите упорядочение по алфавиту. Обратите внимание, что некоторые свойства помечены значком «+». Это сложные свойства, которые сами состоят из нескольких свойств. На Рис. 3.3 это, например, свойство Font (шрифт). Если вы щелкнете по значку «+», он превратится в «-», а свойства, из которого Font состоит, будут видны по-отдельности, каждое – в своей строке. На Рис. 3.3 вы видите, из чего состоят свойства Location (местоположение) и Size (размер). Так, в свойство Size входят два свойства: Width (ширина) и Height (высота).
Попробуем изменить значение свойства Width. Найдите в окне свойств его численное значение. Введите вместо имеющегося там числа другое число, например, 30. Вы увидите, что ширина кнопки на форме изменилась. Точно такого же результата вы добились бы в режиме работы [run], выполнив оператор Button1.Width = 30. А теперь поступим наоборот – перетащим немного влево или вправо один из маркеров кнопки. Мы увидим, что соответственно изменилось и число в окне свойств.
Выделим щелчком какой-нибудь другой объект на форме. Теперь в окне свойств – его свойства. Выделим форму, щелкнув по любому свободному месту ее поверхности – теперь мы видим и можем менять ее свойства. И так далее. Поэкспериментируйте.
С названиями и смыслом разных свойств я буду знакомить вас постепенно.
Значение многих (но не любых) свойств из окна свойств легко изменить в программе операторами типа Button1.Width = 30.
Оператор присваивания меняет значения переменных величин
Пока я не рассматривал программы, в которых переменные меняют свою величину. Теперь настало время такую программу рассмотреть:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim k As Integer
k = 10
Debug.WriteLine(k)
k = 25
Debug.WriteLine(k)
k = 4
Debug.WriteLine(k)
End Sub
В процессе работы программы содержимое ячейки k меняется. Так, при выполнении оператора k=25 там вместо значения 10 появляется 25. А куда же девается десятка? Она стирается, то есть компьютер забывает ее безвозвратно. Здесь действует общий принцип работы всех компьютеров:
Если в какую-нибудь ячейку или вообще в какое-нибудь место памяти или диска записывается новая информация, то старая информация, записанная там раньше, автоматически стирается, даже если она кому-то и нужна.
Раз теперь вместо 10 в ячейке k находится 25, то оператор Debug.WriteLine(k) печатает уже 25. (Слово «печатает» устарело, оно осталось от тех времен, когда мониторов еще не было, а вместо них были принтеры. Когда я по старинке говорю, что информация печатается, я подразумеваю, что она появляется на мониторе в том или ином окне.) Следующий оператор k=4 запишет на место 25 четверку, а Debug.WriteLine(k) ее напечатает. Проверьте.
Запишем схематически процесс изменения информации в ячейке k:
ПОРЯДОК ИСПОЛНЕНИЯ ОПЕРАТОРОВ | ЧТО НАХОДИТСЯ В ЯЧЕЙКЕ ПАМЯТИ k | ЧТО ВИДИМ
В ОКНЕ Output | |||
k=10 | 10 | ||||
Debug.WriteLine(k) | 10 | 10 | |||
k=25 | 25 | ||||
Debug.WriteLine(k) | 25 | 25 | |||
k=4 | 4 | ||||
Debug.WriteLine(k) | 4 | 4 |
А что напечатает следующая программа?
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim f As Integer
f = 30
Debug.WriteLine(f)
f = f + 4
Debug.WriteLine(f)
End Sub
Оператор f=30 запишет в ячейку f число 30. Затем оператор Debug.WriteLine(f) напечатает 34. А что сделает странный оператор f=f+4 ? Не думайте, что это уравнение или что-нибудь в этом роде. Это оператор присваивания, а значит и выполнится он согласно определению оператора присваивания. Сначала VB вычислит правую часть f+4 , подставив туда вместо f его значение, взятое из ячейки, и получит 34. Затем число 34 будет записано в ячейку, отведенную под переменную, обозначенную в левой части, то есть опять же в ячейку f. При этом старое значение 30 будет стерто. Оператор Debug.WriteLine(f) напечатает 34.
Таким образом, оператор f=f+4
просто увеличивает число в ячейке f на четверку или, другими словами, увеличивает f на 4.
Зачем это нужно? Узнаете позже. Очень даже нужно. Операторы такого типа встречаются настолько часто, что для них даже придумали сокращенную запись. Потренируемся:
Оператор |
Сокращенная запись |
Действие |
a = a + 1 |
a += 1 |
Переменная увеличивается на 1 |
s = s - 25 |
s -= 25 |
Переменная уменьшается на 25 |
b = b * 2 |
b *= 2 |
Переменная увеличивается в 2 раза |
t = t / 3 |
t / = 3 |
Переменная уменьшается в 3 раза |
Определите без компьютера, что будет напечатано при выполнении следующих фрагментов программ:
a=100 : a=10*a+1 : Debug.WriteLine(a)
a=100 : a= -a : Debug.WriteLine(a)
a=10 : b=25 : a=b-a : b=a-b : Debug.WriteLine(a) : Debug.WriteLine(b)
Отличия Visual Studio NET от и от Visual StudioNET
Отличия практически отсутствуют и сводятся в основном к интерфейсу, поэтому данная книга является учебником по программированию на языке Visual Basic .NET как в среде Visual Studio .NET 2003, так и в среде Visual Studio .NET 2005, так и в среде Visual Studio .NET. Хотя конкретно изложение ведется для версии 2003.
Панели инструментов
Панели инструментов предназначены для быстрого и удобного доступа к инструментам VS той или иной специализации. На Рис. 4.28 вы видите две панели инструментов. Верхняя из них – стандартная, она всегда на экране, потому что нужна очень часто. Ее направленность – основные операции с проектами. Мы уже пользовались некоторыми ее кнопками. Задержите мышку на любом значке панели – и он назовет себя.
Рис. 4.28
Часто те же инструменты, что на панелях, имеются и в главном меню, но панели обеспечивают более быстрый доступ к инструментам. Познакомьтесь со всеми кнопками стандартной панели. Возможно, вам покажется, что пользоваться некоторыми из них удобнее, чем пунктами меню (один щелчок быстрее двух).
VS имеет привычку без спросу выводить на экран панели, которые по ее мнению вам могут в данный момент пригодиться, а затем убирать их с экрана, когда с ее точки зрения они вам больше не нужны. Вручную панели инструментов вызываются на экран так: View ® Toolbars ® щелчок по одному из пары десятков названий панелей. Те панели, что уже есть на экране, помечены галочкой. Убрать панели с экрана можно тем же способом, что и вызывали.
Выведите на экран панель Layout. Ее специализация – работа с элементами управления на форме. В 4.4.6 мы косвенно с ней уже познакомились. Скорее всего она покажется в верхней части окна VS рядом с другими панелями. На Рис. 4.28 вы видите ее под стандартной панелью инструментов. Если вы хотите сместить ее оттуда, ухватитесь мышкой за один из нескольких сереньких вертикальных отрезков, разделяющих инструменты на этой панели, и тащите.
После этого вы можете изменять форму панели. Делаете вы это примерно так же, как изменяете форму окон, ухватившись мышкой за их края. На Рис. 4.29 вы видите ту же панель Layout, которую мы уже переместили и которой изменили форму. Теперь ее можно закрывать и крестиком.
Рис. 4.29
Пока на форме не выделены элементы управления, кнопки на панели Layout будут бледными и неактивными, потому что им нечего делать. Выделите несколько элементов управления, кнопки оживут, с ними можно работать. А как – вы уже поняли из 4.4.6
Щелкнув по треугольной стрелочке рядом с крестиком в правом верхнем углу панели, вы сможете добавлять и убирать кнопки с панели. Там же вы можете создать собственную панель инструментов. Но уж в этом вы разберетесь сами, если понадобится.
Польза от остальных панелей инструментов вам станет ясна по мере дальнейшего изучения VB.
Передвигаем и настраиваем окна
Откройте какой-нибудь проект. Пусть он называется «Иерархия». Посмотрите на Рис. 4.8. Не беда, если картинка на вашем экране будет не очень похожа на рисунок.
Рис. 4.8
Группы окон. Сколько окон мы видим на рисунке? Попробуем посчитать.
Прежде всего это большое белое окно, на котором расположена форма. Это – окно конструктора форм. Над окном мы видим две закладки. Щелкнем по закладке Form1.vb и обнаружим, что на месте окна конструктора возникло окно кода. Щелкнем по закладке Form1.vb [Design] и обнаружим, что на месте окна кода снова возникло окно конструктора. Таким образом, два окна объединены в группу окон с закладками для быстрого переключения между окнами.
Справа мы видим еще две подобных группы, только размер у них небольшой и закладки расположены не над, а под окнами. Верхняя группа состоит из двух окон (закладки Solution Explorer и Class View). Нижняя – тоже из двух окон (закладки Properties и Dynamic Help). Пощелкайте по закладкам.
Снизу мы видим продолговатое окно Output. Без закладок. Но это тоже группа, только из одного окна, потому и без закладок.
Поставьте мышь на значок
Toolbox в левой части окна VS. На экран выплывет наш привычный серый «ящик с инструментами» Toolbox. Это тоже окно, несмотря на то, что на другие окна не похоже.Обратите внимание на значок
Server Explorer рядом со значком Toolbox. Поместите на него мышь. Окно Server Explorer выплывет на экран.На самом деле окон в VS гораздо больше, чем мы видим на рисунке, только они не открыты.
Закрываем и открываем окна. Чтобы избавиться от ощущения тесноты на экране, давайте начнем с того, что закроем все окна, исключая (чтобы не запутаться) Toolbox и Server Explorer. У каждого окна есть в правом верхнем углу значок крестика «´». Будем щелкать по крестикам до тех пор, пока главное окно среды не опустеет (Рис. 4.9).
Рис. 4.9
Теперь можно нашу пустую квартиру заселять. Не думайте, что наш проект закрыт, он открыт, только не виден, закрыты окна, а не проект.
Команды на показ многих окон VS расположены в пункте View главного меню VS. Начинать нужно с открытия окна Solution Explorer. Наши действия: View ® Solution Explorer. На Рис. 4.10 вы видите среду VS после этого действия, а также открытое меню View, в котором открыто подменю Other Windows («Другие окна»).
Рис. 4.10
Щелкните по значку Form1 в окне Solution Explorer. Теперь выберите в меню View пункты Code (чтобы появилось окно кода), Designer (чтобы появилось окно конструктора форм) и Properties Window (чтобы появилось окно свойств), а в подменю Other Windows – окно Output. Ваша среда приобрела примерно такой вид, как на Рис. 4.11. Он отличается от Рис. 4.8 меньшим количеством закладок (так как уменьшилось число окон).
Рис. 4.11
Перемещаем окна. Теперь поучимся перемещать окна. Чтобы приблизить эксперимент к реальности, выберите в меню View окно Class View, а в меню Help – окно Dynamic Help. Среда приобрела прежний вид (у меня – как на Рис. 4.8, а у вас, возможно, другой). Надеюсь, что в правой части у вас найдется хотя бы одна группа окон с закладками. Если этого нет, то читайте дальше, вскоре вы поймете, как такую группу получить.
Группу окон можно таскать по экрану, ухватившись мышкой за заголовок. Исключение – центральная группа с окнами Code и Designer. На Рис. 4.12 я ухватился мышкой за заголовок одной из групп (закладки Solution Explorer и Class View) и перетащил ее в центр экрана, не отпуская мышиной кнопки. Виден контур положения окна, когда я отпущу кнопку мыши.
Рис. 4.12
На Рис. 4.13 я отпустил кнопку мыши.
Рис. 4.13
Вы видите, что группа окон (закладки Solution Explorer и Class View) оказалась в середине экрана, а группа окон (закладки Properties и Dynamic Help) шустро захватила место уехавшей группы. Это – отличительная черта VS. При запуске проекта, использовании системы помощи и во многих других случаях некоторые окна сами собой возникают, исчезают, меняют место Эта шустрость перемещения, возникновения и исчезновения окон поначалу приводит новичка в замешательство, и только потом привыкаешь и даже начинаешь ощущать удобство такого поведения. Поведение это направлено на то, чтобы в нужный момент на экране были только нужные окна, а остальные должны быть спрятаны.
Начните рискованное дело, а именно: повторяйте за мной все манипуляции с окнами, которые я проделываю. Для успешных манипуляций нужен опыт, а если у вас его нет, то через некоторое время ваша среда будет похожа на груду мусора. Однако не отчаивайтесь, упорство будет вознаграждено и через несколько абзацев вы станете спокойным и уверенным хозяином своей среды.
Прежде всего повторите за мной только что описанное перемещение группы. Готово? А теперь снова ухватитесь за заголовок той же группы и самым разнообразным образом потаскайте ее по экрану, не отпуская мышиной кнопки. При этом приближайте ее вплотную к краям главного окна VS, проводите ее по-разному над другими группами и окнами, совмещая курсор мыши с заголовками, закладками и границами других групп и окон. Вы увидите, что в зависимости от текущего положения заголовка относительно перечисленных объектов контур окна резко изменяет форму и положение, проявляя тенденцию «прилипать» к краям главного окна VS и к другим группам и окнам, «толкаться», смещая группы и окна по вертикали или горизонтали. Если вы совместите курсор мыши с заголовком или закладками другой группы, то контур примет такую форму, как на Рис. 4.14. Вы видите, что здесь контур занял всю группу Output, причем у контура имеется выступ внизу (будущая закладка). Это значит, что когда вы отпустите мышь, ваша группа присоединится к этой. В результате на этом месте образуется единая группа из 3 окон с 3 закладками.
Рис. 4.14
Отпустите мышь.
Аналогичным образом мы можем передвигать по экрану большинство групп и окон. Не стесняйтесь, перемещайте со всего размаху, пусть наступит хаос!
Настраиваем окна. А теперь посмотрим, как восстановить порядок. Закройте все окна, включая Toolbox и Server Explorer. Откройте окно Solution Explorer и пришвартуйте его к правому краю окна VS, как оно пришвартовано на Рис. 4.10. Щелкните правой клавишей мыши по заголовку окна Solution Explorer. Вы увидите контекстное меню для выбора состояния окна (см. Рис. 4.15).
Рис. 4.15
Поговорим о пунктах этого меню.
На рисунке вы видите, что в меню выбрано состояние Dockable («швартующийся»). Это значит, что окно (или группа) при перемещении по экрану будет стремиться пришвартоваться, прилипнуть куда ни попало, как я уже описывал чуть раньше. Попробуйте. Прилипшее окно называется привязанным.
Если вы выбрали состояние Floating, то окно прекратит свое сумасшедшее поведение и будет перемещаться по среде привычно и спокойно, не взаимодействуя с другими окнами, как ведут себя обычные окна Windows. Попробуйте. Такое окно называется плавающим.
Когда окно пришвартовано к любому из краев окна VS, в меню появляется пункт Auto Hide («автопрятки»). Если выбрать это состояние, то окно всякий раз, когда вы его не используете, будет уплывать за край окна VS, оставив у края свой значок с надписью, как это делает Toolbox. Когда окно снова вам нужно, вы просто ставите мышку на значок – окно выплывает. Это очень экономит место на экране. Попробуйте. Обратите внимание, что окно теперь нельзя утащить от края, пока не снимешь выделение пункта Auto Hide.
Так же ведет себя и группа окон. Для каждого окна из группы у края остается свой значок.
Пункт Auto Hide настолько популярен, что для него в заголовке окна есть специальный значок, по которому вы можете оперативно щелкать мышкой, устанавливая и снимая состояние Auto Hide. Когда значок имеет вид , состояние Auto Hide установлено, когда – не установлено.
Вот несколько полезных приемов работы с окнами:
Чтобы «вытащить» окно из группы, тащите его за закладку.
Чтобы присоединить окно к группе, перетащите его заголовок на заголовок группы или одну из закладок.
Чтобы присоединить окно к центральной группе (куда входят окна кода и конструктора форм) уберите у окна выделение как пункта Dockable, так и пункта Floating.
Чтобы «вытащить» это присоединенное окно из центральной группы, выделите у окна пункт Dockable или пункт Floating.
Окно кода и окно конструктора не движутся. И контекстное меню у них другое. Чтобы увидеть одновременно оба этих окна, выберите в контекстном меню New Horizontal Tab Group или New Vertical Tab Group. Чтобы вернуть все в прежнее положение, выберите в контекстном меню Move to Next Tab Group или Move to Previous Tab Group.
Пункт Hide просто прячет окно. Снова открывать его – через меню View.
Когда окна или группы граничат друг с другом (как окна Solution Explorer и Properties на Рис. 4.11), вы можете мышкой обычным образом смещать их границу. Для этого, не спеша перемещая мышь поперек границы, поймайте момент, когда курсор мыши поменяет свой вид на двойную стрелку, и после этого тащите мышь.
Минимум окон для работы. Каков минимум окон, которым можно для начала обходиться? Вот список:
Toolbox
Solution Explorer
Properties Window
Designer
Code
Output
Теперь, когда вы все это знаете, закройте все окна и по-одному открывайте нужные. Затем буксируйте их на желаемое место, пришвартовывайте к приглянувшемуся краю, выбирайте удобное состояние и присоединяйте к подходящей группе. Желаю успеха.
Переменные величины и память
Графиня отвела во дворце каждому гостю по комнате. Размер комнаты зависит от титула. Для нас дворец – это оперативная память, гости – переменные, а комнаты – так-называемые ячейки. Полностью механизм работы переменных величин не понять, если не узнать, как они хранятся в оперативной памяти компьютера.
Оперативная память нужна компьютеру для того, чтобы хранить во время выполнения программы саму эту программу и данные (в том числе переменные величины), с которыми программа работает. О работе памяти вы можете почитать. в Приложении 1.
При запуске проекта и позже компьютер под каждую переменную отводит в памяти место. Оно называется ячейкой. Во дворце размер комнат измеряют в квадратных метрах, в памяти размер ячейки выражают в байтах. Князю нужна более вместительная комната, чем барону. Переменной типа Double нужна более вместительная ячейка, чем переменной типа Integer. Так оно и есть на самом деле: под переменную типа Integer в памяти отводится ячейка размером 4 байта, а под переменную типа Double – 8 байтов. Только не думайте, что переменная типа Integer не может быть числом длиннее 4 цифр, а переменная типа Double не может быть числом длиннее 8 цифр. Компьютер использует для записи чисел в ячейки более компактную систему, чем для записи символов: в 1 байт умещаются две с лишним цифры числа.
Не думайте также, что «стенки» между ячейками в оперативной памяти физически стоят намертво, как стены между комнатами дворца. При выполнении каждого следующего проекта и даже в процессе выполнении одного и того же «дворец» перестраивается. Но нас не интересует физический уровень. Мы можем пока думать, что на всем протяжении «праздника» любая переменная спокойно живет в своей неизменной ячейке.
Перенос длинного оператора на следующую строку
Иногда оператор получается такой длинный, что не умещается на ширине окна кода, и чтобы его увидеть целиком, приходится прокручивать окно кода влево-вправо. Это неприятно, потому что прокручивать не хочется, а хочется видеть весь оператор на экране целиком. Часть оператора можно перенести на другую строку комбинацией пробела и подчеркивания. Например, вместо
Результат.Text = Val(Число1.Text) + Val(Число2.Text)
можно записать
Результат.Text = Val(Число1.Text) _
+ Val(Число2.Text)
или
Результат.Text = _
Val(Число1.Text) _
+ Val(Число2.Text)
Как видите, в конце строк в качестве знака переноса стоит пара символов: пробел и за ним знак подчеркивания.
Лично я для обозримости программы применяю еще одно средство – для окна кода выбираю шрифт Arial Narrow. Очень помогает, так как шрифт узенький и на ширину окна умещается много букв. Как это сделать, написано в 4.4.7.
VS предлагает еще одно средство: Edit ® Advanced ® Word Wrap. В этом случае код переносится на другую строку автоматически. Но мне это средство не нравится, так как нарушает привычную для глаз программиста систему отступов от левого края окна.
Перенос вашего проекта на другие компьютеры
Когда ваш проект, например, Калькулятор, заработает на вашем компьютере, вам захочется, чтобы он заработал и на компьютерах ваших друзей. В давние времена для решения этой проблемы достаточно было создать исполняемый файл вашего проекта (назовем его Калькулятор.exe) и скопировать его на компьютер вашего друга (где найти исполняемый файл, написано в 3.12.4). Теперь ситуация изменилась. У современных средств программирования гораздо более солидный и тяжелый подход к переносу программ с компьютера на компьютер. Не копировать, а инсталлировать – вот девиз! В причины отказа от легкой жизни я не буду особенно вдаваться, но основная такая – программа, написанная на VB, слишком зависит от Windows и других системных программ, а на разных компьютерах операционная система Windows и системные программы разные, поэтому копирования запускающего файла недостаточно, нужно как-то перенастраивать Windows и возможно инсталлировать какие-то системные программы. Все это входит в понятие инсталляции вашей программы на чужой компьютер.
Это не значит, что вы не можете попытаться безо всякой инсталляции просто скопировать исполняемый файл простенького проекта на другой компьютер с таким же системным программным обеспечением. Вполне возможно, что он и запустится.
Что такое инсталляция. Если вы когда-нибудь инсталлировали какую-нибудь игру на компьютер, то что такое инсталляция знаете. Вот вы купили компакт-диск с понравившейся игрой или программой (пусть это будет Microsoft Office). Во многих случаях купленная программа просто так не запустится, нужна установка или, по-другому, инсталляция (от английского install - устанавливать). Говорят, что на компакт-диске находится не сама программа Microsoft Office, а инсталляционный пакет программы Microsoft Office, то есть набор файлов, в который входят в сжатом виде и файлы Microsoft Office. Вы находите в инсталляционном пакете программу установки (ее запускающий файл чаще всего называется Setup.exe, хотя вполне могут быть и другие названия) и запускаете ее. Все ваши дальнейшие действия диктуются этой программой, которая еще называется мастером установки. Фактически вам приходится только отвечать на ее вопросы. Например, вы отвечаете на вопрос, в какую папку жесткого диска вы желаете установить Microsoft Office. Программа установки разворачивает сжатые файлы Microsoft Office и копирует их на жесткий диск вашего компьютера. Кроме этого она настраивает Windows на работу с Microsoft Office. После окончания установки вы сможете запускать Microsoft Office из стартового меню «Пуск» на панели задач Windows.
Во время установки игр вам, возможно, приходили в голову мысли о суперпрограммистах, которые мало того, что создают игру, они еще и создают программу установки и делают так, чтобы программа установки правильно установила игру на ваш компьютер. Сейчас я предлагаю вам стать таким «суперпрограммистом». Наша цель – через полчаса получить на жестком диске папку – инсталляционный пакет вашей программы, готовый к употреблению. После этого вы можете переписывать его на компакт-диск и дарить друзьям.
В качестве примера создадим инсталляционный пакет для нашего Калькулятора, созданного в 3.3. Если вы хотите создавать инсталляционный пакет для другого приложения – не беда, мое объяснение никак не зависит от устанавливаемого приложения.
Первые шаги – за ручку
Лучший способ познакомиться с VB – поскорее создать и запустить какой-нибудь проект. Пусть он будет маленький и никому, кроме нас, не нужный, но зато с ним мы пройдем все этапы работы с VB. Этим мы сейчас и займемся.
Садитесь за компьютер и приступим. Без компьютера этот раздел принесет вам мало пользы. Учиться Бейсику по книжке без компьютера – все равно, что учиться кататься на велосипеде по самоучителю без велосипеда. Все, что я говорю, вы отныне должны немедленно выполнять на компьютере. Это нужно и для тренировки и еще потому, что многое, кажущееся таким очевидным в тексте, становится странным и непонятным, когда нажмешь на клавиши. К тому же не забывайте, что автор – не Господь Бог и тоже может ошибиться. Компьютер же не ошибается и всегда поймает автора за руку.
Иногда я буду прямо говорить: «Нажмите такую-то клавишу» или «Сделайте на компьютере то-то и то-то». Но чаще я буду просто излагать материал, не повторяя по сто раз, что нужно проверять на компьютере каждое мое слово. Например, я говорю, что данная процедура по такой-то причине печатает число 36, и сразу же перехожу к другой теме. Стоп! Не надо спешить за мной. Сначала проверьте, действительно ли будет напечатано 36.
Напоминаю, что если у вас нет достаточного опыта работы на компьютере, к вашим услугам Приложение 2, где вы научитесь всему, что нужно, чтобы приступить к делу.
Первый этап – подготовка проекта
В коде вашего проекта могут встретиться операторы типа
Кл_деления.Image = Image.FromFile("D:\Фотографии\Earth.JPG")
или
Плеер.FileName = "D:\WINNT\Media\canyon.mid"
Эти операторы объединяет наличие в них адресов файлов. Это значит, что в режиме работы ваш проект может обращаться к графическим, звуковым и другим файлам, находящимся где-то далеко на диске. Вам никогда не приходило в голову, что будет, если кто-то, не подозревая, что эти файлы нужны вашей программе, сотрет их? Ничего хорошего не будет. А если вы к тому же предназначаете ваш проект для инсталляции на чужой компьютер, опасность и морока возрастают вдвойне.
Отсюда совет: Все такие файлы заранее скопируйте в папку BIN внутри папки вашего проекта, туда, где находится исполняемый файл вашего проекта. По принципу «Все мое ношу с собой». Так как после запуска проекта эта папка является текущей (см. 19.2.12), то также упростятся и адреса в приведенных выше операторах:
Кл_деления.Image = Image.FromFile("Earth.JPG")
Плеер.FileName = "canyon.mid"
Картинки, которые вы загрузили в объекты на этапе проектирования, не нуждаются во всех этих усилиях, так как они уже неявно сохранены в одном из файлов в папке проекта.
Рекомендую также с самого начала разработки проекта сохранять его не под предлагаемым именем WindowsApplication1, а под уникальным именем, например, Калькулятор.