ПОНЯТНО О Visual Basic NET

Beep

Совершим экскурсию внутрь одного из этих двух «ларцов». А чтобы экскурсия была не бесцельной, поставим задачу: Извлечь из компьютера при нажатии на кнопку короткий звук (звон, пик).  
Я знаю, что этот звук находится внутри «ларца» Microsoft. А если бы не знал? – Сел бы читать учебник или справочник, или систему помощи Help. Эта глава ни в коем случае не расскажет вам, где находятся все объекты. Для этого объектов слишком много. Она только расскажет вам, как добраться до нужного объекта, местоположение которого вам уже заранее известно.
 Напишите слово Microsoft и поставьте точку. Перед вами развернется список, представляющий содержимое пространства имен Microsoft. В нем 3 строки (Рис. 2.1).
Beep
Рис. 2.1
Каждая из этих 3 строк – не что иное, как еще одно пространство имен. Получается, что внутри «ларца» Microsoft находятся другие 3 «ларца» поменьше: CSharp, Visual Basic, Win32. В знак того, что это именно «ларец», то есть пространство имен, а не что-нибудь другое, в строке стоит значок из двух фигурных скобок {}.
Заглянем внутрь «ларца» Visual Basic. (Почему именно внутрь него? – Потому что я знаю, что нужный нам звук сидит там.) Для этого сделаем двойной щелчок на соответствующем пространстве имен и снова нажмем точку. Перед нами развернется список того, что входит внутрь Visual Basic. Прокрутим немного этот список (Рис. 2.2).
Beep
Рис. 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. Кроме них мы видим и множество других элементов, помеченных разными значками. Будем называть их объектами. Впоследствии вы обнаружите, что в большинстве своем они совсем  не похожи на то, что мы называли объектами раньше – форму и элементы управления.
    Объекты бывают разных видов. Укажем некоторые виды:

    DebugWriteLine
    классы
    DebugWriteLine
    структуры
    DebugWriteLine
    модули
    DebugWriteLine
    перечисления

    Это еще не «иглы», но уже нечто вроде «яйца». Все эти объекты – важные инструменты программирования, вместилища полезных свойств, методов и других нужных вещей.
    Наша же дорога ведет мимо – внутрь пространства имен Diagnostics. Выберите его в упомянутом списке и введите точку. Перед вами развернется список объектов, которые входят внутрь пространства имен Diagnostics.
    Выберите здесь класс Debug и снова введите точку. Перед вами развернется список того, чем обладает класс Debug. Будем называть это компонентами (members) класса. Обратите внимание, что значки здесь уже другие: нет ни классов, ни модулей, ни других объектов. А есть то, чем эти объекты обладают, то есть компоненты. В случае класса Debug это свойства и методы. Вот значки наиболее распространенных компонентов:

    DebugWriteLine
    свойства
    DebugWriteLine
    методы (многие методы называются также функциями)
    DebugWriteLine
    события

    Вот это уже настоящие «иглы». Выберем метод 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
    Смысл инструментов
    Format
    Левый верхний угол выделенного элемента управления совмещается с ближайшим узлом сетки
    Выравнивание выделенных эл-в  управления по горизонтали
    Выравнивание выделенных эл-в  управления по вертикали
    Выравнивание выделенных эл-в упр-я по ширине, высоте, размеру
    Выравнивание горизонтального промежутка между выделенными эл-ми упр-я, увеличение, уменьшение, уничтожение его.
    Выравнивание вертикального промежутка между выделенными эл-ми упр-я, увеличение, уменьшение, уничтожение его.
    Центрирование выделенных эл-в упр-я на форме по горизонтали и вертикали
    Перенесение выделенных эл-в упр-я на передний или задний план
    «Запирание» и «отпирание» выделенных эл-в упр-я

    Таблица 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.

    Главное меню Visual Studio NET

    А теперь кратко рассмотрим все нужные нам на первых порах пункты главного меню среды VS. О многих из них мы уже говорили или будем говорить позже и поэтому они здесь только упомянуты.
    Обратите внимание, что меню VS и отдельные его пункты значительно меняют свое содержание в зависимости от того, что мы сейчас делаем. Так, пункт Format не виден (как ненужный), когда мы работаем в окне кода.

    Главное меню

    Какое же приложение Windows без своего меню?! Нашему калькулятору оно, вроде бы, ни к чему, но, все равно, интересно и полезно сделать хотя бы простенькое.

    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

    -

    &

    &=

    *

    *=

    /

    /=

    \

    \=

    ^

    ^=

    +

    +=

    =

    -=

    Очевидно, придуманные вами имена не должны совпадать с ключевыми словами VB, иначе возникнет путаница. VB старается присматривать за этим и может указать вам на ошибку, если вы случайно используете ключевое слово в качестве имени. Если вам все-таки необходимо это сделать, возьмите имя в квадратные скобки, например, так: 

            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.
    InputBox
    Рис. 5.1
    После этого человек вводит в белое текстовое поле этого окна любое число и нажимает ОК. Далее компьютер присваивает переменной a введенное значение и продолжает работу, то есть переходит к выполнению следующего оператора.
    Если вам не нравится строка WindowsApplication1 в заголовке окна, то вы можете задать свою строку, дополнив оператор следующим образом:
    a = InputBox("Введите длину прямоугольника", "Ввод данных")
    Результат вы видите на Рис. 5.2.
    InputBox
    Рис. 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. Это значит, что компьютер обнаружил отсутствие некоторых нужных программ и предлагает их установить.


  • Инсталляция Visual Studio NET

    Рис. 4.1

  • Щелкните шаг 1. Через некоторое время вы увидите (Рис. 4.2) сообщение, которое заинтересует тех, кто собирается разрабатывать и размещать на своем компьютере Web-приложения (см. Глава 23. ) и использовать свой компьютер, как Web-сервер.


  • Инсталляция Visual Studio NET

    Рис. 4.2

  • Если не собираетесь, то нажмите Skip и переходите к следующему пункту. Если собираетесь, то щелкните Setup Instructions. В появившейся инструкции вы прочтете, что вам придется немедленно дополнить установку операционной системы Windows, добавив в нее и настроив так называемые Internet Information Services и FrontPage Server Extensions. Там же подробно указывается, как это сделать. Сохраните эту инструкцию, иначе потом до нее не доберетесь. Сделайте то, что в ней сказано. Для этого вам может понадобится системный диск Windows. После того, как инструкция выполнена, возвращайтесь к установке VS. Снова вставьте 1 диск и щелкните по 1 шагу установки.



  • Теперь компьютер показывает вам (Рис. 4.3), каких именно программ ему недостает для начала установки VS:


  • Инсталляция Visual Studio NET

    Рис. 4.3

  • Главными среди этих программ являются Internet Explorer 6 и .NET Framework. Последняя является даже не программой, а, как я уже говорил, целой платформой, на которой основывается работа не только VS, но и других программ. Она настолько важна, что фирма Microsoft собирается включить ее в следующую версию Windows. Нажимайте Install Now и выполняйте все, что скажет мастер, пока не установятся все необходимые программы. Наконец вы увидите ту же самую картинку, что на Рис. 4.3, но против каждой программы будет поставлена галочка в знак того, что программа установлена. Нажимайте Done. 1 шаг установки завершен.


  • Вскоре мастер покажет вам картинку (Рис. 4.4) в знак того, что можно приступать ко 2 шагу инсталляции, то есть уже непосредственно к установке VS.


  • Инсталляция Visual Studio NET

    Рис. 4.4

  • Щелкайте шаг 2.


  • После заключения лицензионного соглашения вам будет предоставлена возможность выбирать компоненты VS, которые вы хотите установить (Рис. 4.5).


  • Инсталляция Visual Studio NET

    Рис. 4.5

  • Установите флажок у Visual Basic .NET. Снимите флажки у Visual C++ .NET,   у  Visual C#   и у Visual J#. Если вы хотите пользоваться полными возможностями VS, установите все остальные флажки, как показано на рисунке. Если вы хотите немного сэкономить место на диске, то оставьте их так, как предлагает мастер. Если у вас совсем уж не хватает места, вы можете их даже снять. В этом случае вам придется смириться с тем, что некоторые возможности VS будут недоступны. Таблица справа сверху показывает вам объем выделенного компонента, поле посредине – его смысл, а диаграмма справа снизу – свободное место на диске.


  • Нажимайте Install Now. Компьютер довольно долго копирует файлы с инсталляционных дисков на жесткий диск и наконец выдает картинку с сообщением, что 2 шаг установки завершен (Рис. 4.6).


  • Инсталляция Visual Studio NET

    Рис. 4.6

  • Нажимайте Done.


  • Компьютер показывает такую же картинку, как на Рис. 4.4, но с выделенным 3 шагом. Вам предлагается установить справочную библиотеку MSDN Library, которая одновременно является основой системы Help.



  • Щелкайте шаг 3. На ваш компьютер будет установлена MSDN Library. В процессе установки вы увидите ряд окон. Названия этих окон в порядке их появления и указатель на текущее окно вы можете видеть на Рис. 4.7 в левом столбце. В том числе вы увидите окно лицензионного соглашения (выбирайте пункт I agree или I accept) и окна, сообщающие вам ту или иную информацию (нажимайте Next, что значит «Дальше»).


  • В одном из окон вам нужно будет выбрать тип установки (Рис. 4.7).

    Инсталляция Visual Studio NET

    Рис. 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).
    Как VB реагирует на наши ошибки
    Рис. 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).

    Как VB реагирует на наши ошибки

    Рис. 1.16

    Что же произошло? После нажатия кнопки VB начал честно выполнять процедуру и первый оператор Dim a = 0 выполнил без проблем. При выполнении второго оператора он столкнулся с необходимостью деления на 0 и, будучи не в силах это сделать, прервал работу программы и выдал соответствующее сообщение.

    Сообщение предназначено для того, чтобы пояснить человеку, знающему английский и имеющему некоторый опыт в программировании, в чем состоит ошибка. Если у вас такого опыта нет, запомните, что слово «overflow» из текста сообщения является часто указанием на деление на 0.

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

    Подробнее о том, как справляться с ошибками, вы можете прочитать в Глава 9. , а сейчас жмите кнопку Break в окне сообщения. Выполнение программы прервано, но не завершено. Оно замерло на моменте ошибки. Теперь для разгадки, в чем ошибка, полезно узнать, чему в настоящий момент выполнения программы (то есть перед выполнением помеченного оператора) равны значения переменных, свойств и других элементов проекта. Для этого достаточно поместить курсор мыши на этот элемент, не нажимая, и взглянуть на всплывшую подсказку. На Рис. 1.17 курсор поставлен на свойство Width и мы видим в подсказке, что ширина кнопки равна 96. Это та ширина, которая была до выполнения оператора Button1.Width = 100 / a, то есть та первоначальная ширина кнопки, которую мы видели до момента нажатия на нее.


    Как VB реагирует на наши ошибки

    Рис. 1.17

    Поместите курсор на переменную a – и VB вам подскажет, что a действительно в этот момент равна нулю.

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

    Завершите выполнение проекта нажатием кнопки Как VB реагирует на наши ошибки (Stop Debugging) на панели инструментов и исправьте ошибку.

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

    будет равна 0? Это ж надо в другую строку заглядывать!

    Ошибки выполнения еще называют исключениями (Exceptions).

    Однако, существует целый ряд ошибок, которые VB обнаруживает именно заранее. Вот они.

    Ошибки компиляции (построения, build errors). Если вы разговариваете с иностранцем, то для того, чтобы он вас понял, ваши предложения должны быть правильно грамматически построены и иметь понятный иностранцу смысл. Компьютер – тот же иностранец, но он кроме этого еще и очень «тупой» иностранец, поэтому все, что вы пишете в окне кода, должно быть абсолютно правильно с точки зрения VB и грамматически и по смыслу, иначе он вас просто не поймет. Я пока не буду углубляться в то, что такое «смысл» с точки зрения VB.

    Когда вы запускаете проект на выполнение, VB прежде всего смотрит, нет ли в программе грамматических и смысловых ошибок, и только если все правильно, разрешает проекту выполняться. Этот поиск ошибок происходит даже раньше запуска, еще в процессе ввода вами программного текста в окно кода. Пусть вы неправильно записали слово Width (см. Рис. 1.18) и не заметили этого. Когда вы убираете текстовый курсор из строки, которую вводили, VB уже начинает над строкой работать. Он немного подправляет ее внешний вид, приводя к стандартному. В частности, знаки арифметических операций и знаки равенства берутся в пробелы; расставляются, как положено, заглавные буквы. Но самое главное, VB обнаруживает некоторые ошибки и подчеркивает их волнистой линией.


    Как VB реагирует на наши ошибки

    Рис. 1.18

    Поместите курсор мыши на подчеркнутую часть строки, не нажимая, и взгляните на всплывшую подсказку. По тексту ее можно догадаться об ошибке. В нашем случае в тексте подсказки мы видим слово ‘Wids’. Наверное, с ним что-то не в порядке. Исправьте ошибку, подчеркивание пропадет.

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

    Как VB реагирует на наши ошибки

    Рис. 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 вам понадобится несколько Гигабайтов свободного дискового пространства.

    Команда "Добавить контрольное значение" (меню "Отладка")

    Эта команда выводит окно диалога "Добавление контрольного значения" для задания контрольного выражения. Это значение может быть любым допустимым в Basic выражением. Контрольные выражения обновляются в окне отладки каждый раз при входе в режим прерывания.
    Кнопка панели инструментов: Команда .

    Команда Интервал по горизонтали (меню "Формат")

    Изменяет расстояние по горизонтали между выделенными объектами.
    Выровнять интервал по горизонтали Перемещает выделенные объекты, беря за основу крайние, так что расстояния между ними становятся равными. Крайние объекты остаются на месте.
    Кнопка панели инструментов: Команда Интервал по горизонтали (меню .
    Увеличить интервал по горизонтали Увеличивает горизонтальный интервал на единицу сетки, беря за основу объект с фокусом. Когда объект приобретает фокус на его границах появляются белые маркеры. Размер единицы сетки изменяется на вкладке Общие окна диалога Параметры.
    Кнопка панели инструментов: Команда Интервал по горизонтали (меню .
    Уменьшить интервал по горизонтали Уменьшает горизонтальный интервал на единицу сетки, беря за основу объект с фокусом. Когда объект приобретает фокус на его границах появляются белые маркеры. Размер единицы сетки изменяется на вкладке Общие окна диалога Параметры.
    Кнопка панели инструментов: Команда Интервал по горизонтали (меню .
    Устранить интервал по горизонтали Удаляет горизонтальный интервал, беря за основу объект с фокусом, так, что объекты касаются друг друга краями. Когда объект приобретает фокус на его границах появляются белые маркеры.
    Кнопка панели инструментов: Команда Интервал по горизонтали (меню .
    Примечание. Объект с фокусом не перемещается, зато вокруг него перемещаются остальные объекты.
    Примечание. Если выполнение команды Интервал по горизонтали не привело к ожидаемому результату, следует переместить некоторые объекты вручную и затем повторить команду. Также бывает полезно использовать команду Интервал по вертикали.

    Команда Интервал по вертикали (меню "Формат")

    Изменяет расстояние по горизонтали между выделенными объектами, беря за основу объект с фокусом. Когда объект приобретает фокус на его границах появляются белые маркеры.
    Выровнять интервал по вертикали Перемещает выделенные объекты, беря за основу самый верхний и нижний, так что расстояния между ними становятся равными. Крайние объекты остаются на месте.
    Кнопка панели инструментов: Команда Интервал по вертикали (меню .
    Увеличить интервал по вертикали Увеличивает вертикальный интервал на единицу сетки, беря за основу объект с фокусом. Размер единицы сетки изменяется на вкладке Общие окна диалога Параметры.
    Кнопка панели инструментов: Команда Интервал по вертикали (меню .
    Уменьшить интервал по вертикали Уменьшает вертикальный интервал на единицу сетки, беря за основу объект с фокусом. Размер единицы сетки изменяется на вкладке Общие окна диалога Параметры.
    Кнопка панели инструментов: Команда Интервал по вертикали (меню .
    Устранить интервал по вертикали Удаляет вертикальный интервал, беря за основу объект с фокусом, так, что объекты касаются друг друга краями.
    Кнопка панели инструментов: Команда Интервал по вертикали (меню .
    Примечание. Объект с фокусом не перемещается, зато вокруг него перемещаются остальные объекты.
    Примечание. Если выполнение команды Интервал по вертикали не привело к ожидаемому результату, следует переместить некоторые объекты вручную и затем повторить команду. Также бывает полезно использовать команду Интервал по горизонтали.

    Команда "Изменить контрольное значение" (меню "Отладка")

    Эта команда выводит окно диалога "Изменение контрольного значения" для редактирования или удаления контрольного выражения. Команда доступна только при установленном контрольном выражении, даже если окно отладки скрыто.
    Кнопка панели инструментов: Команда . Клавиша быстрого вызова: CTRL+W.

    Команда "Компоненты группы" (контекстное меню окна просмотра объектов)

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

    Команда "Контрольное значение" (меню "Отладка")

    Эта команда выводит окно диалога "Контрольное значение" с текущим значением выделенного выражения. Эта команда служит для просмотра текущего значения переменной, свойства или другого выражения, для которого не задано контрольное выражение. Выделите выражение в окне модуля или в окне отладки и затем выполните команду "Контрольное значение". Для добавления контрольного выражения из окна диалога "Контрольное значение" следует нажать кнопку "Добавить".
    Кнопка панели инструментов: Команда . Клавиша быстрого вызова: SHIFT+F9.

    Команда "Копировать" (контекстное меню окна просмотра объектов)

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

    Команда Краткие сведения (меню "Правка")

    Выводит синтаксис использования выбранной в окне модуля переменной, функции, инструкции, метода или процедуры.
    Эта команда отображает синтаксис и выделяет текущий параметр. Для функций или процедур с параметрами параметр выделяется жирным шрифтом по мере его ввода, до тех пор пока не введена запятая, отделяющая его от следующего параметра.
    Чтобы краткие сведения появлялись при наборе текста автоматически необходимо выбрать параметр Краткие сведения на вкладке Редактор окна диалога Параметры.
    Кнопка панели инструментов: Команда Краткие сведения (меню . Клавиша быстрого вызова: CTRL+I.

    Команда "Масштаб"

    Эта команда служит для уменьшения или увеличения изображения выбранной формы. Допускается выбор или ввод коэффициента масштабирования в пределах от 10 до 400 процентов.
    Команда доступна только на панели инструментов "UserForm".
    Панель инструментов Команда

    Команда "Настройка" (контекстное меню)

    Эта команда выводит окно "Настройка" для добавления, удаления, изменения или создания специальных панелей инструментов.

    Команда "Описание" (контекстное меню)

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

    Команда "Отобразить следующую инструкцию" (меню "Отладка")

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

    Команда "Печать" (меню "Файл")

    Команда позволяет распечатать формы и тест программ на принтере, указанном в Панели управления Microsoft Windows.
    Кнопка панели инструментов: Команда . Клавиша быстрого вызова: CTRL+P.
    Параметры окна диалога
    "Принтер" Определяет принтер, используемый для печати.
    "Диапазон печати Определяет диапазон печати:
    "Выделенный текст - Печать выделенного текста программы.
    "Текущий модуль - Печать формы и/или текста программы для выделенного модуля.
    "Текущий проект - Печать формы и/или текста программы для всего проекта.
    "Печатать Задает распечатываемый объект. Допускается выбор любого числа параметров, в зависимости от значения диапазона печати.
    "Рисунок формы - Печать изображения формы.
    "Программу - Печать текста программы в выбранном диапазоне.
    "Качество Определяет качество печати: высокое, среднее, низкое или черновик.
    "Печать в файл" Если это флажок установлен, результат печати направляется в файл, указанный в окне диалога "Печать в файл". Оно появляется после нажатия кнопки "OK" в окне диалога "Печать".
    "OK" Начало печати.
    "Отмена" Закрытие окна диалога, не выполняя печать.
    "Установка" Вывод стандартного окна диалога "Параметры страницы".

    Команда "Переместить" (контекстное меню)

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

    Команда "Показать скрытые компоненты" (контекстное меню окна просмотра объектов)

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

    Команда Порядок (меню "Формат")

    Изменяет порядок выделенных объектов в форме.
    На передний план Помещает выделенные объекты в форме перед всеми остальными.
    Кнопка панели инструментов: Команда Порядок (меню . Клавиши быстрого вызова: CTRL+J.
    На задний план Помещает выделенные объекты в форме позади всех остальных.
    Кнопка панели инструментов: Команда Порядок (меню . Клавиши быстрого вызова: CTRL+K.
    Переместить вверх Перемещает выделенный объект на один шаг упорядочения по z выше.
    Кнопка панели инструментов: Команда Порядок (меню .
    Переместить вниз Перемещает выделенный объект на один шаг упорядочения по z ниже
    Кнопка панели инструментов: Команда Порядок (меню .

    Команда "Размер" (контекстное меню)

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

    Команда Разместить по центру в форме (меню "Формат")

    Располагает выделенные объекты на центральных осях формы.
    по горизонтали Располагает середины выделенных объектов на одной горизонтальной линии в середине формы.
    Кнопка панели инструментов: Команда Разместить по центру в форме (меню .
    по вертикали Располагает центры выделенных объектов на одной вертикальной линии в центре формы.
    Кнопка панели инструментов: Команда Разместить по центру в форме (меню .

    Команда "Скрыть" (контекстное меню)

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

    Команда "Следующая инструкция" (меню "Отладка")

    Устанавливает точку выполнения на выбранную строку программы. Для установки строки, которая будет выполняться после текущей инструкции, следует выбрать нужную строку программы и выполнить команду "Следующая инструкция" или с помощью мыши переместить индикатор текущей выполняемой строки на полях в нужную строку.
    С помощью этой команды допускается выбор строки программы, расположенной как до, так и после текущей инструкции. При запуске программы промежуточные строки не выполняются. Эта команда полезна для повторения инструкции внутри текущей процедуры, а также для пропуска нежелательных инструкций. С помощью команды "Следующая инструкция" невозможно установить точку выполнения на инструкцию в другой процедуре.
    Кнопка панели инструментов: Команда . Клавиша быстрого вызова: CTRL+F9.

    Команда "Снять все точки останова" (меню "Отладка")

    Эта команда удаляет все точки останова из проекта. В этом случае возможно прерывание программы, если установлено контрольное выражение или на вкладке "Общие" окна диалога "Параметры" выбран параметр Останов при любой ошибке. Отменить действие команды "Снять все точки останова" нельзя.
    Кнопка панели инструментов: Команда . Клавиша быстрого вызова: CTRL+SHIFT+F9.

    Команда Список констант (меню "Правка")

    В окне модуля выводит раскрывающийся список, содержащий допустимые константы для введенного свойства, за которым следует знак равенства (=). Допускается также применение этой команды к функциям, значением которых являются константы. Чтобы список при наборе текста открывался автоматически необходимо выбрать параметр Список компонентов на вкладке Редактор окна диалога Параметры.
    Поиск константы в списке выполняется путем:
    Ввода имени.
    Использования клавиш управления курсором вверх и вниз для перемещения по списку.
    Прокрутки списка и выбора желаемой константы.
    Вставка выделенной константы в инструкцию выполняется путем:
    Двойного щелчка мышью на константе.
    Выделения константы и нажатия клавиши TAB для вставки или ENTER для вставки и перехода к следующей строке.
    Кнопка панели инструментов: Команда Список констант (меню . Клавиша быстрого вызова: CTRL+SHIFT+J.

    Команда Список свойств/методов (меню "Правка")

    В окне модуля выводит раскрывающийся список, содержащий доступные для объекта свойства и методы. Если указатель установлен на пустой строке, команда Список свойств/методов выводит список глобально доступных методов. Чтобы список при наборе текста открывался автоматически необходимо выбрать параметр Список компонентов на вкладке Редактор окна диалога Параметры.
    Поиск свойства или метода в списке выполняется путем:
    Ввода имени. По мере ввода, подходящее свойство или метод выделяется и перемещается в начало списка.
    Использования клавиш управления курсором вверх и вниз для перемещения по списку.
    Прокрутки списка и выбора желаемого свойства или метода.
    Вставка выделенного свойства или метода в инструкцию выполняется путем:
    Двойного щелчка мышью на свойстве или методе.
    Выделения свойства или метода и нажатия клавиши TAB для вставки или ENTER для вставки и перехода к следующей строке.
    Примечание. После точки (.) в объектах типа Variant список не выводится.
    Кнопка панели инструментов: Команда Список свойств/методов (меню . Клавиша быстрого вызова: CTRL+J.

    Команда "Справка" (контекстное меню)

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

    Команда Сведения о параметре (меню "Правка")

    Эта команда в окне модуля выводит сведения о параметрах начальной функции или инструкции. Если функция или инструкция содержит в качестве параметров другие функции, команда Сведения о параметрах выведет сведения только о первой функции. Для получения сведений по всем вложенным функциям служит команда Краткие сведения.
    Параметр выделяется жирным шрифтом по мере его ввода, до тех пор пока не введена запятая, отделяющая его от следующего параметра.
    Вызванные Сведения о параметре не исчезнут пока:
    Не введены все требуемые параметры.
    Функция не завершена без указания необязательных параметров.
    Не нажата клавиша ESC.
    Кнопка панели инструментов: Команда Сведения о параметре (меню . Клавиша быстрого вызова: CTRL+SHIFT+I.

    Команда "Свернуть родительский объект" (контекстное меню)

    Команда служит для скрытия элементов родительского объекта в областях Локальные и Контрольные окна отладки. При скрытии элементов списка, значок минус (-) слева от выражения изменяется на плюс (+).

    Команда "Свойства" (контекстное меню окна просмотра объектов)

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

    Команда "Свойства" (контекстное меню)

    Эта команда выводит окно "Свойства" для выбранного объекта.

    Команда "Точка останова" (меню "Отладка")

    Команда служит для установки или удаления точки останова в текущей строке программы. Невозможно установить точку останова в строке, содержащей неисполняемые инструкции, например комментарии, инструкции описания или пустые строки.
    Строка программы, в которой установлена точка останова, приобретает цвет, заданный на вкладке "Модуль" в окне диалога "Параметры".
    Кнопка панели инструментов: Команда . Клавиша быстрого вызова: F9.

    Команда "Только слово целиком (Поиск)" (контекстное меню окна просмотра объектов)

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

    Команда "Удалить контрольное значение" (контекстное меню)

    Эта команда служит для удаления контрольного значения.

    Команда Уменьшить отступ (меню "Правка")

    Смещает все выделенные строки в предыдущую позицию табуляции. Все выделенные строки смещаются на одинаковое число пробелов, при этом сохраняются относительные отступы между ними.
    Изменение интервала табуляции выполняется на вкладке Редактор окна диалога Параметры.
    Кнопка панели инструментов: Команда Уменьшить отступ (меню . Клавиша быстрого вызова: CTRL+SHIFT+M.

    Команда "Установить/снять" (контекстное меню)

    Точка останова. Устанавливает или удаляет точку останова на текущей строке.
    Закладка. Устанавливает или удаляет закладку на текущей строке в окне модуля.

    Команда Увеличить отступ (меню "Правка")

    Смещает все выделенные строки в следующую позицию табуляции. Все выделенные строки смещаются на одинаковое число пробелов, при этом сохраняются относительные отступы между ними.
    Изменение интервала табуляции выполняется на вкладке Редактор окна диалога Параметры.
    Кнопка панели инструментов: Команда Увеличить отступ (меню . Клавиша быстрого вызова: CTRL+M.

    Команда Выделить все (меню "Правка")

    Эта команда служит для выделения всего текста в окне модуля или всех элементов управления в форме.

    Команда "Выполнить до текущей позиции" (меню "Отладка")

    При работе в режиме конструктора команда "Выполнить до текущей позиции" служит для задания инструкции, находящейся ниже по тексту программы, на которой необходимо остановить выполнение. Программа выполняется от текущей до выбранной инструкции в строке индикатора на полях, напротив текущей строки выполнения, появляется индикатор на полях Команда .
    Эта команда полезна, например, для пропуска больших циклов.
    Клавиша быстрого вызова: CTRL+F8.

    Команда Выровнять размер (меню "Формат")

    Беря за основу объект с белыми маркерами захвата, корректирует размеры выделенных объектов в выбранном направлении.
    по ширииине Корректирует ширину.
    Кнопка панели инструментов: Команда Выровнять размер (меню .
    по высоте Корректирует высоту.
    Кнопка панели инструментов: Команда Выровнять размер (меню .
    по ширииине и высоте Корректирует как ширину, так и высоту.
    Кнопка панели инструментов: Команда Выровнять размер (меню .

    Команда Выровнять размер по сетке (меню "Формат")

    Изменяет высоту и ширину выделенного объекта до ближайшей линий сетки в форме. Размер сетки изменяется на вкладке Общие окна диалога Параметры.
    Кнопка панели инструментов: Команда Выровнять размер по сетке (меню .

    Команда "Закрепление" (контекстное меню)

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

    Команда Заменить (меню "Правка")

    Команда выполняет поиск указанного текста в модуле текущей базы данных и заменяет его на новый текст, заданный в окне диалога Замена.
    Кнопка панели инструментов: Команда Заменить (меню . Клавиша быстрого вызова: CTRL+H.
    Параметры окна диалога
    Образец В это поле следует ввести или вставить искомый текст либо нажать стрелку вниз и выбрать один из четырех последних использовавшихся образцов. Если при вызове команды выделен текст или курсор находится на слове, этот текст будет помещен в поле Образец.
    Заменить на В это поле следует ввести или вставить из буфера обмена текст замены. Для удаления из документа текста, указанного в поле Образец следует оставить поле Заменить на пустым.
    Область поиска Задает диапазон поиска.
    Текущая процедура-Поиск выполняется только в текущей процедуре.
    Текущий модуль-Поиск выполняется только в текущем модуле.
    В текущей базе данных-Поиск выполняется во всех модулях текущей базы данных.
    Выделенный текст-Поиск выполняется в выделенном блоке текста.
    Просмотр Устанавливает направление поиска: Вверх, Вниз от положения курсора или Все в выбранном диапазоне.
    Только слово целиком Выполняет поиск целого слова и игнорирует его вхождения в более длинные слова.
    С учетом регистра Выполняет поиск вхождений с комбинацией строчных и заглавных букв, указанной в поле Образец.
    Использовать шаблон Выполняет поиск с использованием подстановочных символов.
    Найти далее Выполняет поиск и выделяет следующее вхождение текста, заданного в поле Образец.
    Отмена Закрывает окно диалога без выполнения замены.
    Заменить Запрашивает подтверждение перед каждой заменой искомого текста.
    Заменить все Выполняет замену всех вхождений искомого текста на текст замены, не запрашивая подтверждения.

    Команда Завершить слово (меню "Правка")

    Завершает ввод набираемого слова, если только введено достаточно символов для распознавания слова Visual Basic.
    Кнопка панели инструментов: Команда Завершить слово (меню . Клавиша быстрого вызова: CTRL+SPACEBAR.

    Команды Найти и Найти далее (меню "Правка")

    Найти Выполняет поиск указанного в окне диалога Поиск текста в заданном диапазоне.
    В случае успешного поиска окно диалога закрывается и выделяется найденный и текст. Если совпадение не обнаружено, выводится окно с сообщением о том, что указанный текст не найден.
    Кнопка панели инструментов: Команды Найти и Найти далее (меню . Клавиша быстрого вызова: CTRL+F.
    Найти далее Выполняет поиск и выделяет следующее вхождение текста, заданного в поле Образец окна диалога Поиск.
    Кнопка панели инструментов: Команды Найти и Найти далее (меню . Клавиши быстрого вызова: F3 (найти далее) или SHIFT+F3 (найти предыдущее вхождение).
    Параметры окна диалога
    Образец В это поле следует ввести или вставить искомый текст либо нажать стрелку вниз и выбрать один из четырех последних использовавшихся образцов. Если при вызове команды выделен текст или курсор находится на слове, этот текст будет помещен в поле Образец.
    Область поиска Задает диапазон поиска.
    Текущая процедура-Поиск выполняется только в текущей процедуре.
    Текущий модуль-Поиск выполняется только в текущем модуле.
    В текущей базе данных-Поиск выполняется во всех модулях текущей базы данных.
    Выделенный текст-Поиск выполняется в выделенном блоке текста.
    Просмотр Устанавливает направление поиска: Вверх, Вниз от положения курсора или Все в выбранном диапазоне.
    Только слово целиком Выполняет поиск целого слова и игнорирует его вхождения в более длинные слова.
    С учетом регистра Выполняет поиск вхождений с комбинацией строчных и заглавных букв, указанной в поле Образец.
    Использовать шаблон Выполняет поиск с использованием подстановочных символов.
    Найти далее Выполняет поиск и выделяет следующее вхождение текста, заданного в поле Образец.
    Отмена Закрывает окно диалога без выполнения поиска.
    Заменить Выводит окно диалога Замена, сохраняя текст, введенный в окне диалога Поиск.

    Команды "Объект" и "Программа" (контекстное меню)

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

    Команды Отменить и Вернуть (меню Правка)

    Отменить Отменяет последнее действие редактирования, например ввод текста в окне модуля или удаление элемента управления. При удалении одного или более элементов удаления команда Отменить позволяет восстановить их и их свойства.
    Кнопка панели инструментов Команды Отменить и Вернуть (меню Правка). Клавиши быстрого вызова: CTRL+Z или ALT+BACKSPACE.
    Примечание. В форме с помощью этой команды невозможно отменить команду Вырезать.
    Вернуть Восстанавливает последнее изменение текста, изменение размера или положения элемента управления, если с момента вызова команды Отменить не произошло никаких действий.
    Кнопка панели инструментов Команды Отменить и Вернуть (меню Правка).
    В случае редактирования текста команды Отменить и Вернуть позволяют восстановить до двадцати изменений.
    Эти команды недоступны во время выполнения программы, если не были внесены изменения или если после редактирования были выполнены другие действия. Также, в случае больших изменений, выполнению команды Вернуть может помешать нехватка памяти.

    Команды "Шаг с заходом", "Шаг с обходом" и "Шаг с выходом" (меню "Отладка")

    "Шаг с заходом" Выполняет одну инструкцию программы.
    Если команда "Шаг с заходом" выполняется не в режиме конструктора, на текущей строке выполнения осуществляется переход в режим прерывания. Если инструкция является вызовом процедуры, будет выведена первая инструкция этой процедуры.
    Во время разработки эта команда запускает выполнение и входит в режим прерывания, прежде чем выполнится первая строка программы.
    При отсутствии текущей точки выполнения команда "Шаг с заходом" не осуществляет никаких действий, пока не будет активирована программа, например выбором документа с помощью мыши.
    Кнопка панели инструментов: Команды . Клавиша быстрого вызова: F8.
    "Шаг с обходом" Похожа на команду "Шаг с заходом". Различие проявляется, только если текущая инструкция содержит вызов процедуры.
    Команду "Шаг с обходом" выполняет процедуру за один шаг и затем переходит к следующей инструкции текущей процедуры. Поэтому инструкцией, выводимой на следующем шаге, является следующая инструкция текущей процедуры, независимо от того, содержит ли текущая инструкция вызов процедуры. Команда доступна только в режиме прерывания.
    Кнопка панели инструментов: Команды . Клавиша быстрого вызова: SHIFT+F8.
    "Шаг с выходом" Выполняет оставшиеся строки процедуры, в которой находится текущая точка выполнения. Следующей выводимой инструкцией является инструкция, следующая за вызовом этой процедуры. Выполняются все строки программы между текущей и конечной точками выполнения. Команда доступна только в режиме прерывания.
    Кнопка панели инструментов: Команды . Клавиша быстрого вызова: CTRL+SHIFT+F8.

    Команды Вырезать, Копировать, Вставить (меню "Правка")

    Вырезать Удаляет выделенный текст или элемент управления и помещает его в буфер обмена. Чтобы сделать команду доступной необходимо выделить хотя бы один символ или элемент управления. Допускается отмена команды Вырезать над элементом управления.
    Кнопка панели инструментов: Команды Вырезать, Копировать, Вставить (меню . Клавиши быстрого вызова: CTRL+X или SHIFT+DELETE
    Копировать Копирует выделенный текст или элемент управления и помещает его в буфер обмена. Чтобы сделать команду доступной необходимо выделить хотя бы один символ или элемент управления. Отмена команды Копировать в окне модуля невозможна.
    Кнопка панели инструментов: Команды Вырезать, Копировать, Вставить (меню . Клавиши быстрого вызова: CTRL+C или CTRL+INSERT.
    Вставить Вставляет содержимое буфера обмена в текущую позицию. Текст помещается туда, где находится курсор.
    Вставляемые элементы управления помещаются в центр формы.
    Допускается отмена команды Вставить в окне модуля и в форме, если в нее был вставлен элемент управления.
    Кнопка панели инструментов: Команды Вырезать, Копировать, Вставить (меню . Клавиши быстрого вызова: CTRL+V или SHIFT+INS.

    Команды Выровнять (меню "Формат")

    Эти команды служат для выравнивания выделенных объектов относительно друг друга с использованием в качестве основы элемента управления с белыми маркерами захвата.
    По левому краю Выравнивает горизонтальное положение выбранных объектов, помещая их левые границы на одну линию с элементом управления с белыми маркерами захвата.
    Кнопка панели инструментов: Команды Выровнять (меню .
    По центру Выравнивает горизонтальное положение выбранных объектов, помещая их центры на одну линию с элементом управления с белыми маркерами захвата.
    Кнопка панели инструментов: Команды Выровнять (меню .
    По правому краю Выравнивает горизонтальное положение выбранных объектов, помещая их правые границы на одну линию с элементом управления с белыми маркерами захвата.
    Кнопка панели инструментов: Команды Выровнять (меню .
    По верхнему краю Выравнивает вертикальное положение выбранных объектов, помещая их верхние границы на одну линию с элементом управления с белыми маркерами захвата.
    Кнопка панели инструментов: Команды Выровнять (меню .
    По середине Выравнивает вертикальное положение выбранных объектов, помещая их середины на одну линию с элементом управления с белыми маркерами захвата.
    Кнопка панели инструментов: Команды Выровнять (меню .
    По нижнему краю Выравнивает вертикальное положение выбранных объектов, помещая их нижние границы на одну линию с элементом управления с белыми маркерами захвата.
    Кнопка панели инструментов: Команды Выровнять (меню .
    По узлам сетки Помещает верхний левый угол выделенных объектов в ближайший узел сетки. Размер объектов не изменяется.
    Кнопка панели инструментов: Команды Выровнять (меню .

    Команды Закладки (меню "Правка")

    Выбор этой команды приводит к появлению меню, позволяющему создавать или удалять закладки в окне модуля, переходить к следующей или предыдущей закладке или удалять все закладки.
    При добавлении закладки рядом с текущей строкой появляется значок Команды Закладки (меню .
    Закладка Снимает или устанавливает закладку.
    Кнопка панели инструментов: Команды Закладки (меню
    Следующая закладка Перемещает место вставки к следующей закладке.
    Кнопка панели инструментов: Команды Закладки (меню
    Предыдущая закладка Перемещает место вставки к предыдущей закладке.
    Кнопка панели инструментов: Команды Закладки (меню
    Снять все закладки Удаляет все закладки.
    Кнопка панели инструментов: Команды Закладки (меню

    Команды "Закомментировать блок" и "Раскомментировать блок"

    Эти команды служит для добавления или удаления символа комментария, апострофа, в каждую строку выделенного блока текста. Если в момент вызова команд нет выделенного текста, символ комментария добавляется в строку, содержащую указатель.
    Закомментировать блок Добавляет символ комментария в каждую строку выделенного блока теста.
    Раскомментировать блок Удаляет символ комментария из каждой строки выделенного блока теста.

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

    Комментарии – это пояснения в тексте программы. Зачем они нужны?
    Когда человек со стороны посмотрит на вашу программу, например, на эту (из калькулятора)
    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)

    Кроме этого, имеются функции  Sin, Cos, Tan (что означает тангенс), Asin (что означает арксинус), Acos, Atan и некоторые другие.

    Работа со случайными величинами описана в 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 несколько другое значение.

    В дальнейшем понятие литерала я расширю и на нечисловые типы данных.

    Меню Visual Basic

    В Visual Basic существует два типа меню: встроенные и контекстные.
    Встроенные меню
    Встроенные меню выводятся в строке меню, над верхней границей окна Visual Basic. Название каждого меню отражает содержащиеся в нем команды. Например, меню "Формат" содержит команды, предназначенные для форматирования формы. Некоторые команды вызывают подменю с более подробными командами. Например, выбор команды "Панели" инструментов из меню "Вид приводит" к появлению подменю с названиями панелей инструментов и командой "Настройка". Эта команда служит для изменения встроенных меню или добавления в строку меню новых команд.
    Контекстные меню
    Контекстные меню содержат наиболее часто используемые команды и появляются при нажатии правой кнопки мыши или клавиш SHIFT+F10.
    Примечание. Сведения о команде или меню можно получить с помощью меню "?".

    Метки Свойства: имя, текст, шрифт

    Имя и текст. У каждого объекта есть свойство имя (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

    Результат

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

    Когда вы запустите ваш проект, он должен выглядеть так, как на Рис. 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).
    Object Browser
    Рис. 4.17
    Сборки. Каждая строка здесь является так называемой сборкой. Сборка – это файл (бывает – несколько файлов), хранящий в себе одно или несколько пространств имен. На рисунке вы видите те сборки, пространства имен которых в настоящий момент находятся в распоряжении вашего проекта.
    Обратите внимание, что среди прочих сборок указана и сборка вашего проекта. О ней поговорим позже, а сейчас можете не обращать на нее внимания.
    Остальные сборки, которые вы видите на рисунке, служат вместилищем пространств имен библиотеки классов .NET Framework. Не вся библиотека классов .NET Framework в настоящий момент подключена к вашему проекту, а лишь ее самые широко используемые части. Сделано это из экономии. Соответственно, на рисунке вы видите далеко не все сборки библиотеки классов .NET Framework. Но вы можете при желании быстро подключить дополнительные сборки (см. 25.2.2).
    Файл сборки обычно имеет расширение dll или exe. По назначению сборки близки к широко известным библиотекам dll, но это не одно и то же.
    В одной сборке может находиться несколько пространств имен и наоборот – одно пространство имен может располагаться в нескольких сборках. Часто сборка содержит пространство имен, одноименное с ней.
    Пример путешествия по Object Browser. Давайте доберемся в Object Browser до метода Write класса Debug. Щелкните по плюсу в строке сборки System. Мы видим (Рис. 4.18), что внутрь сборки System входит несколько пространств имен. Каждое из них помечено парой фигурных скобок {}.
    Object Browser
    Рис. 4.18

    Особенность отображения в этом окне заключается в том, что видны сразу же все пространства имен, находящиеся в сборке, включая и пространства вложенные в другие пространства. Так, вы видите и пространство имен System, и входящее в него пространство имен System.ComponentModel, и пространства имен, входящие в System.ComponentModel.

    Щелкните по плюсу в пространстве имен System.Diagnostics, которое предоставляет нам разнообразные инструменты, в том числе и для отладки программы. Мы видим (Рис. 4.19) внутри пространства имен большое количество объектов.

    Object Browser

    Рис. 4.19

    Щелкните по классу Debug (по нему самому, а не по плюсу), чтобы выделить его. Мы видим (Рис. 4.20) в правой панели Object Browser компоненты класса Debug: свойства и методы. В нижней части окна вы видите краткое описание выделенного элемента. Со временем мы научимся понимать эти описания.

    Object Browser

    Рис. 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 нужных нам компонентов. Для этого используется кнопка поиска  Object Browser. Пусть вы забыли, где находится Beep. Вы щелкаете по кнопке поиска, затем в появившемся окне поиска (Рис. 4.21) набираете слово Beep, нажимаете Find и в появившемся ниже окне видите результат:

    Microsoft.VisualBasic.Interaction

    Object Browser

    Рис. 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 довольно много, глаза разбегаются и создается ощущение стога сена, в котором нужно найти иголку Поэтому на смысле разных окон я остановлюсь позже, а сначала мы должны научиться управляться с ними, независимо от их смысла: открывать, закрывать, передвигать, настраивать.

    Окно диалога Добавление контрольного значения

    Окно диалога Добавление контрольного значения
    Используется для ввода контрольного выражения. Вводимое выражение может быть переменной, свойством, вызовом функции или любым другим допустимым в Basic выражением. Контрольные выражения в области Контрольные окна отладки обновляются каждый раз при входе в режим прерывания, а также после выполнения каждой инструкции в окне проверки.
    Допускается перетаскивание с помощью мыши выделенного выражения из окна модуля в область Контрольные окна отладки.
    Важно. При выборе контекста контрольного выражения всегда следует использовать самую узкую область определения, удовлетворяющую поставленной задаче. Выбор всех процедур или всех модулей может значительно замедлить выполнение, поскольку контрольное выражение вычисляется после выполнения каждой инструкции. Выбор в качестве контекста отдельной процедуры влияет на выполнение только в те моменты, когда эта процедура находится в списке активных вызовов, что можно наблюдать, выбрав команду Стек вызова из меню Вид.
    Параметры окна диалога
    Выражение По умолчанию отображает выделенное в окне модуля выражение. Выражение может быть переменной, свойством, вызовом функции или другим допустимым выражением. Возможно его изменение.
    Контекст Задает область определения переменных в контрольном выражении.
    Процедура - Отображает имя процедуры, в которой определено выделенное выражение (по умолчанию). Задает процедуру(ы), в которых вычисляется контрольное выражение. Допускается выбор всех процедур либо отдельной процедуры.
    Модуль - Отображает имя модуля, в котором определено выделенное выражение (по умолчанию). Допускается выбор всех модулей либо отдельного модуля для вычисления значения контрольного выражения.
    Проект - Отображает имя текущего проекта. Вычисление выражений вне текущего проекта невозможно.
    Тип контрольного значения Определяет реакцию Visual Basic на контрольное выражение.
    Контрольное выражение - Отображает в области Контрольные окна отладки выражение и его значение. При входе в режим прерывания значение этого выражения автоматически обновляется.
    Останов, если значение истинно - Выполнение программы автоматически прерывается, когда значение выражения становится истинным или ненулевым (недопустимо для строковых выражений).
    Останов при изменении значения - Выполнение программы автоматически прерывается при изменении значения выражения в указанном контексте.

    Окно диалога Изменение контрольного значения

    Окно диалога Изменение контрольного значения
    Используется для удаления или изменения содержания или типа контрольного выражени.
    Важно. При выборе контекста контрольного выражения всегда следует использовать самую узкую область определения, удовлетворяющую поставленной задаче. Выбор всех процедур или всех модулей может значительно замедлить выполнение, поскольку контрольное выражение вычисляется после выполнения каждой инструкции. Выбор в качестве контекста отдельной процедуры влияет на выполнение только в те моменты, когда эта процедура находится в списке активных вызовов.
    Параметры окна диалога
    Выражение По умолчанию отображает выделенное в окне модуля выражение. Выражение может быть переменной, свойством, вызовом функции или другим допустимым выражением. Возможно его изменение.
    Контекст Задает область определения переменных в контрольном выражении.
    Процедура - Отображает имя процедуры, в которой определено выделенное выражение (по умолчанию). Задает процедуру(ы), в которых вычисляется контрольное выражение. Допускается выбор всех процедур либо отдельной процедуры.
    Модуль - Отображает имя модуля, в котором определено выделенное выражение (по умолчанию). Допускается выбор всех модулей либо отдельного модуля для вычисления значения контрольного выражения.
    Проект - Отображает имя текущего проекта. Вычисление выражений вне текущего проекта невозможно.
    Тип контрольного значения Определяет реакцию Visual Basic на контрольное выражение.
    Контрольное выражение - Отображает в области Контрольные окна отладки выражение и его значение. При входе в режим прерывания значение этого выражения автоматически обновляется.
    Останов, если значение истинно - Выполнение программы автоматически прерывается, когда значение выражения становится истинным или ненулевым (недопустимо для строковых выражений).
    Останов при изменении значения - Выполнение программы автоматически прерывается при изменении значения выражения в указанном контексте.
    Удалить Удаляет контрольное выражение.

    Окно диалога Контрольное значение

    Окно диалога Контрольное значение
    Отображает текущее значение выделенного выражения. Эта функция полезна при отладке для просмотра текущего значения переменной, свойства или другого выражения.
    Параметры окна диалога
    Контекст Отображает имена проекта, модуля и процедуры, в которых определено контрольное выражение.
    Выражение Отображает выделенное выражение.
    Значение Отображает значение выделенного выражения. Текущее значение не выводится, если контекст выражения находится вне процедур, перечисленных в окне диалога Стек вызова.
    Добавить Добавляет выражение в область Контрольные окна отладки.

    Окно диалога Настройка печати

    Окно диалога Настройка печати
    Отображается при нажатии кнопки Настройка в окне диалога Печать.
    Используется для выбора принтера, ориентации и размера страницы.
    Параметры окна диалога
    Принтер Позволяет задать принтер. Если принтер не выбран, печать будет осуществлена на принтере Windows по умолчанию.
    Имя - Отображает список доступных принтеров.
    Состояние - Отображает состояние принтера и его готовность к работе.
    Тип - Отображает тип принтера.
    Место - Отображает место размещения принтера. Ели принтер сетевой, выводит путь к серверу.
    Заметки - Отображает физическое место размещения принтера, а также дополнительные сведения.
    Свойства - Отображает окно диалога Свойства для выбранного принтера, где задаются дополнительные параметры, такие как используемая бумага и способ печати графики.
    Бумага Позволяет выбрать размер и тип подачи бумаги (из доступных вариантов). Размеры и типы подачи бумаги зависят от выбранного принтера и изменяются при изменении принтера.
    Размер бумаги - Отображает список доступных размеров бумаги.
    Подача бумаги - Отображает доступные типы подачи бумаги для выбранного принтера.
    Ориентация Позволяет выбрать книжную или альбомную ориентацию листа при печати.

    Окно диалога Настройка

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

    Окно диалога Параметры компонента

    Окно диалога Параметры компонента
    Позволяет добавить справочные сведения или комментарии для процедуры, описанной в проекте.
    Параметры окна диалога
    Имя компонента Отображает имя элемента, выделенного в списке Классы или Компоненты.
    Описание Позволяет задать строку, отображаемую в панели описания в окне диалога Просмотр объектов.
    Файл контекстной справки Отображает связанный с выбранным элементом файл справки. Это значение задается в ячейке Файл контекстной справки на вкладке Общие окна диалога Свойства проекта.
    Идентификатор справки Присваивает уникальное числовое значение идентификатору контекста. Это значение используется для поиска соответствующего раздела в файле справки из ячейки Файл контекстной справки при нажатии клавиши F1 или кнопки Окно диалога Параметры компонента во время просмотра процедуры в окне диалога Просмотр объектов.

    Окно диалога Переименование панели

    Окно диалога Переименование панели
    Позволяет задать новое имя специальной панели инструментов.
    Параметры окна диалога
    Панель инструментов Задает новое имя панели инструментов.

    Окно диалога Просмотр объектов

    Окно диалога Просмотр объектов
    Отображает классы, свойства, методы, события и константы объектных библиотек и процедур проекта. Используется для поиска объектов, созданных в текущем или других приложениях.
    Дополнительные сведения о просмотре объектов можно получить в разделе Просмотр объектов справочной системы.
    Элементы управления
    Поле Проект/Библиотека
    Отображает список библиотек, прямо адресуемых из активного проекта. Добавление библиотек выполняется в окне диалога Ссылки. При выборе значения <Все библиотеки> одновременно отображаются все библиотеки.
    Поле поиска текста
    Содержит строку искомого текста. Допускается ввод или выбор строки. Поле содержит также 4 последних искавшихся в текущем проекте строки. В строке допускается использование стандартных подстановочных знаков Visual Basic.
    Для поиска целых слов в контекстном меню следует выбрать команду Только слово целиком.
    Кнопка Назад
    Окно диалога Просмотр объектов
    Позволяет перейти к предыдущему выбранному месту в списке классов и компонентов. При каждом нажатии кнопки происходит возврат на одно положение, пока не будет достигнуто самое первое обращение к этим спискам.
    Кнопка Вперед
    Окно диалога Просмотр объектов
    При каждом нажатии повторяет первоначальный выбор в списке классов и компонентов, пока не будет достигнуто самое последнее обращение к этим спискам.
    Кнопка Скопировать в буфер обмена
    Окно диалога Просмотр объектов
    Копирует выделенный текст из списка компонентов или из области описания в буфер обмена. В дальнейшем возможна вставка этого текста в программу.
    Кнопка Описание
    Окно диалога Просмотр объектов
    Помещает курсор в окне модуля в место описания выделенного объекта из списка классов или компонентов.
    Кнопка Справка
    Окно диалога Просмотр объектов
    Отображает контекстную справку по выделенному в списке классов или компонентов объекту. Для получения справки также служит клавиша F1.
    Кнопка Найти
    Окно диалога Просмотр объектов
    Выполняет поиск библиотек, в которых встречается класс, свойство, метод, событие или константа, совпадающие с шаблоном, заданным в поле поиска текста, а также открывает панель Результаты поиска, содержащую сведения о найденных элементах.
    Кнопка Показать/скрыть результаты поиска

    Окно диалога Просмотр объектов

    Отображает или скрывает панель Результаты поиска. В этой панели выводятся результаты поиска в проекте или библиотеке, выбранных из списка Проект/Библиотека. Результаты выводятся в алфавитном порядке.

    Список Результаты поиска

    Отображает библиотеку, класс и компонент, удовлетворяющие условиям поиска. Содержимое панели Результаты поиска изменяется при изменении значения в списке Проект/Библиотека.

    Список Классы

    Отображает список всех доступных классов из библиотеки или проекта, выбранных в поле Проект/Библиотека. Если для класса существует программный текст, этот класс выделяется жирным шрифтом. Список всегда начинается с класса <глобальные>, компоненты которого доступны глобально.

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

    Список Компоненты

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

    Панель описания

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

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

    Линия разбивки

    Разделяет панели и позволяет изменять их размер. Существует между:

    Списками Классы и Компоненты.

    Списком Результаты поиска и списками Классы и Компоненты.

    Списками Классы и Компоненты и панелью описания.

    Окно диалога Шрифт

    Окно диалога Шрифт
    Служит для изменения шрифта, его размера и/или начертания для текста и полей данных.
    Параметры окна диалога
    Шрифт Отображает список всех установленных в Windows шрифтов. При открытии окна диалога выбирается шрифт, использованный для форматирования выделенного элемента.
    Начертание Отображает список четырех дополнительных атрибутов, применимых к выбранному шрифту:
    Обычный - стандартное, неизмененное начертание
    Полужирный - жирный шрифт
    Курсив - наклонный шрифт
    Полужирный курсив - жирный наклонный шрифт
    Размер Отображает список стандартных размеров для выбранного шрифта. При открытии окна диалога выбирается размер шрифта, использованный для форматирования выделенного элемента, и этот размер отображается в первой строке списка размеров.
    Допускается выбор размера из списка или его ввод в поле редактирования (если есть уверенность, что для текущего принтера установлены дополнительные размеры шрифта, или если используется масштабируемый шрифт).
    Атрибуты Отображает два дополнительных атрибута, используемые для выделения выбранного шрифта.
    Зачеркнутый - перечеркивает символы шрифта
    Подчеркнутый - подчеркивает символы шрифта
    Возможно задание любого сочетания атрибутов.
    Образец Отображает образец выбранного шрифта. Показываются: шрифт, начертание, размер, атрибуты и цвет (если указан). Полезно использовать это поле для просмотра результатов подбора параметров форматирования.
    Набор символов Отображает перечень входящих в состав шрифта наборов символов.
    OK Применяет параметры шрифта к выделенному элементу отчета.
    Отмена Отменяет все изменения шрифта и оставляет отчет в прежнем виде.

    Окно диалога Создание панели инструментов

    Позволяет задать имя новой панели инструментов.
    Параметры окна диалога
    Панель инструментов Допускается ввод имени новой панели или использование имени по умолчанию. Имя по умолчанию различно для каждой панели инструментов и имеет вид: Настраиваемая1, Настраиваемая2 и т. д.

    Окно диалога Стек вызова

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

    Окно свойств

    Чуть раньше мы уже познакомились с такими свойствами объектов, как 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

    / =  3

    Переменная уменьшается в 3 раза

    Задание 8.   

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

  • 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, а под уникальным именем, например, Калькулятор.

    Первый способ – опускаем названия пространств имен

    В большинстве случаев VB позволяет выбросить из операторов название пространства имен. Попробуйте:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Interaction.Beep()
           Debug.WriteLine(3 + 2)
    End Sub
    Все сошло нормально. Результат прежний –  5.
    Пространство имен Microsoft.Visual Basic позволяет выкинуть даже имя объекта. Попробуйте:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Beep()
           Debug.WriteLine(3 + 2)
    End Sub
    Получилось.
    Но иногда название пространства имен выбросить не удается: VB возражает. Это значит, что объект с тем же именем есть и в других пространствах имен, и VB возражает потому, что не знает, какой именно из этих объектов вы имеете в виду. Если в компании два Кольки, то во избежание путаницы одного все зовут Колька с Полянки, а другого – Колька с Басманной.

    Пишем программу

    Давайте придумаем себе задачу для нашего проекта. Пусть на экране при нажатии кнопки или, скажем, при передвижении ползунка на полосе прокрутки что-нибудь происходит. Легко сказать – пусть! Для этого нужно знать, что вообще умеет делать VB при нажатии на кнопки или при передвижении ползунков. А если даже мы это знаем, то все равно не знаем, как это приказать, то есть как правильно написать программу. Ну что ж. Программирование мы будем изучать постепенно и постепенно всему научимся, а сейчас я выберу что-нибудь самое простое и подскажу, как это делается. К компьютеру не подходите, пока я не дам знак.
    Придумали оператор. Забудем пока о «покраске формы» и прикажем компьютеру для начала при нажатии кнопки Button1 сделать ширину горизонтальной полосы прокрутки равной 100 пикселямH. Команда (оператор) для этого пишется так:
    HScrollBar1.Width  = 100
    Разберемся, что здесь написано.
    HScrollBar1 – это имя нашей горизонтальной полосы прокрутки (Его дал VB. О том, как узнавать имена объектов и изменять их, я скажу позже).
    Width – переводится «ширина».
    Смысл оператора очевиден: это приказ сделать ширину объекта HScrollBar1 равной 100.
    Теперь о том, что обозначают точка и знак равенства. Пока правило такое:
    Слева от точки мы записываем имя объекта, справа от точки – название его свойства, а справа от знака равенства – значение этого свойства. Точку нужно писать обязательно.
    Вот аналогии:
    Коля.рост = 140
    Бразилия.климат = жаркий
    Нина.фамилия = Рыбакова
    В будущем мы увидим, что свойство само может быть объектом, а значит, у него тоже могут быть свои свойства. Вот аналогии:
    Нина.фамилия.число букв = 8
    Буратино.нос.длина = 30
    Танк.двигатель.шестеренка.материал = сталь
    Говорят: Свойству Width объекта HScrollBar1 присваивается значение 100.
    Окно кода. Теперь поговорим о том, как нам сделать, чтобы компьютер выполнил этот оператор, причем именно при нажатии на кнопку Button1, а не в какой-либо другой момент. Снова садитесь за компьютер. Вы еще не стерли наш проект? Проверьте, находимся ли мы в режиме проектирования [design]. Сделайте двойной щелчок по кнопке Button1. Перед вами возникнет новое окно – окно программного кода или просто окно кода (Рис. 1.7).

    Пишем программу

    Рис. 1.7

    Будем называть кодом любой текст программы. В окно кода будем записывать весь код нашего проекта (а большие проекты могут использовать и несколько окон кода).

    Если по какой-то причине окно кода вы потеряли из виду, то в главном меню окна VS выберите View ® Code.

    Заготовка процедуры. Мы видим, что в окне кода уже что-то написано. Это написал сам VB. Ситуация, как в ресторане: мы еще ничего не заказали, а соль и перец уже на столе. Кроме этого, многое из написанного Бейсиком мы даже и не видим, да и знать нам этого невидимого пока не надо. Если вы человек опытный и вам любопытно увидеть этот невидимый код, щелкните по малюсенькому плюсику возле строки Windows Form Designer generated code, но не каждому затем удастся отыскать получившийся минусик и щелкнуть по нему, чтобы все вернулось к прежнему виду. Если вы все-таки попались и не знаете, как выбраться из ситуации, то или бросьте этот проект, или почитайте 6.1.3.

    Остановимся пока на смысле двух видимых на рисунке строк.

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

    Слово Sub обозначает «процедура». Слово Click означает «щелкнуть мышкой». На смысле остальных слов в строке пока не останавливаемся. Эту строку можно вольно перевести как «Что делать, если щелкнуть мышкой по кнопке Button1». А более точно так: «Заголовок процедуры, в которой компьютеру пишется инструкция, что делать, если человек мышкой нажмет на кнопку Button1».

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

    Еще ниже находится строка End Sub, что означает «конец процедуры». Все пространство между этими двумя строками, которое мы будем заполнять операторами, будем называть телом процедуры.

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


    Вам нужно ввести с клавиатуры на свободное место между этими двумя строками наш оператор

    HScrollBar1.Width = 100

    Если у вас нет опыта ввода текста в компьютер, то прервитесь и изучите Приложение 2. Вы не имеете права допустить ни малейшей ошибки в строке. Даже лишний пробел может быть ошибкой.

    Вводим оператор. Начнем потихоньку вводить. Введите слово HScrollBar1 и точку, причем VB простит вас, если вы где-нибудь вместо заглавной буквы введете строчную или наоборот. Как только вы введете точку, VB (чтобы вам не утомлять свои персты вводом слова Width) развернет перед вами список всех уместных после точки слов. Вам останется только сделать двойной щелчок на нужном слове (Рис. 1.8) или выделить его и нажать на клавиатуре клавишу Tab.

    Пишем программу

    Рис. 1.8

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

    Но вот ввод оператора закончен. Уберите теперь текстовый курсор из строки, которую вводили. VB при этом проверит грамматическую правильность строки и немного подправит ее внешний вид, исходя из своих представлений об изяществе. Если он обнаружит ошибки, то ошибочные части строки подчеркнет. Если вы увидели, в чем ошибка, исправьте ее. Если не увидели, то читайте 1.3.8.

    Теперь окно кода должно иметь такой вид:

    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

        End Sub

    End Class

    Перед вами готовая процедура. Проверьте, не ввели ли вы нечаянно что-нибудь выше, ниже или правее этих строк. Если ввели, то сотрите.

    Запускаем проект. Пришла пора снова запускать проект. Предположим, что ошибок в коде нет. Щелкните кнопку Start. На экране опять появляется знакомый вид работающей формы. Щелкните по кнопке Button1 – горизонтальная полоса прокрутки изменила свою ширину (Рис. 1.9).

    Пишем программу

    Рис. 1.9

    Поздравляю! Ваш первый проект заработал. Щелкните еще раз. Ничего не изменилось. Естественно. Завершим выполнение проекта.

    Если у вас при запуске получилось не то, что нужно, или же VB выдал какое-то сообщение, прочтите чуть ниже подраздел 1.3.8.

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

    Почему нельзя не объявлять переменные величины

    Хозяйка бала присматривает, чтобы слуга объявлял всех гостей, пусть даже и без упоминания титула. VB присматривает, чтобы программист объявлял все переменные, пусть даже и без указания типа (этот присмотр называется Option Explicit). Поэтому, если вы попытаетесь обойтись без оператора Dim, VB выдаст сообщение об ошибке. Если же не выдает, значит Option Explicit выключен, в этом случае читайте 4.4.7.
    В 5.2.2я показал, какая польза от указания типа в операторе Dim. А какая польза от оператора Dim без указания типа? Какая польза от ножен без сабли? Посмотрим. Однажды, давным-давно, я устал от необходимости тратить время на «ненужные» объявления. И настроил VB так, чтобы он перестал строго присматривать за объявлением переменных. После чего писал Dim «через раз». Некоторое время все шло хорошо, но потом на одном глупом фрагменте застопорилось. Вот этот фрагмент:
    .       x = 2
            Debug.WriteLine(х)
    Как по вашему, что он у меня напечатал? Если вы думаете, что 2, то ошибаетесь. Ничего не напечатал. Я подумал: Это наверно потому, что я не написал Dim. Я добавил Dim:
    .       Dim x = 2
            Debug.WriteLine(х)
    Не помогло. Опять ничего не печатает Как же так? – подумал я – Я ведь все сделал как положено. Мало ли, что у меня Option Explicit отключен? – Ведь Dim-то имеется! VB не нашел в программе никаких ошибок. Я долго не мог понять, в чем дело, пока не решил действовать по давно оправдавшему себя принципу: Если не можешь поймать ошибку, доведи все остальное до наивозможнейшего идеала, даже если это и кажется бессмысленным. «Бессмысленным» идеалом было включить Option Explicit, я и включил. И сразу VB подчеркнул во второй строке фрагмента имя х и сказал, что оно не объявлено. Как же «не объявлено»? – подумал я, но потом догадался, что в первой строке фрагмента присутствует латинская буква "икс", а во второй строке я нечаянно написал русскую букву "ха".
    Итак, вы видите, что по нашей человеческой рассеянности многие переменные могут проскочить на бал необъявленными, хотя бы потому, что мы легко путаем латинские и русские буквы одинакового начертания. Выводы:
    Никогда не отключайте Option Explicit.
    Всегда объявляйте переменные величины.
    При этом по возможности указывайте их тип.
    Два варианта. Вы уже заметили, что переменную величину можно сначала объявить, а впоследствии присвоить ей значение:
            Dim a As Integer
           . . . .
            a = 20
    а можно сделать это и одним оператором:
            Dim a As Integer  = 20

    Почему Visual Basic, а не C++?

    Почему Visual Basic? Этот вопрос стоит перед новичками, которые не знают, с какого языка начать. Вот краткий обзор возможных вариантов.
    Сейчас наиболее известны языки Бейсик, Паскаль, Си, Джава (Ява) До появления одноименных .NET-языков все они существовали и сейчас существуют в своих самых разных версиях.  .NET-языки отличаются от своих тезок-предшественников, несмотря на то, что являются их прямыми потомками. Отличаются не столько внешним видом программ, сколько внутренним содержанием (использование механизмов .NET Framework). Особенно резко отличается Visual Basic .NET.
    Что же касается различий, которые существовали между самими языками, то они в основном сохранились и в их .NET-версиях.
    Рассмотрим, насколько тот или иной язык подходит для изучения начинающим программистом.
    Начнем с Явы. Ява пока применяется в основном только в Интернете. Поскольку нас интересует все-таки и обычное программирование, Яву отодвигаем в сторону. Остаются Бейсик, Паскаль, Си.
    Си – высокопрофессиональный язык, программы, написанные на нем, имеют превосходное быстродействие, в среде программистов Си распространен очень широко. Но он слишком сложен для восприятия новичком, программы на нем пишутся со значительным трудом и с него лучше не начинать. Если вам очень уж хочется программировать на Си, рекомендую начать с Бейсика. После него освоение Си пойдет гораздо легче.
    По мнению профессионалов наиболее легок и прост из упомянутых языков как раз Бейсик. Профессиональные программисты любят его за то, что для создания на нем приличного продукта требуется гораздо меньше времени, чем, скажем, на Си. Поэтому популярность у него огромная. Конечно, за все приходится платить, и у Visual Basic есть свой недостаток – программы, написанные на нем, не такие быстрые, как на Си, однако новичок почувствует эту разницу очень не скоро.
    Паскаль по простоте программирования и эффективности получающихся программ занимает промежуточное положение между Бейсиком и Си. Паскаль существует сейчас в виде его современной версии Object Pascal и программирование на нем ведется в среде  Delphi. Но Паскаль не входит в состав Visual Studio .NET.
    Сделать выбор я предоставляю читателю.

    Почему Visual Basic NET, а не старый Visual Basic?

    Почему надо изучать именно Visual Basic .NET, а не другую версию Visual Basic, например, последнюю из версий  до-NETовской эпохи – Visual Basic 6.0?
    Рассмотрим «За» и «Против»:
    За: Потому что это самая последняя и мощная версия Visual Basic. Она предоставляет многие возможности, недоступные в предыдущих версиях.
    За: Потому что это первая по-настоящему объектно-ориентированная версия Visual Basic. В этом она догоняет Delphi и C++.
    За: Старый Visual Basic будет в ходу еще несколько лет, потом, наверное, уйдет.
    Против: Visual Basic .NET сложнее старого Visual Basic. Поэтому новичку проще изучать старый.
    Выбор за вами.
    Вы спрашиваете, почему я написал книжку именно по Visual Basic .NET? – Потому что книжку по Visual Basic 6.0 я уже написал раньше. Вы можете найти ее на сайте www.learncomp.narod.ru.

    Подстановочные знаки, используемые при сравнении строк

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


    Символ(ы) в шаблоне
    Соответствует в выражении
    ?
    Любой одиночный символ
    *
    Ноль или более символов
    #
    Любая одиночная цифра (09)
    [списокСимволов]
    Любой одиночный символ, входящий в списокСимволов
    [!списокСимволов]
    Любой одиночный символ, не входящий в списокСимволов
    Группа из одного или более символов (списокСимволов), заключенный в скобки ([ ]), служит для сопоставления с любым одиночным символом в выражении и может содержать практически все символы из набора символов ANSI, включая цифры. Особые символы - открывающая скобка ([ ), знак вопроса (?), знак номера (#) и звездочка (*) - могут использоваться непосредственно для сопоставления только когда заключены в скобки. Закрывающая скобка ( ]) внутри группы не может использоваться для этой цели, но может использоваться вне группы, как отдельный символ.
    Помимо просто списка символов, заключенных в скобки, списокСимволов может задавать диапазон символов посредством дефиса (-), разделяющего нижнюю и верхнюю границы диапазона. Например, использование в шаблоне [А-Я] приведет к совпадению, если соответствующий символ в выражении содержит любую заглавную букву в диапазоне от А до Я. Несколько диапазонов включаются в скобки без всяких разделителей. Например, [а-яА-Я0-9] сопоставимо с любым буквенно-цифровым символом.
    Ниже перечислены другие важные правила сопоставления с шаблоном:
    Восклицательный знак (!) в начале спискаСимволов означает, что сопоставление выполняется, только если символ из выражения не входит в списокСимволов. При использовании вне скобок восклицательный знак сопоставляется только с собой.
    Использование дефиса (-) для сопоставления с собой допускается либо в начале (после восклицательного знака, если таковой присутствует), либо в конце спискаСимволов. В любой другой позиции дефис служит для задания диапазона символов ANSI.
    При указании диапазона символов границы следует задавать в порядке возрастания (А-Я или 0-100). [А-Я] является допустимым шаблоном, а [Я-А] - нет.
    Символьная последовательность [ ] не принимается во внимание; полагается, что это строка нулевой длины ("").

    Положение объекта на экране Система координат

    Чтобы рисовать фигуры, чтобы помещать объекты в нужное место экрана или формы, чтобы при анимации двигать объекты в нужном направлении, вы должны уметь объяснить компьютеру, где, в каком месте экрана или формы вы хотите нарисовать фигуру или поместить объект. Научиться этому можно быстрее, имея представление о системе координат. Но если вы не знаете, что это такое, то вот вам вся суть без использования этого понятия.
    В режиме проектирования выделите любой объект на форме, щелкните в окне свойств плюсик у его свойства Location (местоположение) и загляните в составляющие его свойства X и Y.
    X – это расстояние левого края объекта от левого края формы.
    Y – это расстояние верхнего края объекта от верхнего края формы.
    Потаскайте любой объект по форме, следя за значениями X и Y. Добейтесь:
  • нуля в одном свойстве

  • нуля в другом свойстве

  • нуля в обоих свойствах

  • максимума в одном свойстве

  • максимума в другом свойстве

  • максимума в обоих свойствах

  • минуса в одном свойстве

  • минуса в другом свойстве

  • минуса в обоих свойствах

  • Теперь увеличьте как следует размер формы, поместите в произвольное место формы какую-нибудь кнопку и попробуйте угадать, чему равны ее свойства X и Y. А теперь проверьте в окне свойств – угадали или нет. Проделайте так несколько раз. Если ошибаетесь каждый раз не больше, чем на 200, значит, все в порядке, вы освоились.
    Единицей измерения расстояния на экране в VB является пиксель. Одновременно пикселем называют самую маленькую возможную светящуюся точку на экране. Любое изображение на экране составляется из множества пикселей. О пикселе удобно думать, как о маленьком квадратике. Экран состоит из пикселей, как школьная тетрадь в клетку из клеточек (см. Рис. 3.11). Вы видите, что ширина буквы А на рисунке – 7 пикселей.
    Положение объекта на экране Система координат
    Рис. 3.11
    Столбцы пикселей пронумерованы слева направо, а строки – сверху вниз. Пиксель – очень маленькая величина. Его размер зависит от разрешающей способности видеорежима. На рисунке режим – 640х480. На современных компьютерах с большими экранами режимы – 1280х960 и выше.

    Подробнее об изображении на экране читайте в Приложении 1.

    В пикселях выражаются значения свойств X, Y, а также Width (ширина объекта), Height (высота объекта) и других.

    В режиме проектирования мы не можем таскать форму по экрану за заголовок, да это и не нужно. Как управлять местом ее появления на экране после запуска проекта, написано в 3.4.3. Если свойство StartPosition установлено в Manual, то мы делаем это, изменяя свойства X и Y. При этом измерение ведется относительно левого и верхнего краев экрана.

    В режиме [run]  положением объектов мы управляем так:

            Button1.Left

    = 200

            Button1.Top

    = 100

    Здесь: 

    Left и Top – эквиваленты свойств  X и Y .

    Система координат

    В школе вы привыкли к такой системе координат, как на Рис. 3.12.

    Положение объекта на экране Система координат

    Рис. 3.12

    На экране компьютера, как вы догадались, применяется такая, как на Рис. 3.13.

    Положение объекта на экране Система координат

    Рис. 3.13

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

    Для объектов на форме начало компьютерной системы координат находится в верхнем левом углу формы. Для формы начало компьютерной системы координат находится в левом верхнем углу экрана.

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

    Задание 3.   

     «Нервная клавиша». Пусть при нажатии на клавишу вычитания эта клавиша прыгает куда-нибудь совсем в другое место калькулятора и на ней вместо минуса появляется текст типа "Я устала вычитать" или "Не трогай меня – я нервная!". Предусмотрите также значительное увеличение ширины клавиши, а то текст на ней не поместится. Когда это у вас получится, сделайте так, чтобы при нажатии на клавишу СБРОС клавиша вычитания скромно возвращалась на место и принимала свой прежний вид. Не пытайтесь программировать изменение размера шрифта: вы этого еще не умеете.

    Помещаем фото на объекты

    Пусть мы хотим, чтобы поверхность формы была покрыта каким-нибудь графическим изображением, например, фотографией. Для этого необходимо, чтобы файл с этой фотографией уже хранился на каком-нибудь диске вашего компьютера. Если фото нет, то сойдет и рисунок, созданный вами в каком-нибудь графическом редакторе, например, в Paint. В крайнем случае найдете что-нибудь по адресу
    Program Files\Microsoft Visual Studio .NET\Common7\Graphics\bitmaps
    или в папке Windows отыщете обои рабочего стола.
    Создайте копию папки вашего проекта и экспериментируйте уже на ней. Выделите форму. Найдите свойство BackgroundImage (изображение на заднем плане). Затем щелкните по троеточию. В открывшемся окне доберитесь до нужного вам графического файла. Щелкните по Open – в результате фото окажется на форме.
    Помещаем фото на объекты
    Рис. 3.14
    Если форма больше фотографии, то фотография укладывается на ее поверхности мозаикой.
    Графическое изображение можно поместить на кнопку, на метку и на некоторые другие объекты. Для этого вы аналогичным образом используете их свойства Image (изображение) или BackgroundImage. На Рис. 3.14 вы видите графические изображения на форме, на левой кнопке и на метке.
    Свойство ImageAlign  выравнивает графику на поверхности объекта подобно тому, как свойство TextAlign (см. 3.4.1) выравнивает текст.
    То же, но в коде. Фотографии на объекты можно помещать и в коде. Например, оператор
            Кл_деления.Image = Image.FromFile("D:\Фотографии\Earth.JPG")
    поместит на клавишу деления картинку, адрес файла которой указан в кавычках. Вы можете поместить этот оператор внутрь процедуры деления и тогда при нажатии на клавишу деления она приобретет картинку. Подробно об этом рассказано в 12.3.1.
    «Прозрачный» цвет.  Выделите кнопку или метку. Зайдите в свойство BackColor, там – в закладку Web  и установите значение Transparent («прозрачный» цвет). На Рис. 3.15 вы видите «прозрачный» цвет установленным у всех кнопок и меток. Если же у элемента управления имеется картинка, то картинка эта, естественно, не прозрачна, что мы и видим на клавише сложения и метке результата.
    Помещаем фото на объекты
    Рис. 3.15
    Слово «прозрачный» я взял в кавычки, потому что прозрачность работает только на фоне изображения заднего плана формы. Так, например, другие элементы управления через «прозрачный» цвет не видны. На Рис. 3.16 вы видите растянутую «прозрачную» кнопку вычитания, через которую совершенно не видны другие кнопки и текстовое поле. Получается, что вместо того, чтобы обеспечивать настоящую прозрачность элемента управления, VB просто переносит на него задний план формы.
    Помещаем фото на объекты
    Рис. 3.16
    Для размещения графики в VB предусмотрен также специальный элемент управления PictureBox. О нем поговорим в 12.3.1.
    Более подробно об использовании картинок рассказано в 12.3.

    Понятие о переменных величинах Оператор присваивания

    Понятие переменной величины вам известно из школьной математики. Пусть несколько лет назад ваш рост равнялся 130 см. Обозначим этот факт так: r=130. Теперь он равен 160 см, то есть r=160. Получается, что величина r изменилась. Поэтому она называется переменной величиной. Числа 130 и 160 называются значениями
    переменной величины r.
    Любой язык программирования умеет обращаться с переменными величинами. Без них он был бы очень слаб и смог бы извлечь из компьютера только возможности калькулятора. Точно так же алгебра без переменной величины превратилась бы в арифметику. Однако, преимущества применения переменных величин в компьютере нам откроются позже, а пока наша задача – к ним привыкнуть.

    Понятие об операторе присваивания

    Что же мы можем делать с переменными величинами, программируя на VB? Прежде всего, мы можем задавать компьютеру значение той или иной переменной величины. Это мы можем сделать при помощи оператора, который называется оператором присваивания. Так, если мы хотим сказать, что а имеет значение 6, то должны просто написать в окне кода а=6. Запись  а=6  и называется оператором присваивания.  Говорят, что величине а присваивается значение 6. С момента выполнения оператора а=6 компьютер будет помнить, что а равно шести. Не надо пока проверять это на компьютере, я скажу, когда надо за него садиться.
    Примечание: В старых версиях Бейсика оператор присваивания для понятности записывали так –   Let  a = 6, что означало "Пусть  a = 6".
    Мы широко пользовались оператором присваивания в части I. Например, в операторе
    Button2.BackColor = Color.Red
    мы присваивали свойству "цвет" нашей кнопки значение "красный". Пока, чтобы не рассеивалось внимание, мы в операторе присваивания не часто будем касаться объектов, их свойств и значений. Ограничимся в основном переменными величинами, имеющими численные значения.
    После выполнения следующего фрагмента программы
    a = 2 * 3 + 4
    b = a
    y = a + b + 1
    компьютер будет знать, что  a равно 10,   b равно 10,   y равно 21. Проверьте в уме.
    Получается, что при помощи оператора присваивания вы можете и вычислять тоже. Мы видим, что справа от знака равенства в операторе присваивания можно писать не только числа, но и переменные величины, и выражения. Выражения в VB могут быть разных типов, но об этом мы будем говорить позже. Пока под выражением будем понимать арифметическое выражение, то есть такое, к которому вы привыкли в школьной математике. Здесь мы видим три выражения:    2*3+4,    a,    a+b+1.   Любое арифметическое выражение имеет численное значение.
    Теперь чуть-чуть о свойствах объектов. Выражение может включать в себя не только переменные величины, но и свойства объектов, имеющие подходящее значение. Например,  

    y  =  a + b + Button1.Width

    Пусть a равно 1,  b равно 1,  а ширина кнопки равна 100. Тогда  y станет равным 102.

    В левой части оператора присваивания также может стоять не только переменная, но и свойство объекта. Например,

    Button1.Width  =  a + b + d

    Действие последнего оператора вы сразу увидите на экране. Пусть a равно 100,  b равно 100  и   d равно 100. Тогда  ширина кнопки станет равной 300.

    Еще пара примеров:

    ФРАГМЕНТ  ПРОГРАММЫ

    ЧТО ЗАПОМНИТ КОМПЬЮТЕР

    v = -2+10   :  h = 10*v   :  s = v+h+0.01

    v   8         h    80        s    88.01

    t = 0   :   n = 2*t+40   :    z = -n

    t    0         n    40        z     -40

    Задание 6.   

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

    k = 1 + 2   :    s = 2 * k    :     t = 6 – s

    Порядок работы над проектом в VB

    Просуммируем наш опыт создания проекта. Это нужно сделать для того, чтобы написать для себя незыблемые правила создания всех будущих проектов. Я, например, до сих пор им следую. Да и все следуют. Эти правила немного напоминают описание жизни Сизифа, с той разницей, что в основном камень на вершину мы все-таки доставляем!
    Вот эти правила:
    (1) Откройте проект.
    (2) Поработайте немного над проектом в режиме проектирования, то есть разместите на форме несколько элементов управления или запишите в окно кода одну-две строки программы.
    (3) Сохраните проект
    (4) Запустите проект на выполнение. Если результаты вас удовлетворяют, перейдите к пункту 2
    (5) Исправьте ошибки в проекте. Вернитесь к пункту 3
    На моей практике преподавания программирования я ни разу не встречался с теми, кто пренебрегает пунктами 1 и 4. Но очень часто встречались те, кто пренебрегает пунктами 3 и 5 и неправильно выполняет пункт 2.
    Как их наказывала жизнь? Достаточно сурово. Те, кто пренебрегал пунктом 3, часто терял свои проекты. Те, кто пренебрегал пунктом 5 и шел вперед, отложив исправление смысловых ошибок на потом, наконец запутывался в огромном числе накопленных ошибок. Те, кто старался на 2 пункте ввести сразу весь код, а не маленькую часть его, в 9 случаях из 10 получал неправильные результаты и не мог понять, где искать ошибку, так как код большой.

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

    Всем известна поговорка «Порядок бьет класс». Это наглядно доказала сборная Греции на чемпионате Европы по футболу в 2004 году. Эта поговорка верна и в программировании. Даже неопытный новичок, если он будет соблюдать надлежащий порядок создания проекта, добьется успеха.
    Все, что здесь сказано, справедливо не только для вычислительных, но и для всех других проектов. Рассмотрение будем вести на примере.
    Задача:  Даны размеры спичечной коробки.  Вычислить площадь основания коробки, ее объем и полную площадь поверхности.
    Порядок создания проекта:
    1. Программист сам должен знать решение задачи. Ведь программа – это инструкция по ее решению. Нельзя давать инструкцию, не зная, как решать. Имейте в виду, что сам компьютер абсолютно ничего не знает и все ему приходится растолковывать.
    В нашем случае программист должен знать формулы для вычисления всего, что нужно:  
  • площадь основания = ширина х толщину

  • объем = площадь основания  х высоту

  • периметр основания = две ширины + две толщины

  • площадь боковой поверхности = периметр основания  х высоту

  • полная площадь поверхности = две площади основания + площадь боковой поверхности

  • Как видите, я для стройности вычислений ввел периметр основания и площадь боковой поверхности.
    Решение задачи должно быть известно программисту абсолютно четко, абсолютно точно, абсолютно правильно. Малейшая нечеткость, неточность или неправильность приведет к неверным результатам. Вы, возможно, не знаете, что профессиональный программист, получив серьезную задачу, не бросается сразу за компьютер, а сначала долгие дни, недели и даже месяцы, обложившись книжками, решает задачу «в уме» или на бумаге.
    2. Нужно придумать имена переменным.  Имя переменной должно говорить о ее смысле. Если смыслом является ширина коробки, то не ленитесь и не называйте ее а, потому что через полгода, разбираясь в своей полузабытой программе, вы будете долго тереть лоб и думать – Что, черт возьми, я обозначил через а? Называйте ее Ширина (если вы не знаете английского) или, к примеру, Width (если знаете). Так делают все профессиональные программисты (а все они, как известно – отъявленные лентяи и терпеть не могут трудиться зря J), значит, зачем-то это им нужно?

    Удовлетворимся такими именами:

    Ширина                                -              ширина

    Толщина              -              толщина

    Высота                 -              высота

    S_основ                               -              площадь основания

    V                             -              объем

    Периметр            -              периметр основания

    S_бок                    -              площадь боковой поверхности

    S_полн                 -              полная площадь поверхности

    3. Нужно определить, какого типа будут переменные.

    Поскольку нам заранее неизвестно, будут ли исходные данные целыми, объявляем все переменные – Double. Первые строки программы будут такими:

                       'Программа вычисления площади основания, объема и полной площади поверхности

                       'спичечной коробки по известным ее размерам

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

                        'Объявляем переменные величины

            Dim Ширина As Double             'ширина коробки

            Dim Толщина As Double            'толщина

            Dim Высота As Double        'высота

            Dim S_основ As Double             'площадь основания

            Dim V As Double                        'объем

            Dim Периметр As Double  'периметр основания

            Dim S_бок As Double         'площадь боковой поверхности

            Dim S_полн As Double       'полная площадь поверхности

    Создайте проект с кнопкой. Введите эти строки. Не забудьте End Sub. Запустите проект. Ничего, что до результатов еще далеко! Ошибок VB не выдал? Значит, пока все в порядке.  Не забывайте, что после ввода очередных 2-3 строк проект нужно запускать и его работу проверять.

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

    Вот следующие строки программы:


                        'Ввод исходных данных     

            Ширина = InputBox("Введите ширину коробки")

            Толщина = InputBox("Введите толщину коробки")

            Высота = InputBox("Введите высоту коробки")

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

                        'Вычисление результатов

            S_основ = Ширина * Толщина

            V = S_основ * Высота

            Периметр = 2 * Ширина + 2 * Толщина

            S_бок = Периметр * Высота

            S_полн = 2 * S_основ + S_бок

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

    6. После получения результатов их нужно показать человеку. Действительно, все операторы присваивания компьютер выполняет «в уме». После их выполнения в ячейках памяти будут находиться числовые результаты решения задачи. Чтобы их увидеть, человек может использовать текстовые поля, как это мы только что делали, улучшая калькулятор. Я же использую знакомый нам Debug.WriteLine, но с нововведениями:

                        'Отображение результатов    

            Debug.WriteLine ("Площадь основания = "    S_основ)

            Debug.WriteLine ("Объем = "   &   V)

            Debug.WriteLine ("Полная площадь поверхности = "   &   S_полн)

    End Sub

    Обратите внимание, что здесь в первом операторе Debug.WriteLine – два элемента вывода, разделенные символом &: текстовое пояснение "Площадь основания = " и собственно переменная, значение которой мы хотим увидеть – S_основ. То же самое и в других операторах Debug.WriteLine.

    7. Запустите проект и убедитесь в его работоспособности. Введите в качестве размеров коробки числа 4, 2, 5. Вот результаты:

    Площадь основания = 8

    Объем = 40

    Полная площадь поверхности = 76

    Попробуйте ввести дробные числа и проверьте результат.

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


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

            TextBox1.Text = "Площадь основания = " & S_основ

            Label1.Text = "Объем = " & V

            MsgBox("Полная площадь поверхности = " & S_полн)

    Сравните с выводом тех же результатов при помощи Debug.WriteLine. Вы видите, что вывод совершенно аналогичен.

    А вот те же результаты, но отформатированные, причем одинаково:

            TextBox1.Text = "Площадь основания = " & Format(S_основ, "0.###")

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

            MsgBox("Полная площадь поверхности = " & Format(S_полн, "0.###"))

    Задание 11.   

    Автомобиль 3 часа ехал со скоростью 80 км/час и 2 часа со скоростью 90 км/час. Вычислить среднюю скорость автомобиля (она равна суммарному пути, деленному на суммарное время). Значения переменным задать операторами присваивания, результат напечатать оператором Debug.WriteLine с 3 знаками после запятой.

    Задание 12.   

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

    В Задание 18 вы начертите чертеж двора и дома.

    Задание 13.   

    Вычислить длину окружности и площадь круга. Радиус окружности задать в операторе Dim. Результаты с 5 знаками после запятой и с пояснениями выводить в два MsgBox.

    Префиксы

    Как по вашему, почему мы написали
        Dim Чис1 As Double
        Dim Чис2 As Double
        Dim Рез As Double
    а не
        Dim Число1 As Double
        Dim Число2 As Double
        Dim Результат As Double
    Потому что имена Число1, Число2 и Результат уже имеют текстовые поля, а называть одинаковыми именами разные объекты – значит заставлять спутаться и себя и компьютер. И все же имена  Чис1, Чис2 и Рез придуманы не очень удачно, так как по ним не очень даже догадаешься, какие слова они сокращают: может быть, «чистка» и «резинка»?
    В практике программирования сплошь и рядом встречаются ситуации, когда одинаковыми именами хочется назвать разные объекты. В таких случаях некоторые профессиональные программисты начинают каждое имя с так называемого префикса, который говорит программисту (не компьютеру!) о том, кому принадлежит имя (кнопке (префикс btn), строковой переменной (префикс str) или кому-нибудь другому).
    В нашем случае можно было бы назвать текстовые поля так:
    txtЧисло1,  txtЧисло2,  txtРезультат,
    а переменные так:
    dblЧисло1,  dblЧисло2,  dblРезультат.
    А теперь о чувстве меры. Некоторые имена, будь то имя переменной, формы или другого элемента, в программах используются очень часто. Например, так называемую переменную цикла, которую мы с вами еще будем проходить, принято именовать буквой i. Если таким переменным давать «по науке» длинные имена с префиксами, то текст вашей программы будет очень громоздким. Поэтому никто на вас не обидится, если вы вместо
    intПеременная_цикла  =  intПеременная_цикла + 1
    y(intПеременная_цикла) = 2 * a(intПеременная_цикла)
    напишете просто
    i = i + 1
    y(i) = 2 * a(i)
    Существует более-менее общепринятое соглашение о том, какие объекты и какие типы какими префиксами обозначать. Сам я префиксы не люблю и употребляю их редко.

    Преобразование типов

    Трудности. Итак, мы видим, что когда дело касается типов, VB проявляет некоторую придирчивость. Например, как мы только что видели, он не разрешает литералам без специальных символов иметь любой тип. Или требует, чтобы результат сложения, вычитания или умножения чисел определенного целочисленного типа умещался в этот же тип. Например, после запуска процедуры
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim a As Byte = 200
            Dim b As Byte = 100
            Debug.WriteLine(a - b)
            Debug.WriteLine(a + b)
        End Sub
    будет выдана ошибка переполнения, так как 200+100 больше 255 – предельного значения для типа Byte.
    Вы столкнетесь также с придирчивыми функциями, требующими себе аргументов определенного типа и жалующимися, если они имеют другой тип.
    Во всех этих случаях перед вами встанет вопрос: уступать требованиям VB или не уступать. Казалось бы: чего проще! – уступи и дело с концом. Например, я советовал для предотвращения переполнения объявлять все переменные, участвующие в вычислениях, самым вместительным типом из тех, что могут понадобиться для результатов вычислений. И это хороший совет.
    Еще один совет: если ничего не помогает, откажитесь от объявления типа у переменных, являющихся причиной придирок, смирившись с отрицательными последствиями неопределенности типа. То есть просто пишите   Dim a.
    И с придирчивой функцией тоже нетрудно согласиться и объявить переменную так, как она требует.
    Но не всегда эти уступки бывают программисту удобны. Мы еще столкнемся с конкретными случаями такого неудобства. И поэтому сейчас я покажу вам, как сделать так, чтобы и волки были сыты, и овцы целы.
    Функции преобразования типов. Существуют специальные функции, назначение которых – преобразовывать свой аргумент к определенному типу. Например, функция CInt преобразовывает свой аргумент к типу Integer. Поэтому оператор
            Debug.WriteLine(CInt(2.4 + 10))
    напечатает  12, а не 12,4.

    Пусть в предыдущем примере про 200+ 100 мы не хотим менять тип переменных Byte на более вместительный Short. Как же тогда избавиться от переполнения? Применить CShort – функцию преобразования своего аргумента в тип Short. Вот так:

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

            Dim a As Byte = 200

            Dim b As Byte = 100

            Debug.WriteLine(a - b)

            Debug.WriteLine(CShort(a) + CShort(b))

        End Sub

    Здесь функция CShort преобразует перед сложением значения переменных a и b из типа Byte в тип Short. Не переменные, а их значения, и не везде, а только в данном месте. Сами переменные как были, так и остались типа Byte, и их значения в других местах программы (там, где вычитание) тоже остались типа Byte.

    Преобразование состоялось и сложение поэтому выполнялось над числами типа Short и результат (300) обязан был умещаться именно в этот тип, куда он свободно и уместился.

    Вот таблица функций преобразования типов, куда я для справки включил и функции преобразования в нечисловые типы:

    Функция

    Преобразует в тип

    CByte

    Byte

    CShort

    Short

    CInt

    Integer

    CLng

    Long

    CSng

    Single

    CDbl

    Double

    CDec

    Decimal

    CChar 

    Char

    CStr

    String

    CBool

    Boolean

    CDate

    Date

    CObj 

    Object

    Неявное преобразование типов. При выполнении арифметических действий (и в других случаях) VB часто незаметно для нас и сам преобразовывает числа из одного типа в другой. Например, вычисляя выражение   5+2.8,   VB преобразует число 5 из типа Integer в тип Double, после чего складывает числа и получает результат 7.8 типа Double.

    Вообще,

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

    Вот список числовых типов в порядке возрастания вместительности:

    Byte, Short, Integer, Long, Single, Double, Decimal


    Пример: при выполнении фрагмента

            Dim a As Short = 32700

            Dim b As Byte = 100

            Debug.WriteLine(a + b)

    VB преобразует число 100 в тип Short, а затем выдаст переполнение, так как результат сложения не умещается в тип Short.

    При делении целочисленных типов VB преобразует делимое и делитель в основном к типу Double и результат получается тоже типа Double.

    Например, при делении 2 на 3  VB видит, что результат не получится целым, поэтому он сначала преобразует оба целых числа в тип Double и результат получает того же типа.

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

    Тип арифметического выражения. Пусть VB вычисляет выражение a+b*c. Спрашивается, какой тип будет у вычисленного выражения? Рассуждаем по цепочке. Сначала VB выполняет умножение b*c и тип произведения определяет по только что приведенному правилу. Затем, имея уже произведение и зная его тип, VB прибавляет его к a,  определяя тип суммы опять по тому же правилу.

    Так, по цепочке выполняемых действий, VB определяет тип любого самого длинного выражения.

    При объявлении нужно указывать тип

    Попытаемся вернуть нашей программе способность вычислять периметр:
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim a, b, S, p
            a = InputBox("Введите длину прямоугольника")
            b = InputBox("Введите ширину прямоугольника")
            S = a * b                           'Площадь
            p = a + a + b + b               'Периметр
            Debug.WriteLine(S)
            Debug.WriteLine(p)
        End Sub
    Запустите проект. Введите длину 3 и ширину 2. Вы получите неожиданный результат:
    6
    3322
    Площадь равна 6. Правильно. А вот периметр должен бы равняться 10, а не 3322. Откуда взялись эти 3322? Да ведь это не что иное, как две тройки и две двойки! И получились они из  a+a+b+b.
    Здесь тот же случай, что и с калькулятором (см. 3.3). Там было то же самое, пока мы не применили Val. Почему так получается?
    Первое: VB считает содержимое текстового поля в окне InputBox (точно так же, как и обычного текстового поля) текстом, а не числом, если даже оно состоит из цифр. А раз так, то и значения переменных a и b, взятые из текстового поля, он тоже считает текстом, а не числами. Не пей из копытца – козленочком станешь!
    Второе: VB знает, что по правилам языка знак + имеет несколько смыслов в зависимости от того, к чему он применяется. В частности, при работе с числами это приказ складывать, а вот при работе с текстом это не приказ складывать, а приказ выстраивать в цепочку. А раз так, то и результат получился тот, что мы видели.
    Почему же тогда площадь вычислилась нормально? Потому что там было не сложение, а умножение. VB знает, что по правилам языка знак умножения * не имеет смысла при работе с текстом. Значит (догадывается умный и услужливый VB) мой господин-человек не хочет, чтобы переменные  a и b  имели текстовое значение, иначе он не стал бы применять знак умножения, ведь мой хозяин умный. Значит иметь им числовое значение! Проверьте: подсуньте компьютеру вместо чисел буквы – VB  запротестует при вычислении площади.

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

    Так вот: чтобы не перенапрягать умственные способности VB и предохранить себя от неприятностей, нужно при объявлении переменных величин указывать их так называемый тип (на балу – титул!).

    Что это такое? Сделаем небольшое добавление к оператору Dim. В остальном оставим процедуру неизменной. Вот что у нас получится (добавление я выделил полужирным шрифтом):

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

            Dim a, b, S, p As Integer

            a = InputBox("Введите длину прямоугольника")

            b = InputBox("Введите ширину прямоугольника")

            S = a * b                           'Площадь

            p = a + a + b + b               'Периметр

            Debug.WriteLine(S)

            Debug.WriteLine(p)

        End Sub

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

    Dim 

    a, b, S, p

    As

    Integer

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

    Объявляю переменные величины

    a, b, S, p

    как

    целые числа

    то есть вы обязуете VB обращаться с переменными величинами a, b, S, p, как с целыми числами и ничем иным. Говорят, что переменные a, b, S, p   имеют  тип   Integer.

    Операторы объявления будем пока писать в окне кода только внутри процедур, в их начале. Подробнее о местах, где можно делать объявления и о способах, написано в 21.9, но вам пока рано это знать.

    Запустите проект. Проверьте его работу. Теперь все работает нормально.

    Примеры и задачи

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

  • Игра «Ловец», где вы должны ловить множество движущихся шариков

  • Игра «Угадай число»

  • Задача: Как поставить пароль на свою программу, чтобы никто, кроме вас, не мог ее запустить

  • Задача: Как запрограммировать сохранение в играх

  • Задача: Как в Интернете зайти в чужой компьютер (предварительно постучавшись)

  • Задача: Как в Интернете поместить на свою страничку игру

  • Собственный калькулятор (при желании – с вашей фотографией, музыкой, прыгающими кнопками и прочими шутками)

  • Собственный будильник-секундомер

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

  • Собственный мультфильм

  • Собственный графический редактор

  • Рисование разнообразных рисунков и узоров (круги на воде, звездное небо, мыльные пузыри, компакт-диск, башня, ковер и тому подобное)

  • Размещение в приложениях Windows меню, кнопок и других элементов управления

  • Зашифровка и расшифровка секретных файлов (объяснена простейшая шифровка и расшифровка)

  • «Осмысленный» диалог с компьютером

  • Определитель быстроты реакции вашей и ваших друзей

  • Программа, определяющая, «экстрасенс ли вы»

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

  • Игра-стрелялка «Торпедная атака»

  • Игра в крестики-нолики на бесконечном поле (пять в линию)

  • Игра в морской бой

  • Игра «Танковый бой» на неподвижном поле (вид сверху), где одновременно движутся и стреляют маленькие фигурки ваших и вражеских танков


  • Если вы энтузиаст программирования игр, то я должен вам сказать о том, какие игры будет НЕ под силу создавать начинающему программисту после изучения только моей книги. Прежде всего это трехмерные (3D) игры типа Quake или Unreal. Учтите, что эти игры создают не новички, а профессиональные программисты, и не в одиночку, а целыми фирмами. И используют они для этого специальные программные средства (например, библиотеку Direct X), разобраться в которых можно, только съев пуд соли в геометрии и программировании. Изучение конкретного языка программирования – это всего лишь первая ступенька в деле создания таких солидных продуктов, как качественная 3D-игра. Так что, если ваш приятель за неделю освоил редактирование сценариев игры Heroes III и теперь важно заявляет, что он программирует, вы можете, тихо улыбаясь, сказать ему, что он немножко ошибается.
    А вот какие игры вы сможете создавать: Мрачная городская улица. Появляется автомобиль. Он стремительно приближается к главному герою, спрятавшемуся с бластером в руках за рекламной тумбой. Из автомобиля доносятся выстрелы. Пули щелкают по тумбе. В последний момент – визг тормозов и машина застывает. Теперь не медли – бей по клавишам клавиатуры, стреляй, пока крестные отцы наркомафии до тебя не добрались! Автомобиль вспыхивает, из него выскакивают «братки» и, спасаясь от твоих выстрелов, бросаются в ближайшие укрытия, откуда открывают ожесточенный огонь. Схватка продолжается…
    А вот что вы сможете реально сделать в описанной игре: На экране – картинка города, сколь угодно красивая, нарисованная вами самостоятельно или где-нибудь добытая. Вы можете, кстати, следуя за сюжетом игры, менять картинки улиц, кварталов, помещений, в нужные моменты помещая на экран нужную картинку. По городу движутся автомобили, прохожие, летят пули, вспыхивают лазерные лучи. Вы сможете создать голоса персонажей, звуки выстрелов и прочее. Однако движения персонажей будут не такими реалистичными, как в 3D-играх. Вам легко будет сделать, чтобы фигуры персонажей в застывшей позе двигались в любых нужных вам направлениях и даже при этом уменьшались в размерах (удаляясь в перспективе) или увеличивались (приближаясь). Немного труднее будет заставить их при этом передвигать ногами. Больше времени уйдет, чтобы запрограммировать более сложные движения, такие как повернуться боком, пригнуться, лечь, зарядить винтовку, улыбнуться, залезть в карман и тому подобное. Если герою вздумается долго идти направо, то вы сможете заставить город услужливо прокручиваться налево, как это происходит в играх-аркадах.
    Если вы думаете, что начав изучать программирование не с VB, а с Delphi или C++, вы быстрее и легче придете к программированию более сложных игр и других задач, то глубоко ошибаетесь. Если бы вы обратились за советом, с чего начать, к профессиональному программисту, который всю жизнь писал игры и другие программы на C++, то в ответ почти наверняка услышали бы: «Начни с Бейсика, дружок!»

    Пробный запуск

    Запускаем. Пока мы с вами создаем то – «сами не знаем что». Ведь никакой конкретной задачи мы перед собой не поставили за исключением туманного пожелания «покрасить форму». Тем не менее, перескочим через 2 этап (составление программы) и сразу выполним 3 этап, то есть запустим наш бессмысленный проект на выполнение. Для этого щелкнем мышкой по кнопке Пробный запуск (Start) на панели инструментов (не путайте панель инструментов с  Toolbox – «ящиком» элементов управления) или нажмем клавишу  F5.
    Запустили. Исторический момент. Что мы видим? Некоторое время проект компилируется, то есть с языка VB переводится на язык близкий к машинному (подробнее, что такое компиляция, написано в Приложении 1). Через несколько секунд работы компьютера на экране появляется «еще один экземпляр» нашей формы. Это и есть наше приложение Windows, то есть запущенный, откомпилированный и работающий проект (см. правую половину Рис. 1.6). То, что мы видим, это уже не форма, а окно приложения. Оно отличается от формы, как дочь от матери, то есть они очень похожи. Поэтому в дальнейшем я часто буду называть работающее окно нашего приложения тоже формой. Я надеюсь, вы не будете путать ее с ее родительницей в окне проектирования.
    Мы видим, что наша работающая форма все-таки немного отличается от формы на этапе проектирования, из которой она родилась: пропали точки, преображенная форма потеряла связь с главным окном VS и ведет себя, как независимое окно, каковым она, в общем, и является. Для убедительности сверните главное окно VS на панель задач. Теперь форма одна царит на экране. Ее можно таскать по всему экрану, ухватившись за заголовок, и ее значок вы можете видеть на панели задач Windows. Она надлежащим образом реагирует на щелчки по кнопкам в ее правом верхнем углу. Если подвести острие курсора к краю или углу формы, то можно менять ее размеры. А вот размеры кнопок и других элементов мы не можем больше менять.
    Зато теперь на кнопки можно нажимать мышкой. Нажимаем. Ничего не происходит. Естественно – мы ведь не написали программу, объясняющую компьютеру, что нужно делать при нажатии на кнопку. В текстовое поле теперь можно вводить текст и как угодно там его менять и стирать. Щелчками мыши вы можете ставить и убирать флажки (галочки) в элементах CheckBox. Щелчками мыши вы можете устанавливать переключатель в какое угодно положение из четырех. Вы можете мышкой перемещать ползунок на полосах прокрутки. Но все это без толку. Компьютер никак не реагирует, что бы вы там ни делали. Причина та же.

    Итак, мы видим, что без программы наш проект не стоит ни гроша.

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

    Обратите внимание на слово [run]  (бег, работа) в заголовке главного окна VS. Оно говорит о том, что в настоящий момент VB находится в режиме работы, то есть в режиме выполнения проекта (3 этап), во время которого мы ни собирать проект (1 этап), ни писать для него программу (2 этап) не можем, о чем сообщают слова [Read Only] в том же заголовке.

    Завершаем. Завершим выполнение проекта кнопкой Пробный запуск (Stop Debugging) на панели инструментов или щелкнув по крестику в правом верхнем углу работающей формы. VB вышел из режима [run] и вернулся в режим [design]. Теперь в проекте можно что-нибудь поменять и снова его запустить. И так далее.

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

    Проектируем

    Создайте новый проект и разместите на форме три текстовых поля и четыре кнопки. У вас получится так, как на Рис. 3.2.
    Проектируем
    Рис. 3.2
    Чтобы продолжить дальше, нам нужно поближе познакомиться со свойствами форм и элементов управления.

    Программируем Проект готов

    Запустим проект. Введем в верхнее текстовое поле число 3, а в среднее введем 2. Щелкнем по кнопке сложения. Ничего не произошло. Естественно. Ведь никакой процедуры мы для кнопки не написали. Завершим работу проекта. Двойным щелчком по кнопке сложения создадим заготовку процедуры в окне кода. Поскольку никаких знаний у нас нет, попытаемся выдумать, что же там написать. Рассуждать будем так: 3 и 2 – не что иное, как значения свойства Text текстовых полей Число1 и Число2. По-другому, это Число1.Text и Число2.Text. Нам нужно, чтобы Результат.Text равнялся их сумме. Что если написать такой оператор:
    Результат.Text = Число1.Text + Число2.Text
    Сказано – сделано. Получаем:
    Private Sub Кл_сложения_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Кл_сложения.Click
        Результат.Text = Число1.Text + Число2.Text
    End Sub
    Запускаем проект. Вводим 3 и 2. Щелкаем по кнопке сложения. Результат есть. Но не совсем тот, что мы ожидали. Вместо 5 получилось 32. В чем причина? Дело в том, что VB привык считать знак + по отношению к содержимому текстовых полей не знаком сложения, а знаком «соединения», выстраивания в цепочку. Проверьте. Вместо 3 и 2 введите Коро и бочка, в результате получится Коробочка. Недаром текстовые поля называются текстовыми, а не числовыми. То, что мы назвали их Число1 и Число2, делу никак не помогло, потому что VB не обращает внимания на смысл имен, для него имена – просто бессмысленные сочетания символов.
    Что делать? Надо приказать VB обращаться в данном случае с содержимым текстовых полей не как с текстом, а как с числами. Для этого достаточно записывать его не в таком виде –
    Число1.Text            Число2.Text
    а в таком –
    Val(Число1.Text)            Val(Число2.Text)
    Здесь функция Val – сокращение от Value – величина, численное значение. Теперь наш оператор будет выглядеть так:
            Результат.Text = Val(Число1.Text) + Val(Число2.Text)
    Запускаем проект. Вводим два любых целых числа  и убеждаемся, что все складывается правильно.

    Аналогично программируем три остальные кнопки. Помните мой совет о том, чтобы не вводить за один раз в окно кода больше 2-3 строк. Ввели процедуру вычитания, запустите проект, проверьте, как она работает. Теперь ввели процедуру умножения, запустили, проверили. И так далее.

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

    Private Sub Кл_сложения_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Кл_сложения.Click

            Результат.Text = Val(Число1.Text) + Val(Число2.Text)

        End Sub

    Private Sub Кл_вычитания_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Кл_вычитания.Click

            Результат.Text = Val(Число1.Text) - Val(Число2.Text)

        End Sub

    Private Sub Кл_умножения_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Кл_умножения.Click

            Результат.Text = Val(Число1.Text) * Val(Число2.Text)

        End Sub

    Private Sub Кл_деления_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Кл_деления.Click

            Результат.Text = Val(Число1.Text) / Val(Число2.Text)

        End Sub

    Итак, калькулятор готов! Испытайте его как следует. Вводите дробные и отрицательные числа. При этом:

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

    Предостережения: Наш калькулятор пока не защищен от ввода вместо чисел всякой ерунды (например, текста КУ-КУ), от ввода слишком больших или слишком маленьких чисел, от деления на ноль. В таких случаях VB даст нам неправильный или неудобочитаемый результат. Защиту и улучшения вы найдете в 5.4 и 7.7.

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

    Задание 1.   

    Создайте кнопку возведения в квадрат числа из верхнего текстового поля. Указание: Возвести в квадрат – значит умножить само на себя.

    Задание 2.

    На нашем калькуляторе не хватает кнопки СБРОС, которая опустошала бы все три текстовых поля. Создайте ее. Указание: Для этого вам понадобятся операторы типа   Число1.Text = "". В окне кода текстовое содержимое текстовых полей должно указываться в двойных кавычках. В данном случае у нас внутри кавычек пусто, что и требовалось.

    Project

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

    Работа с файлами и папками в окнах Open Project и Open File

    В этом подразделе я научу вас путешествовать внутри окон Open Project и Open File по папкам и дискам, находить в них нужный проект, нужную папку, нужный файл, а кроме этого – не выходя из окон создавать, копировать, перемещать и удалять файлы и папки, без чего в работе с VB не обойтись. Вся упомянутая работа в окнах Open Project и Open File очень похожа на аналогичную работу в окнах Windows, которая описана в Приложении 2.
    Окно Open Project. Запустите VS. Затем: File ® Open ® Project ® перед вами появится диалоговое окно открытия проекта (Рис. 1.11).
    Работа с файлами и папками в окнах Open Project и Open File
    Рис. 1.11
    Щелкните в нем по кнопке My Projects. Вы увидите содержимое папки Visual Studio Projects.
    Путешествуем по папкам. В большом белом поле в середине диалогового окна вы видите список папок и файлов. Это содержимое папки, название которой вы видите в находящемся чуть выше раскрывающемся списке Look in. Вы можете двойным щелчком мыши войти в любую из папок в этом поле. Тогда именно она появится в списке Look in, а в большом поле появится ее содержимое. Таким образом вы можете продвигаться вглубь папок, как внутрь матрешки. А как продвигаться наружу? Для этого есть кнопка Работа с файлами и папками в окнах Open Project и Open File. Щелчком по ней вы выйдете из папки, показанной в списке Look in, в папку, внутрь которой она входит. Еще щелчок – еще один шаг наружу. И так далее, пока не окажетесь на рабочем столе Windows (Desktop). Если хотите опять идти внутрь и добраться до проектов, войдите в Мои документы (My Documents), а там – в Visual Studio Projects.
    Если вы сейчас дважды щелкнете по папке Красим форму, то окажетесь внутри нее, то есть увидите то, что изображено на Рис. 1.10.
    Щелкнув по черной треугольной стрелке в раскрывающемся списке Look in, вы раскроете список папок в виде части дерева, похожего на дерево Проводника Windows (см. Рис. 1.12). Это позволит вам быстрее путешествовать по папкам.
    Работа с файлами и папками в окнах Open Project и Open File
    Рис. 1.12
    Потренируйтесь. У вас должна возникнуть уверенность, что вы можете добраться до любой папки на любом диске вашего компьютера, а значит открыть любой проект.

    Окно Open File. В окне Open Project вы видите все папки, но вот файлы видите не все, а лишь те, типы которых указаны в списке Files of type. Чтобы видеть все файлы, вам надо вызвать на экран не диалоговое окно открытия проекта, а диалоговое окно открытия файла, то есть выполнить не File ® Open ® Project, а File ® Open ® File. Сделайте это и тут же зайдите в папку  Красим форму (см. Рис. 1.13).

    Работа с файлами и папками в окнах Open Project и Open File

    Рис. 1.13

    На Рис. 1.10 мы видим в папке только два файла, а здесь – семь. В принципе окна Open Project и Open File похожи как по виду, так и по назначению, только второе показывает все файлы и работает со всеми файлами, а первое – нет.

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

    Дальнейшие пояснения я буду вести на примере окна Open File.

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

    Создаем папки. Внутри папки, выбранной в списке Look in, вы можете создавать новые папки. Новая папка будет создана, если вы щелкнете по кнопке Работа с файлами и папками в окнах Open Project и Open File. Тут же вам нужно будет ввести с клавиатуры ее имя.

    Создаем файлы. Щелкните правой клавишей мыши по белому пространству большого поля и в контекстном меню выберите New. В возникшем подменю вы увидите типы файлов, которые вы можете создать внутри папки, выбранной в списке Look in (см. Рис. 1.14). Щелкайте по нужному типу и создавайте. Среди этих типов вы найдете и Folder, что означает создание папки.

    Работа с файлами и папками в окнах Open Project и Open File

    Рис. 1.14

    Копируем файлы и папки. Чтобы скопировать файл или папку в другое место, выберите в контекстном меню файла или папки опцию Copy (копировать). Затем доберитесь до папки, в которую хотите данный файл или папку скопировать, то есть добейтесь ее присутствия в списке Look in, и щелкните правой клавишей мыши по свободному пространству. В открывшемся контекстном меню выберите Paste (вставить). Если вы хотите, чтобы копия находилась рядом с оригиналом, добираться до другой папки не нужно.

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

    Переименовываем файлы и папки. Чтобы переименовать файл или папку, выберите в контекстном меню опцию Rename (переименовать) и введите новое имя.

    Удаляем файлы и папки. Чтобы удалить файл или папку, выберите в контекстном меню опцию Delete (удалить) и ответьте утвердительно на вопрос компьютера.

    Размещаем объекты на форме

    Что на Рис. 1.4 должно вас больше всего интересовать, так это серый прямоугольник или квадрат, расположенный на белом фоне. Он покрыт сеткой из точек и имеет заголовок Form1. Это так называемая форма. Если форму вы по какой-то причине не видите или впоследствии потеряли из виду, то в главном меню окна VS выберите View ® Designer.
    Что же это такое – форма? Вспомним нашу игрушечную железную дорогу. Так вот, форма – это пустой стол, тот самый стол, на котором мы эту дорогу будем собирать. Когда вы запустите проект, он станет приложением Windows, а форма станет окном Windows, в котором будет работать ваше приложение.
    Обратите внимание на три белых квадратика – маркера – в правой нижней части формы. Ухватившись за них мышкой, вы можете менять размеры формы. Но таскать форму по экрану вам здесь не удастся.
    Начнем работу над проектом с 1 этапа. Чтобы собрать железную дорогу, нам нужны объекты: рельсы, вагоны и т.п. Чтобы создать проект, нам тоже нужны объекты – и VB нам их предоставляет. В левой части главного окна VS мы видим значок Размещаем объекты на форме. Поставим на него курсор мыши и, может быть, даже щелкнем. На экран выплывет слева вертикальное серое окно, на окно не похожее (Рис. 1.5).
    Размещаем объекты на форме
    Рис. 1.5
     Это окно Toolbox («Ящик» с элементами управления), то есть набор наиболее популярных стандартных объектов, применяемых при создании проектов на VB (это наши паровозики и вагончики). Каждый объект-элемент управления имеет свое название: кнопка, текстовое поле, таймер, графическое поле и т.п.
    Если вы убрали мышку с окна Toolbox, то оно уплывет обратно, мудро освобождая дефицитное место на экране. Чтобы снова увидеть его, поставьте опять мышку на значок.
    Замечание: Понятие «Объект» – центральное в VB. Оно имеет гораздо более широкий смысл, чем форма или элемент управления, но поскольку других объектов мы пока не знаем, я буду называть объектами именно их. Постепенно я буду расширять и уточнять понятие объекта.
    Ну что ж, начнем сборку. Я пока не буду объяснять «зачем», а буду только объяснять «что» и «как». Поместим на форму так называемую кнопку. Для этого щелкнем в Toolbox по кнопке (Button). Мышиный курсор приобретет характерный вид крестика с кнопкой. Затем проведем мышкой внутри формы небольшую «рамочку». Что значит провести «рамочку»? Это значит поместить мышиный курсор куда-нибудь внутрь формы, нажать на левую клавишу мыши и, не отпуская клавишу, «протащить» мышь немного наискосок. При этом за курсором будет тянуться «рамочка». Отпустите мышь. На месте рамочки возникнет кнопка с надписью Button1. Впрочем, рамочку можно и не проводить, достаточно просто щелкнуть где-нибудь внутри формы.

    По краям кнопки вы увидите 8 белых квадратиков - маркеров изменения размеров (Рис. 1.5). Если щелкнуть по форме мимо кнопки, они пропадут, если снова щелкнуть по кнопке – появятся. Только не надо пока двойных щелчков (если все-таки сделаете двойной щелчок, у вас на месте прежнего откроется другое окно. В этом случае просто выберите в окне закладку Form1.vb [design] и все вернется на место. Перетащите мышкой любой из маркеров – размеры кнопки изменятся. Можно таскать кнопку по форме, если ухватиться мышью не за маркер, а за любое место внутри кнопки. Можно передвигать кнопку клавишами перемещения курсора на клавиатуре. Чтобы уничтожить кнопку, щелкните по ней правой клавишей мыши и в выскочившем контекстном меню выберите опцию Delete или нажмите клавишу стирания на клавиатуре. Проделайте все это. А теперь, если вы ее уничтожили, то снова создайте.

    Аналогичным образом поместите из Toolbox на форму еще одну кнопку, а также следующие объекты: метку (Label), несколько флажков (CheckBox), несколько элементов переключателя (RadioButton), горизонтальную полосу прокрутки (HScrollBar), вертикальную полосу прокрутки

    (VScrollBar) и текстовое поле (TextBox). Расположите их примерно так, как в левой половине Рис. 1.6.

    Размещаем объекты на форме

    Рис. 1.6

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

    Обратите внимание на слово [design] (дизайн, проектирование) в заголовке главного окна VS. Оно говорит о том, что в настоящий момент VB находится в режиме проектирования, во время которого мы можем собирать, конструировать наш проект (1 этап) и писать для него программу (2 этап). Белое окно с формой, в котором мы выполняем конструирование, называется окном конструктора (дизайнера) форм (Windows Forms Designer).

    Обратите внимание, что когда мы размещаем на форме несколько одинаковых объектов, например Button, VB надписывает их с указанием порядкового номера: Button1, Button2, Button3…

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

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

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

    Компьютер выполняет программу со страшной скоростью. Не успели мы нажать кнопку – а результаты уже получены. Если дела идут нормально, этот факт нас восхищает. Но предположим, что результаты получились не те, что нам надо. Это значит, что в программе есть ошибки. И искать их трудно. В такой ситуации скорость компьютера начинает раздражать. Хотелось бы, чтобы компьютер работал помедленнее и мы успевали проследить за его работой. И хорошо бы как-нибудь во время работы подсмотреть значения переменных в памяти, это помогло бы найти ошибку. Режим прерывания для этого и предназначен. Подробно о режиме прерывания и об отладке программы поговорим в Глава 9. , а сейчас вкратце и без особых пояснений остановимся на самом необходимом.
    Щелкните в нашем проекте по вертикальной серой полосе в левой части окна кода против строки заголовка процедуры. На полосе появится черная точка и вся строка будет выделена черным (см. Рис. 5.3). Была создана так называемая точка прерывания (Breakpoint). Убираются точки прерывания так же, как и ставятся – щелчком мыши.
    Режим прерывания Пошаговый режим выполнения программы
    Рис. 5.3
    Запустите проект обычным образом (кнопка Start или клавиша F5). Проект начнет выполняться как обычно. На экране появится форма. Нажмите, как водится, кнопку Button1. И тут вы почувствуете разницу. Вместо того, чтобы полностью выполниться и показать результат, проект остановится на точке прерывания, в знак чего эта строка окажется подсвечена желтым цветом и на нее укажет желтая стрелка (Рис. 5.4). Итак, только-только начав выполняться, наш проект «замерз» до тех пор, пока мы его не разморозим. «Мгновение остановилось». Говорят, что проект перешел в так называемый режим прерывания.
    Режим прерывания Пошаговый режим выполнения программы
    Рис. 5.4
    Интересно, чему во время остановки равны значения переменных в памяти компьютера? Для того, чтобы узнать это, достаточно поместить не нажимая мышиный курсор на обозначение переменной в тексте процедуры в окне кода – во всплывающей подсказке вы увидите значение переменной (на Рис. 5.4 вы видите, что y=0). Поводите мышью по переменным. Как и положено, пока «на табло одни нули».

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

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

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

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

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

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

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

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

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

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

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

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

    Рис. 5.5

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

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

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

    С типом дробных чисел Double мы встретились в 5.2.3. Познакомимся поближе с ним и с типом Single. Оба они предназначены для работы с целыми и дробными числами и различаются, согласно таблице, точностью и диапазоном значений.
    Создайте кнопку и введите такую программу:
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            Dim a, b, c As Single
            a = 23.456
            b = 100
            c = a + b
            WriteLine(a) : WriteLine(b) : WriteLine(c)
            Dim d, f, g As Double
            d = 123456789
            f = 0.000555
            g = d + f
            WriteLine(d) : WriteLine(f) : WriteLine(g)
    End Sub
    Обратите внимание, что оператор Dim d, f, g As Double находится не на самом верху процедуры. Это ничего. Надо только, чтобы объявление переменной было расположено в процедуре раньше ее «употребления».
    Запустите проект. Вот результат:
    23,456
    100
    123,456
    123456789
    0,000555
    123456789,000555
    Все правильно. Попробуем теперь проверить тип Single на прочность, как мы проверяли тип Integer. Попробуем записать вместо  a = 23.456 очень длинную дробь:
    a = 23.45678901234567890123456789
    Но VB не дает нам роскошествовать. Он прямо в окне кода укорачивает строку до:
            a = 23.456789012345681
    причем даже чуть-чуть искажает число. Поставим курсор мыши на этот литерал и увидим подсказку «Double». Почему? Ведь переменная a имеет тип Single! Дело в том, что VB, пока проект не запущен, не утруждает себя угадыванием смысла литералов в окне кода и все дробные литералы «стрижет под Double». Запустим проект. Вот первые три числа результатов:
    23,45679
    100
    123,4568
    Как видите, VB обрезал наши длинные числа до 7 значащих цифр. Сделал он это потому, что 4 байта, отведенные под ячейку памяти для переменной типа Single, не в состоянии вместить больше. Если мы хотим иметь большую точность, то объявляем наши переменные типом Double. Под переменную типа Double компьютер отводит в памяти 8 байтов и поэтому она может быть гораздо длиннее – 17 значащих цифр.

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

            f = 0.0000000000000000000000000000000000000000000000000000000000000543

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

            f = 5.43E-62

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

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

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

            Dim d, f, g As Double

            d = 123456789

            f = 0.00987654321098765

            g = d + f

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

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

    123456789

    0,00987654321098765

    123456789,009877

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

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

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

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

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

    Разные события. Напомню, что объекты обладают свойствами, методами и событиями. Мы с вами уже познакомились с несколькими свойствами и методами. Но вот о событиях говорили мало. Фактически нам знаком лишь один сорт событий – щелчки мышкой по кнопке и пункту меню. Но у объектов VB (в частности – у формы и элементов управления) имеется большое количество и других событий. Так, у кнопки есть следующие события: щелчок мышкой по кнопке, появление мыши над кнопкой,  нажатие клавиши мыши над кнопкой,  отпускание клавиши мыши над кнопкой, изменение цвета кнопки, изменение размеров кнопки и несколько десятков других. У текстового поля есть следующие события: двойной щелчок мышкой по текстовому полю,  изменение текста в текстовом поле  и несколько десятков других. У формы есть следующие события: движение мыши над формой, изменение размеров формы, загрузка формы (например, появление при запуске проекта), закрытие формы (например, щелчком по крестику в правом верхнем углу) и несколько десятков других.
    Обработка событий. Каждый раз, когда в предыдущих проектах мы щелкали мышкой по кнопке Button1 (то есть наступало событие – щелчок мышкой по кнопке Button1), компьютер делал то, что мы ему приказали: красил, показывал текст, играл мелодию и т.п.  Делал он это только потому, что мы в окне кода заранее написали процедуру, в которой объяснили компьютеру, что ему в этом случае делать. Например:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          HScrollBar1.Width = 100
          RadioButton2.Hide()
    End Sub
    Посмотрим в заголовок процедуры. Где в нем сказано, что процедуру эту надо выполнять именно при щелчке мышью и именно по кнопке Button1? Ответ: в правой части заголовка после скобок:
    Handles Button1.Click
    Здесь Click – щелчок мышью (событие), Button1 – объект, с которым происходит это событие, Handles – по-русски «обрабатывает». Полностью заголовок процедуры можно перевести так: Процедура, которая обрабатывает щелчок мышью по кнопке Button1, или по-другому – указывает, что нужно сделать при щелчке мышью по кнопке Button1.

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


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


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

  • Форма  Form1 в правой части заголовка обработчика обозначается MyBase.

  • Событие Load формы – загрузка формы – происходит при запуске проекта. Это очень важное и широко используемое событие. Пока процедура Form1_Load выполняется, форму на экране вы ее еще не видите. Поэтому и все действия, которые вы запрограммировали в этой процедуре, выполняются до появления формы на экране. Тем не менее, как сама форма, так и элементы управления к этому моменту уже незримо присутствуют в проекте и с ними можно работать. Некоторые события успели произойти и быть обработаны до выполнения процедуры Form1_Load, о чем свидетельствовал звук перед появлением сообщения «Выполняется процедура Form1_Load. Форма еще не видна».

  • Событие Closed формы – закрытие формы – происходит, когда вы закрываете форму, например, крестиком в ее правом верхнем углу. Раз форма закрыта, она исчезла из поля зрения вместе со своими текстовыми полями. Поэтому сообщение об этом факте я доверил не текстовому полю, а окну MsgBox.

  • Когда вы водите мышью над формой, событие MouseMove возникает много раз в секунду.

  • Список событий объекта с пояснениями вы можете найти и в системе помощи (см. 4.4.9), поставив текстовый курсор на имя объекта и нажав F1.  В открывшемся окне помощи вы найдете события по заголовку (Events) и по значкам молнии.
    С остальными популярными событиями мы будем знакомиться по мере изучения книжки.

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

    Сохранение. А теперь нам пора сохранить проект. Вообще-то, сохраниться нам надо было еще давно, до первого запуска, но не хотелось отвлекаться. Помните, что несохраненный проект пропадет, если внезапно отключится электричество или компьютер зависнет. Сохраните сейчас проект, нажав на кнопку Сохранение, закрытие, открытие, создание проекта, выход из VS (Save All) на панели инструментов. В дальнейшем рекомендую сохраняться таким образом перед каждым запуском проекта на выполнение.
    Вы должны понимать одну вещь. Каждый раз, когда вы нажимаете на кнопку Save All, VS, ни о чем вас не спрашивая, стирает с диска весь ваш проект (в том виде, как он был сохранен в последний раз) и на его место записывает с тем же именем его исправленную и дополненную вами версию, то есть ту, что вы видите на экране. Так поступают все современные программные продукты. На усмотрение программиста оставляется решать, а не хуже ли новая версия старой и не жалко ли старой версии.
    Дальнейший материал подраздела прочтите, не выполняя. Выполнение отложите на потом, когда действительно понадобится закрывать, открывать или создавать проект.
    Закрытие. Если вы хотите закончить работу над проектом, вам нужно сохраниться, а затем так закрыть его: File ® Close Solution. Теперь в окне Solution Explorer у вас должно быть пусто. Если вы забыли сохранить проект, VS перед закрытием предложит вам сделать это.
    Выход из VS совершенно такой же, как и из большинства других приложений Windows – щелчок мышкой по крестику в правом верхнем углу главного окна VS или File ® Exit. Если вы забыли сохранить проект, VS перед выходом предложит вам сделать это.
    Открытие. Сохранившись и закрыв проект, вы можете спокойно выйти из VS и можете даже выключить компьютер. Можно и не выходить из VS. Чтобы продолжить через некоторое время работу над проектом, снова запустите VS (если вы вышли из нее) и так загрузите (откройте) сохраненный проект: File ® Open ® Project ® перед вами откроется диалоговое окно открытия проекта ® зайдите в папку проекта (Рис. 1.10). Если вы не знаете, как добраться до папки нужного проекта, читайте следующий подраздел.

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

    Рис. 1.10

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

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

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

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

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

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

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

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

    Solution Explorer

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

    Создаем меню

    Скопируйте папку проекта Калькулятор и работайте над копией.
    Чтобы создать меню, нужно в Toolbox найти новый для нас элемент MainMenu (Главное меню) и разместить его на форме. Но, странное дело, оно оказывается не на форме, а под ней (значок  MainMenu1 на Рис. 3.18). Эта область, где расположен значок, называется дизайнером компонентов (Component Designer). VB помещает на дизайнер компонентов те элементы, которым во время работы проекта ни к чему быть видимыми.
    Однако, одновременно на том же рисунке мы видим и «зародыш» нашего будущего меню: в левой верхней части формы, там, где обычно и размещается Главное меню, появилось белое поле со словами Type Here, что означает «Печатай сюда». Вот его-то мы видеть будем.
    Создаем меню
    Рис. 3.18
    Щелкните по этому полю и введите в него текст «Внешний вид». Как только вы начнете вводить этот текст, появятся еще дополнительные поля со словами Type Here (см. Рис. 3.19). Они появляются там, где по мнению VB вы можете пожелать создавать другие пункты меню. Сравнив местоположение этих полей с заданным местоположением пунктов меню на  Рис. 3.17, сделаем вывод, что на месте правого поля должен быть текст «О программе», а на месте нижнего – «Прозрачный».
    Создаем меню
    Рис. 3.19
    Введя текст «Внешний вид», щелкните по правому полю и введите текст «О программе». При этом появятся новые поля с текстом Type Here (см.Рис. 3.20). Взглянув на  Рис. 3.17, мы понимаем, что они нам не понадобятся.
    Создаем меню
    Рис. 3.20
    Введя текст «О программе», снова щелкните по полю с надписью «Внешний вид». При этом ниже него снова появится поле с текстом Type Here, куда мы и вводим текст «Прозрачный» (см.Рис. 3.21).
    Создаем меню
    Рис. 3.21
    Взглянув на  Рис. 3.17, мы видим, что ниже этого поля мы должны ввести текст «Цвет полей». Когда мы его будем вводить, справа от поля «Цвет полей» появится поле со словами Type Here, в которое мы, следуя за Рис. 3.17, введем текст «Желтый» (см. Рис. 3.22), а ниже текста «Желтый» – текст «Белый», оставив без внимания другие поля.
    Создаем меню
    Рис. 3.22
    Все в порядке – внешний вид меню готов. Запустите проект. Вы видите, что задуманное меню появилось на калькуляторе. Пощелкайте по пунктам. Вложенные меню выпадают, как положено, но больше, естественно, ничего не происходит. Для того, чтобы происходило, нужно заставить меню работать, а для этого нужно для каждого пункта написать свою процедуру.

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

    Теперь вам нужно сообщить компьютеру, что вы хотите создать новый проект на языке VB. Ваши действия: File ® New ® Project. Перед вами возникает диалоговое окно (см. Рис. 1.3):
    Создаем проект
    Рис. 1.3
    В левом поле вы выбираете Visual Basic Project в знак того, что хотите создавать проект именно на языке VB. В правом поле вы выбираете Windows Application (Приложение Windows) в знак того, что собираетесь создавать обычную программу, которая должна работать на вашем настольном компьютере или ноутбуке под управлением Windows в обычном окне. В этом поле вы могли бы выбрать, например, создание программы для работы в Интернете или что-нибудь другое.
    Чуть пониже, в поле Name компьютер предлагает нам название вашего будущего проекта и одноименной папки, в которой он будет сохраняться – WindowsApplication1, а еще ниже, в поле Location компьютер предлагает папку, в которой будут храниться папки всех ваших будущих проектов – E:\Documents and Settings\Sergey Lukin\My Documents\Visual Studio Projects. Если вы сейчас нажмете ОК, то внутри этой папки тут же будет создана папка WindowsApplication1 и в ней немедленно появятся все необходимые файлы, которые и будут составлять ваш будущий проект.
    Создаем проектЗапомните: каждый проект состоит не из одного файла, а из нескольких файлов и папок, поэтому было бы глупо пытаться сохранять файлы и папки разных проектов «скопом» в одной папке. Они просто перемешаются. VS прекрасно это понимает и поэтому предлагает вам сохранять проект в отдельную папку. Вам остается только согласиться. Если вы согласитесь также на имя WindowsApplication1, то для следующего нового проекта VS предложит уже папку WindowsApplication2 и так далее. Все эти папки будут находиться рядышком внутри папки Visual Studio Projects, как показано на рисунке, изображающем фрагмент Проводника Windows.
    Если вам не нравится папка Visual Studio Projects, то вы можете выбрать другую кнопкой Browse (неопытным не рекомендую).
    Но мы щелкать на ОК все равно пока не будем, так как нам нужно придумать более подходящее, чем WindowsApplication1, имя для проекта. Поскольку смысл его, как я наметил, будет заключаться в том, чтобы «покрасить» некую «форму, то и введем в поле Name название Красим форму, после чего и нажмем ОК. Проект теперь будет храниться в папке с этим названием.

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

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

    Рис. 1.4

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

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

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

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

    Когда вы впервые запускаете VS, первое, что вы видите, это стартовая страница (Рис. 1.1 или Рис. 1.2). Открыта она на закладке My Profile («Мой профиль»). Если у вас есть какие-то предпочтения и опыт программирования, то можете здесь настроить свой профиль в среде VS, если нет – оставьте все, как есть. Рекомендую только установить фильтр Help Filter на Visual Basic, чтобы система помощи не забивала экран ненужной вам информацией по другим языкам. Если раньше вы программировали на Visual Basic 6.0, то можете здесь выбрать соответствующий профиль, тогда VS предоставит вам  привычные настройки.
    В следующий раз при запуске стартовая страница откроется на закладке Projects (в Visual Studio .NET 2003) или закладке Get Started (в Visual Studio .NET). Эта закладка предлагает вам выбрать для открытия один из последних проектов, с которыми вы работали, или создать новый проект, что весьма удобно.
    Остальные закладки связаны с Интернет.
    Если вам надоело, что при каждом запуске VS появляется стартовая страница, зайдите в закладке My Profile в список At Startup  (Рис. 4.22) и выберите один из вариантов. Вот они по порядку:
  • Показывать стартовую страницу.

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

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

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

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

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

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

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

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

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

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

    WindowState (состояние окна). Определяет, в каком виде возникает на экране форма при запуске проекта: в нормальном, в минимизированном (то есть вы найдете ее на панели задач Windows) или максимизированном (во весь экран).
    StartPosition (стартовая позиция). Определяет, в каком месте экрана возникает форма при запуске проекта. Так, вы можете заставить ее появиться в центре экрана (CenterScreen) или предоставить себе возможность вручную (Manual) настраивать место появления формы при помощи свойства Location (см. следующий раздел).
    MaximizeBox (кнопка максимизации –  квадратик в правом верхнем углу формы). Сейчас значение этого свойства – True (Правда). Если установить его в False (Ложь), то квадратик станет недоступен. Свойство FormBorderStyle может совсем убрать этот квадратик.
    MinimizeBox (кнопка минимизации – горизонтальная черточка в правом верхнем углу формы). Сейчас значение этого свойства – True (Правда). Если установить его в False (Ложь), то черточка станет недоступна. Свойство FormBorderStyle может совсем убрать эту черточку.
    MinimumSize (минимальный размер). Устанавливает минимальную ширину и высоту формы, меньше которых форму нельзя уменьшить как  в режиме [run], так и в режиме проектирования.
    MaximumSize (максимальный размер). Устанавливает максимальную ширину и высоту формы, больше которых форму нельзя увеличить как  в режиме [run], так и в режиме проектирования.
    Icon (значок, пиктограмма, иконка). В левом верхнем углу формы вы видите значок. Его же вы видите на панели задач, когда проект запущен. Если он вам не нравится, вы можете его заменить на другой. Щелкните по свойству Icon. В поле значения появилась кнопочка с троеточием. Щелкните по ней – перед вами появится привычное вам окно открытия файла. Множество иконок вы можете найти в нем по адресу
    Program Files\Microsoft Visual Studio .NET\Common7\Graphics\icons
    ShowInTaskbar (показывать значок на панели задач). Вы можете запретить значку формы появляться на панели задач, установив это свойство в False.
    Opacity (непрозрачность). Очень живописное свойство, которого не было в предыдущих версиях Visual Basic. Сейчас оно установлено в 100% и форма после запуска проекта полностью и привычно непрозрачна. Установите его, например, в 50% и запустите проект. Форма станет полупрозрачной (см. Рис. 3.10).
    Свойства формы
    Рис. 3.10
    При значении 0% форма будет невидима полностью. В 12.9мы поставим задачу материализации привидений, а сейчас вы вполне можете сделать полупрозрачным наш Калькулятор. А что – очень удобно!

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

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

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

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

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

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

    Dim 
    a, b, S, p
    As
    Double 

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

    Объявляю
    a, b, S, p
    как
    десятичные дроби двойной точности

    то есть вы обязуете VB обращаться с переменными величинами a, b, S, p, как с десятичными дробями и ничем иным. Десятичная дробь – это не только число, меньшее единицы. Нет – это вообще любое число, которое может иметь целую и дробную часть (например, 27,3908). В частности это и любое целое число. О смысле двойной точности попозже.
    Законный вопрос: зачем нам нужен тип Integer, когда тип Double очевидно «гораздо богаче и лучше»? Ответ: Не во всем и не всегда он лучше, иначе не стали бы его создавать вообще. Подробнее об этом – в 5.4.5.
    Список типов VB. На бал к VB вхожи не только бароны и князья, то есть типов переменных в VB довольно много и каждый полезен по-своему. Рассматривать новые типы я буду по мере надобности. Вот какие типы данных вы найдете в этой книжке:

    Тип
    Описание
    Ссылка
    Byte
    Целое число – очень короткое, положительное (от 0 до 255)
    5.4.3
    Short
    Целое число – короткое (от -32768 до 32767)
    5.4.3
    Integer
    Целое число – обычное (от -2147483648 до 2147483647)
    5.4.3
    Long
    Целое число – длинное (от -9223372036854775808 до 9223372036854775807)
    5.4.3
    Single
    Десятичная дробь обычной точности
    5.4.4
    Double
    Десятичная дробь двойной точности
    5.4.4
    Decimal
    Десятичная дробь длинная, абсолютной точности
    5.4.5
    Char
    Символ (любой из 65536 знаков, букв, цифр и других символов)
    19.1.2
    String
    Строка (произвольный текст)
    19.1
    Boolean
    Логический тип (истина – ложь)
    7.5.4
    Date
    Дата и время
    13.1
    Массивы
    Глава 15.
    Enumerations
    Перечисления. Типов перечислений много и все с разными именами.
    13.3
    Structures
    Структуры – пользовательские типы. Типов структур много и все с разными именами.
    16.3
    Классы
    Типов классов огромное количество и все с разными именами.
    21.4
    Object
    Объект – всеобъемлющий тип-хамелеон
    11.5.1

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

    Toolbox

    Взгляните на Рис. 1.5. В окне Toolbox имеются закладки Data, Components, Windows Forms и в нижней части окна – другие. В закладках расположены элементы управления. Наибольшая их часть расположена в закладке Windows Forms. Закладки не очень похожи на обычные закладки и ведут себя непривычно: разъезжают вверх-вниз. Но ничего, привыкнуть можно.
    Обычно все элементы управления в закладке Windows Forms не помещаются по высоте окна Toolbox. Чтобы добраться до непоместившихся, прокручиваем окно черными треугольными стрелочками в верхней и нижней частях окна.
    Вы можете таскать элементы управления вверх-вниз по окну Toolbox, размещая их удобным вам образом. Щелкните правой клавишей мыши по поверхности окна и в появившемся контекстном меню выберите Sort Items Alphabetically. Элементы управления расположатся в алфавитном порядке. Не выбирайте Cut и Delete, не то Toolbox лишится элементов управления.
    Если Toolbox вашего компьютера слишком узкий или широкий, вы можете перетащить мышкой его границу.
    В стандартном наборе элементов управления в окне Toolbox отсутствуют многие полезные и приятные элементы управления. Чтобы поместить на Toolbox нужный вам элемент управления, выберите в контекстном меню Toolbox пункт Add/Remove Items. Появляется окно Customize Toolbox (см. Рис. 4.16).
    Toolbox
    Рис. 4.16
    В закладке  .NET Framework Components
    (новые компоненты) или COM Components (старые компоненты) вы в длинном списке ставите галочку там, где она еще не поставлена, напротив нужного элемента. Затем – ОК. Соответствующий элемент управления оказывается в окне Toolbox. Теперь его можно размещать на форме обычным образом.

    Tools

    Здесь нам интересен пункт Options, который позволяет настраивать среду VS, то есть регулировать внешний вид и поведение окон, панелей инструментов и других элементов среды. Будьте осторожны и не меняйте настроек, которых вы не понимаете, иначе VS будет вести себя непривычным или неприятным образом. Некоторые настройки вступают в действие не сразу, а только после перезагрузки VS.
    Загляните в пункт Options (Рис. 4.23).
    Tools
    Рис. 4.23
    Слева вы видите список основных страниц, каждая из которых посвящена той или иной стороне настройки среды. Страницы сгруппированы в папки. Рассмотрим те, что могут представить интерес для начинающих.
    Страница General папки Environment. На Рис. 4.23 вы видите страницу General
    (Общая) из папки Environment (Среда). Верхний переключатель позволяет вам выбрать для центральной группы окон один из двух способов представления окон: с закладками, к которому вы уже привыкли в VS (Tabbed Documents), и без закладок – тот, к которому вы привыкли в других приложениях Windows (MDI environment), когда окна могут перемещаться независимо друг от друга. Вы помните, что в других группах окон вы делаете выбор между этими двумя способами при помощи их контекстного меню – Dockable – Floating.
    Справа (At startup) вы видите список того, чем вас встречает VS при загрузке. Вы его уже видели на Рис. 4.22, там же он и описан.
    Флажок  Show status bar заведует появлением в нижней части экрана строки состояния. Снимите его, если вам не хватает места на экране.
    Следующий флажок с регулятором позволяют регулировать скорость «выползания» из-за края экрана окна Toolbox и других окон с включенным Auto Hide.
    Страница Fonts and Colors папки Environment. На Рис. 4.24 вы видите страницу Fonts and Colors (Шрифты и цвета) из папки Environment. Она позволяет выбрать шрифты и цветовое оформление окон, предназначенных для текстовой информации.
    Tools
    Рис. 4.24
    Сначала в поле Show settings for мы выбираем окно или тип окон, для которого будем настраивать шрифты и цвета. На рисунке выбран Text Editor, то есть попросту окно кода (а, например, для настройки окна Output нам понадобится Text Output Tool Windows). В полях Font и Size мы выбираем шрифт и размер шрифта для этого окна. Установив флажок Bold, мы делаем шрифт полужирным.

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

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

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

    Tools

    Рис. 4.25

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

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

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

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

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

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

    Инсталляцию вообще я уже вкратце описал в начале раздела. Начнем с того, что в качестве эксперимента проведем инсталляцию на том же компьютере, на котором вы создавали инсталляционный пакет.
    1. Сделайте двойной щелчок мышкой по файлу Мой калькулятор.msi. Инсталляция запустилась. Появившееся окно мастера установки (Рис. 4.40) предупреждает, что тот, кто установит эту программу без вашего разрешения, сядет в тюрьму. После этого с легким сердцем можете нажимать Next.
    Мастером называется программа, позволяющая пользователю делать сложные вещи с минимальной затратой умственных сил. Обычно работа мастера состоит из нескольких шагов, на каждом из которых мастер задает пользователю вопросы. Переход к следующему шагу осуществляется кнопкой Next. Вернуться назад вы можете кнопкой Back, прервать установку – кнопкой Cancel.
    Третий этап - инсталляция
    Рис. 4.40
    2. В следующем окне (Рис. 4.41) вам предлагается адрес папки, в которую будет устанавливаться ваша программа. Если он вам не нравится, нажмите кнопку Browse  и выберите нужную папку или впишите адрес в текстовое поле. При помощи переключателя внизу задайте, кто будет пользоваться этой программой: все пользователи компьютера (Everyone) или только вы (Just me). Next.
    Третий этап - инсталляция
    Рис. 4.41
    3. Следующее окно (Confirm Installation) предлагает вам на всякий случай подтвердить, что вы хотите начать инсталляцию (ведь это связано с записью файлов на компьютер и бог знает чем может закончиться). Next.
    4. Идет процесс установки (Рис. 4.42).
    Третий этап - инсталляция
    Рис. 4.42
    5. Последнее окно сообщает, что установка завершена (Installation Complete). Можно нажимать Close.
    Программа установилась. Теперь можете запускать ее из стартового меню «Пуск», там появился необходимый ярлык.
    Вам будет полезно заглянуть в папку Мой калькулятор в папке Program Files, куда установилась ваша программа, и обнаружить там запускающий файл Калькулятор.exe и графический файл Earth.JPG.
    Инсталляция на другом компьютере.
    Чтобы установить вашу программу на другом компьютере, скопируйте любым способом инсталляционный файл Мой калькулятор.msi на диск этого компьютера и запустите его там (скопировать вы можете, например, при помощи сети или дискеты, или CD-RW).
    Проблема на сегодняшний день (начало 2005) состоит в том, что далеко не на каждом компьютере инсталляция может успешно осуществиться. Однако эта проблема должна уйти в прошлое, как только .NET Framework станет стандартной составной частью Windows.

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

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

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

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

  • Для этого достаточно в процедуру добавить 3 оператора. Начнем по порядку.
    Меняем текст в TextBox1. У текстового поля TextBox1 есть свойство Text, значением которого является текст в этом поле. Поэтому добавим в процедуру оператор
    TextBox1.Text  =  "Ширина полосы = 100"
    Запомните: В окне кода значение свойства Text для текстового поля и других объектов должно браться в двойные кавычки.
    Привыкайте к похожим обозначениям в VB разных вещей (у нас это TextBox1 и Text) и будьте внимательны. Наш оператор можно перевести так: Содержимое текстового поля TextBox1 сделать таким –  Ширина полосы = 100.
    Не думайте, что смысл слов  Ширина полосы = 100 что-то значит для компьютера. Во-первых, он по-русски не понимает, а во-вторых, что бы ни было написано внутри двойных кавычек, он в это не вдумывается и как приказ не воспринимает, а просто воспроизводит в текстовом поле. Чтобы проверить, можете написать внутри кавычек любую абракадабру и запустить проект.
    Вот что у нас должно получиться:
    Public Class Form1
        Inherits System.Windows.Forms.Form
    Windows Form Designer generated code
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            HScrollBar1.Width = 100
            TextBox1.Text = "Ширина полосы = 100"

        End Sub

    End Class

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

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

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

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

    RadioButton2.Hide()

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

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

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

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

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

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

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

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

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

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


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

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

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

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

    Button2.BackColor = Color.Yellow

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

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

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

          HScrollBar1.Width

    = 100

          TextBox1.Text

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

          RadioButton2.Hide()

          Button2.BackColor

    = Color.Yellow

    End Sub

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

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

    Рис. 1.20

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

    Аналогия. До сих пор все, что мы достигали в VB, нам удавалось легко. Захотели укоротить полосу прокрутки – раз! – и коротенькой строкой кода это сделали. Захотели спрятать элемент переключателя – раз! – и сделали это строкой, состоящей вообще из двух слов. Вам достаточно было знать простое название «инструмента», которым вы добивались цели – Width, Hide и т.д.
    Но не все в VB делается так просто.
    Помните сказку, где Ивану-царевичу нужно было разделаться с Кащеем Бессмертным? Для этого ему надо было переломить иглу. Но добраться до этой иглы было довольно трудно, потому что игла-то – в яйце, а яйцо – в утке, а утка – в зайце, а заяц – в ларце. Если ларец у вас в руках и вы знаете устройство этой «матрешки», тогда – другое дело. Вернее, полдела. Полдела, но не все дело. Потому что заяц из ларца выпрыгнет – его надо догнать, утка из зайца выскочит, да в небо – ее надо подстрелить и т.п. В общем – морока. Так ведь и не зря же! Через эту мороку мы многое поймем в программировании на VB.
    Если вы хотите в VB что-нибудь совершить какой-нибудь заковыристой «иглой», то, чтобы ее найти, вам нужно будет проделать весь путь вглубь «ларца». Мы уже отчасти столкнулись с этой ситуацией, когда в поисках «иглы» Yellow  вместо простого
    Button2.BackColor = Yellow
    нам пришлось писать более сложное
    Button2.BackColor = Color.Yellow.
    Здесь дополнительное слово Color – и есть то «яйцо», в котором находилась «игла» Yellow. Правда, «утку» и прочее VB нам простил, не потребовал. Но не всегда он бывает таким добрым. Нам нужно точно знать, как добраться до нужной «иголки». А также, когда нас прощают, а когда нет. И об этом наш разговор.
    Вглубь ларца. При программировании для платформы .NET «ларцом» является как раз упомянутая Библиотека классов .NET Framework. Открыв крышку этого ларца, мы увидим внутри два других ларца. Они называются пространствами имен. (не будем пока вникать в буквальный смысл этого названия, ибо сказано: «Хоть горшком назови, только в печь не сажай!»). У каждого пространства имен есть свое имя. Одно из двух упомянутых называется System, а другое – Microsoft. Каждое из них – настоящая кладовая возможностей!
    Создайте новый проект. Проделаем сейчас весь путь вглубь наших ларцов.
    Чтобы узнать, что находится внутри у пространств имен System и Microsoft, достаточно написать их имя с точкой. Создайте кнопку, дважды щелкните по ней. В получившейся заготовке процедуры мы и будем пробовать что-нибудь написать.

    View

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

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

    Вкладка Команды (окно диалога Настройка)
    Позволяет добавлять или изменять элементы управления в строке меню или панели инструментов. Допускается также изменение изображения кнопок и текста добавленных пользователем команд.
    Параметры вкладки
    Категории Отображает список различных категорий команд.
    Команды Отображает список элементов управления, доступных для категории, выбранной в списке категорий. Допускается перетаскивание команды с помощью мыши в нужную панель инструментов. Для добавления команды в меню следует перетащить ее на соответствующий заголовок меню, а затем в нужное место раскрывшегося меню.
    Описание Отображает краткую справку для выделенного элемента управления.
    Изменить выделенный объект Позволяет изменить выделенную команду.
    Сброс - Восстанавливает состояние команды по умолчанию.
    Удалить - Удаляет команду.
    Имя - Изменяет имя элемента управления. Клавиша быстрого вызова задается с помощью символа амперсант (&).
    Копировать значок на кнопке - Копирует изображение кнопки в буфер обмена.
    Вставить значок на кнопке - Вставляет изображение кнопки из буфера обмена.
    Восстановить значок на кнопке - Восстанавливает заданное по умолчанию изображение кнопки.
    Изменить значок на кнопке - Отображает окно диалога Редактор кнопок.
    Выбрать значок для кнопки - Отображает список значков, из которого следует выбрать новое изображение кнопки.
    Основной стиль - Для кнопок панели инструментов отображать только значок, для команд меню - значок и имя.
    Только текст (всегда) - Отображать только имя команды.
    Только текст (в меню) - Скрывает значок (если есть) для команды меню. Для кнопок панели инструментов не работает.
    Значок и текст - Отображает значок и имя для панелей инструментов. Для команд меню не работает.
    Вкладка Команды (окно диалога Настройка)
    Начать группу - Для панелей инструментов перед элементом управления помещает разделитель. Запрещена, если элемент управления находится в самом начале панели инструментов.
    |

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

    Вкладка Панели инструментов (окно диалога Настройка)
    Позволяет создавать, переименовывать, удалять или сбрасывать панели инструментов.
    Параметры вкладки
    Список Панели инструментов Отображает список встроенных в Visual Basic панелей инструментов, а также созданных пользователем. Если панель инструментов отображена, рядом с ней появляется отметка.
    Примечание. Строку меню скрыть невозможно. Ее можно только сбросить.
    Создать Отображает окно диалога Создание панели инструментов для ввода в поле Панель инструментов имени новой панели инструментов.
    Переименовать Отображает окно диалога Переименование панели для ввода нового имени панели инструментов. Команда доступна только для панелей, определенных пользователем.
    Удалить Удаляет определенную пользователем панель управления из текущего проекта. Команда доступна только для панелей, определенных пользователем.
    Сброс Отменяет любые изменения, внесенные во встроенные панели инструментов и восстанавливает их первоначальное состояние. Команда доступна только для встроенных панелей.

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

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

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

    Итак, у нас имеется проект Калькулятор, готовый к тому, чтобы из него можно было создавать инсталляционный пакет. В среде VS инсталляционный пакет создается так. Прежде всего создается некий новый проект особого типа, который будет инструментом для получения из проекта Калькулятор инсталляционного пакета. Затем программист производит в этом новом проекте определенные действия по настройке будущего инсталляционного пакета. Затем этот новый проект компилируется обычным образом. Результатом компиляции и является инсталляционный пакет.
    Рассмотрим эти шаги по порядку.
    Создаем инсталляционный проект. Запустите VS. Затем File ® New ® Project ® в левом поле окна создания проекта (Рис. 4.30) выберите Setup and Deployment Projects, а в правом – Setup Project  ® придумайте название для инсталляционного проекта, например, Мой калькулятор.® OK.
    Второй этап – создание инсталляционного пакета
    Рис. 4.30
    Инсталляционный проект и решение созданы. Инструмент создан (Рис. 4.31).
    Второй этап – создание инсталляционного пакета
    Рис. 4.31
    Если бы вы собирались инсталлировать Web-приложения, то вам нужно было бы выбрать Web Setup Project.
    Добавляем нужный проект. Теперь инструменту нужно объяснить, над чем он должен трудиться, чтобы получить инсталляционный пакет. Этим «предметом труда» и будет как раз наш проект Калькулятор. Нужно просто добавить проект Калькулятор в решение. Делается это привычным образом: File ® Add  Project ® Existing Project ®
    Таким образом, наше решение теперь состоит из двух проектов: инсталляционного проекта Мой калькулятор и самого проекта Калькулятор (Рис. 4.32). Очевидно, эти проекты не могут иметь одинаковые имена, иначе VB спутается. Более подробно о нескольких проектах в решении и о Solution Explorer написано в 21.3.
    Второй этап – создание инсталляционного пакета
    Рис. 4.32
    Определяем содержание будущей инсталляции. Следующий шаг. Выделите в Solution Explorer проект Мой калькулятор. Далее: Project ® Add ® Project Output. Перед вами возникнет окно (Рис. 4.33).
    Второй этап – создание инсталляционного пакета
    Рис. 4.33
    Проследите, чтобы вся информация в полях окна была такая же, как на рисунке. В этом окне мы указываем, что инсталляционный пакет нужно создавать именно для проекта Калькулятор (верхнее поле), и определяем содержание работы инсталляционного пакета (список в центре окна). Выделенный элемент Primary output означает, что результатом инсталляции будет то главное, что требуется, а именно: исполняемый файл приложения (exe) или библиотека (dll).  Однако результатом инсталляции могут быть и другие, вспомогательные объекты, например, файлы с исходным кодом программы. При необходимости вы можете выделить в списке все элементы, но сейчас нам достаточно Primary output.

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

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

    Рис. 4.34

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

    File System on Target Machine

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

    Application Folder

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

    User’s Desktop

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

    User’s Programs Menu

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

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

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

    [ProgramFilesFolder][Manufacturer]\[ProductName]

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

    [ProgramFilesFolder]\[ProductName]

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


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

    Рис. 4.35

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

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

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

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

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

    Рис. 4.36

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

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

    Рис. 4.37

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

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


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

    Рис. 4.38

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

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

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

    Рис. 4.39

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

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

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

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

    И все же хотелось бы быть еще лаконичнее. Оператор Imports позволяет опускать имена не только пространств имен, но и объектов, в них входящих: классов, модулей (не путать с абсолютной величиной), структур, перечислений. Поставим задачу опустить в нашей программе имена классов  Debug и Math. Для этого самой верхней строкой в окне кода вы должны записать оператор Imports:
    Imports   System.Diagnostics.Debug ,  System.Math
    После слова Imports через запятую перечисляются имена объектов (в нашем случае классов  Debug и Math) с обязательным указанием пространств имен, в которые они входят. Вот как теперь будет выглядеть наше окно кода (для краткости я оставил в процедуре только две строки):
    Imports
    System.Diagnostics.Debug, System.Math
    Public Class Form1
        Inherits System.Windows.Forms.Form
    Windows Form Designer generated code
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            WriteLine(3 + 2)
            WriteLine(Abs(-20))
        End Sub
    End Class
    Как видите, теперь вместо Debug.WriteLine вы можете писать WriteLine, а вместо Math.Abs –  просто Abs.
    А как же теперь с двусмысленностями, когда объекты с одинаковыми именами входят в разные пространства имен? В этом случае отказывайтесь от Imports или пользуйтесь его дополнительными возможностями, на которых я не останавливаюсь.
    В дальнейшем я буду писать фрагменты программ, где опуская, а где не опуская имена объектов. Там, где имена опущены, подразумевается, что использован соответствующий оператор Imports.

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

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

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

    Можно заставить компьютер в любой момент выполнения программы выводить нам какое-нибудь сообщение. Поместите внутрь какой-нибудь процедуры (пусть это будет процедура сложения) такой новый для нас оператор:
    MsgBox ("Привет всем!")
    Теперь каждый раз, как вы нажимаете на клавишу сложения, вы увидите на экране такое окно сообщения:
    Вывод сообщений – MsgBox
    Прочитав сообщение, щелкните ОК. Не щелкнув, вы не сможете продолжать работать с проектом. Окно сообщения специально сделано таким назойливым, чтобы программист вынужден был обратить на него внимание и прочитать, что там написано. Для этого писать туда нужно действительно важные вещи.
    Вскоре мы дадим окну сообщения реальное дело. А сейчас мы с ним только познакомились.

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

    Какие главные моменты нужно вывести из рассмотрения этих двух примеров? Их два:
    1. Библиотека классов .NET Framework включает в себя  колоссальное количество объектов, их свойств, методов и других элементов. До всех них можно добраться рассмотренным выше способом.
    2. Разберемся в строении двух написанных операторов. Каждый из них состоит из трех частей, разделенных точками. Пойдем справа налево:
  • Крайняя правая часть – это свойство или метод со скобками или без.

  • Левее через точку идет объект – «хозяин» этого метода или свойства.

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

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

    Window

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

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

    В Глава 1.  мы с вами ничего путного не создали, зато прошли с начала до конца весь путь создания проекта на VB.
    Сейчас мы поставим перед собой задачу сделать реальную вещь – калькулятор. Примерно такой же, какой имеется в Windows. Если вы его забыли, то в Windows (а отнюдь не в VS), выполните такие действия: Пуск ® Программы ® Стандартные ® Калькулятор. Посчитайте в нем что-нибудь. Как по вашему – много сил затратила фирма Microsoft на его создание? Калькулятор, который создадим мы, в смысле математики будет попроще, зато он будет красивым, снабжен музыкой, паролем и разными другими шутками.
    Начнем с того, что придумаем нашему калькулятору внешний вид (пока скромный) – см. Рис. 3.1.
    Задание на проект «Калькулятор»
    Рис. 3.1
    Идея такая – вы набираете в двух верхних текстовых полях первое и второе число, затем щелкаете по одной из кнопок и в нижнем текстовом поле получаете результат.

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

    VB допускает писать в одной строке несколько операторов, разделяя их двоеточиями. Например, вместо
    Button1.Width = 200
    Button2.Width = 100
    Button3.Width = 140
    можно написать вот так:
    Button1.Width = 200  :  Button2.Width = 100  :  Button3.Width = 140
    Это приятно экономит место по вертикали экрана.

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

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

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

    Как я уже писал во введении, VB входит в состав единой программы, которая называется среда программирования Visual Studio.NET и обеспечивает программисту возможность удобной разработки программ на VB и некоторых других языках. Поэтому, чтобы программировать на VB, вам нужно запустить Visual Studio.NET. Английские слова «Visual Studio» можно вольно перевести, как «Визуальная студия», то есть то место, где художник (программист) может творить свои произведения (программы) визуально (имеется в виду 1 этап – сборка вручную).
    В дальнейшем вместо слов «Visual Studio .NET» я часто для краткости  буду писать VS. Не путайте VS и VB. Когда я пишу VB, я имею в виду язык программирования, все то, что связано с самой программой, с правилами написания программного текста и его смыслом. Когда я пишу VS, я имею в виду среду программирования, то есть все то, что создает удобства и возможности программирования, загрузки, сохранения программ, их просмотра и настройки взаимодействия. Аналогии: VB – это бифштекс, VS – ресторан и официанты; VB – это мозг, VS – это тело; VB – это программа, VS – это компьютер. Однако, надо признаться, что не всегда удается четко сказать, где кончается VS и начинается VB.
    Если VS у вас на компьютере не установлена, читайте 4.1, а если установлена, то запускайте ее следующим образом:
    Нажмите на панели задач Windows кнопку «Пуск» (Start), в появившемся меню выберите «Программы» (Programs), затем в появившемся меню – Microsoft Visual Studio.NET,  а затем в появившемся меню – снова Microsoft Visual Studio.NET. (В дальнейшем вместо словесного описания щелчков мыши в меню я для краткости буду писать так: Пуск ® Программы ® Microsoft Visual Studio .NET ® Microsoft Visual Studio .NET).
    Если вы впервые запускаете VS, то в результате запуска на экране появляется главное окно VS со стартовой страницей (Start Page). Если у вас установлена Visual Studio .NET 2003, то окно имеет примерно такой вид, как на Рис. 1.1.
    Запускаем Visual Studio NET
    Рис. 1.1
    Если у вас установлена Visual Studio .NET, то окно имеет примерно такой вид, как на Рис. 1.2. Разница между окнами чисто внешняя.
    Запускаем Visual Studio NET
    Рис. 1.2
    Если вы запускаете VS не впервые, то в главном окне может и не быть стартовой страницы или она может иметь несколько другой вид. Сейчас это не важно, стартовая страница нам пока не понадобится. В любом случае вы можете почитать о ней в 4.3.
    В заголовке окна вы видите слова Microsoft Development Environment, что означает «Среда разработки программ фирмы Microsoft». Смысл этих слов такой же, что и у слов «Visual Studio».

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

    Каждый пункт меню – это объект. Чтобы убедиться в этом, щелкните в режиме проектирования по пункту «Прозрачный» и загляните в окно свойств. Вы видите, что у пункта меню есть свойства, как и у других объектов. Замените его имя (Name) на Menu_Прозрачный. Это для того, чтобы им было удобнее пользоваться при программировании.
    Теперь сделайте по пункту «Прозрачный» не одиночный, а двойной щелчок мышью. В окне кода возникнет заготовка процедуры, которая будет выполняться при выборе этого пункта меню:
    Private Sub Menu_Прозрачный_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Menu_Прозрачный.Click
    End Sub
    Слова  Menu_Прозрачный.Click  в правой части заголовка  означают, что речь идет о щелчке (Click) мыши по пункту Menu_Прозрачный. Остается написать код для выполняемого действия:
    Private Sub Menu_Прозрачный_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Menu_Прозрачный.Click
            Me.Opacity = 0.7
    End Sub
    Здесь словом Me обозначена форма, Opacity – ее свойство непрозрачности (см. 3.4.3). Число  0.7  обозначает величину 70%.
    Запустите проект, проверьте работу этого пункта меню.
    Аналогично организуем работу остальных 3 пунктов меню. Сначала дайте им имена:   Menu_Желтый,   Menu_Белый,   Menu_О_программе. Затем запрограммируйте их действия в окне кода:
    Private Sub Menu_Желтый_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Menu_Желтый.Click
            Число1.BackColor = Color.Yellow
            Число2.BackColor = Color.Yellow
            Результат.BackColor = Color.Yellow
    End Sub
    Private Sub Menu_Белый_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Menu_Белый.Click
            Число1.BackColor = Color.White
            Число2.BackColor = Color.White
            Результат.BackColor = Color.White
    End Sub
    Private Sub Menu_О_программе_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Menu_О_программе.Click
            MsgBox("Калькулятор создан в 2003 году")
    End Sub
    В первых двух процедурах речь идет о цвете трех текстовых полей: Число1,  Число2,  Результат. В операторах все привычно (см. 1.3.9). В последней процедуре создается окно сообщения (см. 3.7).
    Введя очередную процедуру, запускайте проект и проверяйте работу соответствующего пункта меню.
    Если вам не хочется щелкать по меню мышкой, вы можете для каждого пункта меню выбрать комбинацию клавиш клавиатуры с тем же действием. Эта комбинация называется Shortcut и выбирается установкой одноименного свойства пункта меню в режиме проектирования в окне свойств.
    Средствами VB можно создавать, преобразовывать и уничтожать меню, причем не только в режиме проектирования, но и в режиме работы. Но на этом я не буду останавливаться. Кроме обычных меню VB умеет создавать и контекстные меню (как это делать, рассказано в 18.9).

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

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


    Этот значок:
    Представляет:
    Значки, использующиеся в окне просмотра объектов и в окне модуля
    Свойство
    Значки, использующиеся в окне просмотра объектов и в окне модуля
    Свойство по умолчанию
    Значки, использующиеся в окне просмотра объектов и в окне модуля
    Метод
    Значки, использующиеся в окне просмотра объектов и в окне модуля
    Метод по умолчанию
    Значки, использующиеся в окне просмотра объектов и в окне модуля
    Событие
    Значки, использующиеся в окне просмотра объектов и в окне модуля
    Константу
    Значки, использующиеся в окне просмотра объектов и в окне модуля
    Модуль
    Значки, использующиеся в окне просмотра объектов и в окне модуля
    Класс
    Значки, использующиеся в окне просмотра объектов и в окне модуля
    Определяемый пользователем тип
    Значки, использующиеся в окне просмотра объектов и в окне модуля
    Глобальный объект
    Значки, использующиеся в окне просмотра объектов и в окне модуля
    Библиотеку
    Значки, использующиеся в окне просмотра объектов и в окне модуля
    Проект
    Значки, использующиеся в окне просмотра объектов и в окне модуля
    Встроенные ключевые слова и типы
    Значки, использующиеся в окне просмотра объектов и в окне модуля
    Перечислимый тип

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

    Для тренировки и для полезного знакомства с некоторыми функциями вам надлежит записать в процедуру еще несколько строк. Но сначала разберитесь в пояснениях, приведенных ниже, а уж потом записывайте. Вот как должна выглядеть процедура:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Debug.WriteLine(10 - 2 * 2 + 30 / 3)
            Dim a = 4 - 3
            Debug.WriteLine(a)
            Debug.WriteLine(a + 1000)
            Debug.WriteLine("Привет всем!")
            Dim b = System.Math.Abs(-20)
            Debug.WriteLine(b)
            Debug.WriteLine(System.Math.Abs(-20))
            Debug.WriteLine(Math.Abs(-20))
            Debug.Write(Microsoft.VisualBasic.Strings.Len("Мир"))
            Debug.Write(Strings.Len("Мир"))
            Debug.Write(Len("Мир"))
            Debug.WriteLine(Len("Война") + Math.Abs(-80) + a + 1)
    End Sub
    Когда вы запустите проект и нажмете кнопку, в окне Output вы увидите следующий результат:
    16
    1
    1001
    Привет всем!
    20
    20
    20
    33387
    Перед тем, как вы перейдете к чтению пояснений, прочтите очень полезный совет по работе над программами:
    Когда вы проверяете, как работает программа из книжки (например, только что приведенная) или как работает программа, созданная вами, никогда не вводите всю программу целиком, чтобы потом запустить ее и посмотреть, как она целиком работает.  Вводите и запускайте понемножку.
    Причина вот в чем. Каждый программист, даже самый опытный, при вводе программного текста допускает ошибки и просто описки. И большим грехом это не считает. На 100 строк программы ошибок 5-10 – это норма. Не все эти ошибки VB обнаружит. Поэтому, хотите вы этого или нет, запускать на выполнение вам придется программу ошибочную. Когда вы получите результаты работы ошибочной программы, они тоже, конечно, будут ошибочными. И вам, глядя на эти результаты, предстоит догадываться, в чем ошибки состоят. Трудно искать ошибки в длинной программе, да еще когда их там несколько!

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

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

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

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

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

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

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

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

            Dim a = 4 - 3

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

            Debug.WriteLine(a)

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

            Debug.WriteLine(a + 1000)

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

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

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

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

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

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


            Debug.WriteLine(b)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Создайте двухкнопочный проект с такой программой:
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim a As Integer
            a = 98
            Debug.WriteLine(a)
        End Sub
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim b As String
            b = "Привет всем!"
            Debug.WriteLine(b)
        End Sub
    Сравним две процедуры.
    Объявление Dim a As Integer говорит о том, что переменная a обязана иметь числовое значение, и поэтому в первой процедуре оператор  a=98  записывает в ячейку a число 98.
    Объявление Dim b As String говорит о том, что переменная b обязана иметь строковое (текстовое) значение. Это значит, что ее значением будет не число, а произвольная цепочка символов, например,       Привет всем!     или    рпН2Н(+*fD6:u   . Оператор b ="Привет всем!" записывает в ячейку b строку  Привет всем! . Оператор Debug.WriteLine(b), поскольку он обязан всегда выводить на экран содержимое ячейки b, выведет на экран текст  Привет всем!
    Обратите внимание, что в окне кода текст должен браться в двойные кавычки, а в памяти он хранится без кавычек и на экран выводится без кавычек. И когда вы его вводите в текстовое поле или в InputBox, то тоже вводите без кавычек.
    Информация в ячейке памяти под строковую переменную может в процессе выполнения программы меняться точно так же, как и в ячейке для числовой переменной. Например, при выполнении процедуры
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            Dim a As String
            a = "Минуточку!" : Debug.WriteLine(a) : a = "Здравствуйте!" : a = "До свидания!" : Debug.WriteLine(a)
        End Sub
    в ячейке a будут по очереди появляться строки
    Минуточку!              Здравствуйте!             До свидания!
    а на экран будут выведены строки:
    Минуточку!
    До свидания!

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

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

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

            Dim S As String = "беда"

            Dim T As String

            T = "По" & S

            Debug.WriteLine(T)

            Debug.WriteLine(T & T & T)

            Debug.WriteLine(T + T + T)

        End Sub

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

    Победа

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

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

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

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

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

    "По"  &  S

    T & T & T

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

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

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

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

            Dim a As Integer = 1234

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

        End Sub

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


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

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

    Задание 14.   

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

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

            Dim a As String = "Цикл"

            a = a & a

            Debug.WriteLine(a)

            a = a & a

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

        End Sub

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

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

            Dim a As String

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

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

        End Sub

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

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

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

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

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

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

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

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

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

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

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

    Рис. 3.24

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


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

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

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

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


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


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


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

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

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

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

            Плеер.Play()

    Здесь:

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


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


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



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

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

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

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

    End Sub

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

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

    End Sub

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

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

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

    End Sub

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

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

    End Sub

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

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

    End Sub

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

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

    End Sub

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

            Плеер.Play()

    End Sub

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

            Плеер.Stop()


    End Sub

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

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

            Плеер.PlayCount = 0

    End Sub

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

            Плеер.PlayCount = 1

    End Sub

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

            Плеер.Rate = 2

    End Sub

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

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

            Плеер.Rate

    = 1

    End Sub

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

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

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

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


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


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


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


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

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

    AboutBox

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

    Duration

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

    CurrentPosition

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

    Volume

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

    Show

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

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

    TextBox1.Text = Плеер.Duration

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

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


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

    Задание 4.   

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

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


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


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


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


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


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


  • Задание 5.   

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

    Меню Visual Basic

    Индикаторы на полях


    Индикаторы на полях
    в Visual Basic служат для отображения определенных операций во время редактирования программы. Если для строки определены несколько операций, появляются все соответствующие индикаторы.
    Индикаторы появляются в строке индикаторов на полях, вдоль левой границы окна модуля.
    Режим отображения строки индикаторов на полях задается на вкладке Формат окна диалога Параметры.


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

    Клавиши быстрого вызова в окне модуля

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


    Описание
    Клавиши быстрого вызова
    Открытие окна модуля
    F7
    Открытие окна Просмотр объектов
    F2
    Поиск
    CTRL+F
    Замена
    CTRL+H
    Поиск следующего вхождения образца
    F3
    Поиск предыдущего вхождения образца
    SHIFT+F3
    Вывод на экран следующей процедуры
    CTRL+СТРЕЛКА ВНИЗ
    Вывод на экран предыдущей процедуры
    CTRL+СТРЕЛКА ВВЕРХ
    Открытие описания процедуры
    SHIFT+F2
    Прокрутка содержимого окна на один экран вниз
    CTRL+PAGE DOWN
    Прокрутка содержимого окна на один экран вверх
    CTRL+PAGE UP
    Возврат в предыдущую позицию
    CTRL+SHIFT+F2
    Переход в начало модуля
    CTRL+HOME
    Переход в конец модуля
    CTRL+END
    Перемещение курсора на одно слово вправо
    CTRL+СТРЕЛКА ВПРАВО
    Перемещение курсора на одно слово влево
    CTRL+СТРЕЛКА ВЛЕВО
    Перемещение курсора в конец строки
    END
    Перемещение курсора в начало строки
    HOME
    Отмена последнего действия
    CTRL+Z
    Удаление текущей строки
    CTRL+Y
    Удаление символов до конца слова
    CTRL+DELETE
    Отступ
    TAB
    Удаление отступа
    SHIFT+TAB
    Снятие всех точек останова
    CTRL+SHIFT+F9
    Вывод контекстного меню
    SHIFT+F10
    Повторение последнего действия
    CTRL+Q

    Клавиши общего назначения в окне модуля

    Использование сочетаний клавиш в окне модуля:


    Сочетание клавиш
    Действие
    F1
    Вывод контекстной справки о функции, инструкции, методе, свойстве или событии.
    F2
    Открытие окна Просмотр объектов
    F9
    Установка и снятие точки останова.
    CTRL+SHIFT+F9
    Снятие всех точек останова.
    F5
    Запуск подпрограммы/формы или макроса.
    F8
    Шаг с заходом в процедуру.
    SHIFT+F8
    Шаг с выполнением процедуры (перешагивание через процедуру).
    CTRL+BREAK
    Прерывание выполнения программы Visual Basic.
    HOME
    Перемещение курсора в начало строки
    END
    Перемещение курсора в конец строки
    Двойной щелчок кнопки мыши на полосе разбивки
    Удаление линии разбивки.
    CTRL+J
    Вывод списка свойств/методов.
    CTRL+SHIFT+J
    Вывод списка констант.
    CTRL+I
    Вывод кратких сведений.
    CTRL+SHIFT+I
    Вывод сведений о параметре.
    CTRL+ПРОБЕЛ
    Завершение слова.
    SHIFT+F10
    Вызов контекстного меню.
    ALT+F5
    Запуск программы обработки ошибки или возврат ошибки в вызвавшую процедуру. Не влияет на установки по отслеживанию ошибок, сделанные на вкладке Общие окна диалога Параметры.
    ALT+F8
    Вход в процедуру обработки ошибки или возврат ошибки в вызвавшую процедуру. Не влияет на установки по отслеживанию ошибок, сделанные на вкладке Общие окна диалога Параметры.

    Клавиши перемещения в окне модуля

    Сочетания клавиш для перемещения в окне модуля:


    Сочетание клавиш
    Действие
    CTRL+F7
    Перемещение места вставки в поле Объект.
    SHIFT+F2
    Переход к описанию выделенной процедуры.
    CTRL+СТРЕЛКА ВНИЗ
    Вывод на экран следующей процедуры.
    CTRL+СТРЕЛКА ВВЕРХ
    Вывод на экран предыдущей процедуры.
    PAGE DOWN
    Вывод на экран следующей страницы текста программы.
    PAGE UP
    Вывод на экран предыдущей страницы текста программы.
    CTRL+SHIFT+F2
    Возврат в предыдущую позицию.
    CTRL+HOME
    Переход в начало модуля.
    CTRL+END
    Переход в конец модуля.
    CTRL+СТРЕЛКА ВПРАВО
    Перемещение курсора на одно слово вправо.
    CTRL+СТРЕЛКА ВЛЕВО
    Перемещение курсора на одно слово влево.
    END
    Перемещение курсора в конец строки
    HOME
    Перемещение курсора в начало строки.
    CTRL+PAGE DOWN
    Переход в конец текста текущей процедуры.
    CTRL+PAGE UP
    Переход в начало текста текущей процедуры.
    F6
    Переходы между верхней и нижней половиной окна (в разделенном окне).

    Команда "Прервать" (меню "Запуск")

    Эта команда останавливает выполнение программы и осуществляет переход в режим прерывания. Выполняемая в данный момент инструкция выводится в окне модуля со значком Команда в левом поле, если в окне диалога "Параметры" на вкладке "Формат" установлен флажок "Индикатор полей". Если приложение находится в состоянии ожидания события в холостом цикле (не выполняются никакие инструкции), инструкция не выделяется цветом, пока не произойдет событие.
    В некоторых случаях при внесении изменений в программу в режиме прерывания необходимо перезапустить ее, с тем чтобы эти изменения были учтены.
    Кнопка панели инструментов: Команда Клавиша быстрого вызова: CTRL+BREAK.

    Область Контрольные окна отладки

    Область Контрольные окна отладки
    Появляется автоматически, если в проекте определены контрольные выражения.
    Допускается:
    Изменение ширины столбцов, путем перемещения их границы с помощью мыши вправо, для увеличения, или влево, для уменьшения.
    Перемещение с помощью мыши выделенной переменной в область проверки окна отладки.
    Закрытие окна, путем щелчка мышью кнопки закрытия. Если эта кнопка заслонена другими окнами, следует щелкнуть заголовок окна, а затем кнопку закрытия.
    Элементы окна
    Выражение Список контрольных выражений со значком
    Область Контрольные окна отладки слева.
    Значение Список значений выражений в момент перехода в режим прерывания.
    После изменения данных в этом столбце следует нажать клавиши ENTER, СТРЕЛКА ВВЕРХ, СТРЕЛКА ВНИЗ, TAB, SHIFT+TAB или кнопку мыши для проверки введенных данных на допустимость. Если введенное значение некорректно, поле редактирования остается активным, а само значение выделяется. Также отображается окно сообщений, описывающее возникшую ошибку. Для отмены изменений следует нажать клавишу ESC.
    Тип Отображает типы выражений.
    Контекст Отображает контекст, в котором вычисляется контрольное выражение.
    Если при переходе в режим прерывания контекст выражения не попадает в область определения, текущее значение не отображается.
    Закрытие окна производится путем щелчка мышью кнопки закрытия. Если эта кнопка заслонена другими окнами, следует щелкнуть заголовок окна, а затем кнопку закрытия.

    Область Локальные окна отладки

    Область Локальные окна отладки
    Автоматически отображает все описанные в текущей процедуре переменные и их значения.
    Когда окно отладки открыто, его обновление происходит автоматически при каждом переключении из режима выполнения в режим прерывания, а также при перемещении по стеку вызова.
    Допускается:
    Изменение ширины столбцов, путем перемещения их границы с помощью мыши вправо или влево.
    Закрытие окна, путем щелчка мышью кнопки закрытия. Если эта кнопка заслонена другими окнами, следует щелкнуть заголовок окна, а затем кнопку закрытия.
    Элементы окна
    Кнопка Стек вызова Отображает окно диалога Стек вызова со списком процедур, находящихся в стеке вызова.
    Выражение Список имен переменных.
    Первая переменная в этом списке - особая переменная модуля, которая может быть развернута для просмотра всех переменных уровня текущего модуля. Для модулей класса определена системная переменная . Для стандартных модулей ее имя совпадает с именем модуля. В области Локальные не отображаются глобальные переменные, а также переменные из других проектов..
    Редактирование данных в этом столбце невозможно.
    Значение Список значений переменных.
    При выборе с помощью мыши значения из этого столбца курсор принимает форму буквы I. В этом режиме следует изменить данных, а затем нажать клавиши ENTER, СТРЕЛКА ВВЕРХ, СТРЕЛКА ВНИЗ, TAB, SHIFT+TAB или кнопку мыши для проверки введенных данных на допустимость. Если введенное значение некорректно, поле редактирования остается активным, а само значение выделяется. Также отображается окно сообщений, описывающее возникшую ошибку. Для отмены изменений следует нажать клавишу ESC.
    Все числовые переменные должны иметь значение. Строковые переменные могут быть пустыми.
    Допускается раскрытие и сворачивание переменных, имеющих подпеременные. Значение свернутой переменной не отображается, зато выводится значение каждой подпеременной. Слева от переменной помещается значок разворачивания
    Область Локальные окна отладки или значок сворачивания Область Локальные окна отладки ..
    Тип Отображает тип переменных. Данные в этом столбце не редактируются.

    Окна диалога Выбор рисунка, Выбор значка

    Окна диалога Выбор рисунка, Выбор значка
    Загружают существующий файл с картинкой или значком.
    Параметры окна диалога
    Папка
    Служит для выбора места нахождения нужной картинки.
    Переход на один уровень вверх
    Окна диалога Выбор рисунка, Выбор значка
    Отображает список папок или дисков, находящихся на один уровень выше текущей папки.
    Создать новую папку
    Окна диалога Выбор рисунка, Выбор значка
    Создает новую папку.
    Мелкие значки
    Окна диалога Выбор рисунка, Выбор значка
    Отображает папки и файлы в виде списка маленьких значков и имен.
    Сведения
    Окна диалога Выбор рисунка, Выбор значка
    Отображает папки и файлы в виде списка, включающего имя, размер, тип, дату и время последнего изменения.
    Имя файла
    Служит для ввода или выбора имени открываемого файла картинки.
    Тип файлов
    Служит для выбора типа файла. Файлы выбранного типа появляются в списке имен файлов.
    Графические файлы (*.bmp, *.dib, *.wmf, *.emf, *.ico, *.cur)-отображает все графические файлы.
    Растровые рисунки (*.bmp, *.dib)-отображает файлы формата .BMP и .DIB.
    Метафайлы (*.wmf, *.wmf)-отображает метафайлы Microsoft Windows.
    Значки (*.ico, *.cur)- отображает файлы со значками.
    Все файлы (*.*)-отображает файлы всех типов.
    Открыть
    Открытие выбранного файла.
    Отмена

    Окно диалога Ссылки

    Закрытие окна диалога без загрузки файла с картинкой.
    Окно диалога Ссылки
    Позволяет сделать объект другого приложения доступным в программа путем установки ссылки на объектную библиотеку этого приложения..
    Параметры окна диалога
    Доступные ссылки Отображает список доступных в проекте ссылок.
    После установки ссылки на объектную библиотеку, посредством пометки ячейки рядом с ее именем, методы и свойства определенных объектов отображаются в окне просмотра объектов.
    Если объекты из библиотеки, на которую делается ссылка, не используются, следует удалить соответствующую этой ссылке пометку, что уменьшит число разрешаемых Visual Basic ссылок и сократит время компиляции проекта. Ссылки на элементы, использованные в проекте, удалить нельзя.
    При удалении ссылки на используемый в проекте объект, следующее обращение к этому объекту приведет к ошибке.
    Неиспользуемые ссылки отображаются в алфавитном порядке.
    Примечание. Ссылки "Visual Basic для приложений" и "объекты и процедуры Visual Basic" удалить нельзя, поскольку они необходимы для работы Visual Basic.
    Кнопки приоритета Служат для перемещения ссылок вверх Окно диалога Ссылки и вниз Окно диалога Ссылки по списку. При обращении в программе к объекту, Visual Basic производит его поиск в порядке, в котором объекты отображаются в окне диалога Ссылки. Если два объекта имеют одинаковые имена, будет использовано описание, расположенное выше по списку в поле Доступные ссылки.
    Путь и язык Отображаю имя и путь ссылки, выделенной в поле Доступные ссылки , а также версию языка.
    Обзор Отображает окно диалога Добавление ссылки, в котором производится поиск ссылок в других папках и их добавление в поле Доступные ссылки для следующих типов:
    Библиотек типов (*.olb, *.tlb, *.dll)
    Исполняемых файлов (*.exe, *.dll)
    Элементов управления ActiveX (*.ocx)
    Всех файлов (*.*)
    Окно диалога Добавление ссылки является стандартным окном открытия файла.

    Окно модуля

    Окно модуля
    Окно модуля служит для просмотра, написания и редактирования программ Visual Basic. Допускается открытие такого числа окон, сколько имеется модулей. Это позволяет просматривать, и копировать текст между различными формами или модулями.
    Открытие окна просмотра возможно:
    Из окна базы данных, путем выбора формы или модуля и нажатия кнопки Открыть.
    Из окна UserForm, посредством двойного щелчка на элементе управления, или из формы, путем выбора команды Программа из меню Вид или нажатия клавиши F7.
    Допускается перемещение выделенного текста с помощью мыши:
    В другое место текущего окна модуля.
    В другое окно модуля.
    В окно проверки или отладки.
    В корзину.
    Элементы окна
    Поле объекта
    Отображает имя выделенного объекта. Нажатие стрелки справа от этого поля приведет к появлению списка всех связанных с формой объектов.
    Поле процедур/событий
    Отображает список всех распознаваемых Visual Basic событий для формы или элемента управления, выведенного в поле объекта. При выборе события в окне модуля отображается соответствующая этому событию процедура.
    Если в поле списка выведено (Общая область), в списке процедур отображаются все описания и все общие процедуры, созданные для данной формы. При редактировании текста модуля, поле процедуры отображает список всех общих процедур, определенных в модуле. В обоих случаях, текст выбранной в этом поле процедуры отображается в окне модуля.
    Все процедуры модуля выводятся в одном списке, упорядоченном по алфавиту. Выбор процедуры из раскрывающегося списка в верхней части окна модуля приводит к установке курсора на ее первую строку.
    Линия разбивки
    Перемещение этой линии вниз приводит к разделению окна модуля на две горизонтальные области, прокручиваемых отдельно. Это позволяет одновременно просматривать различные участки текста программы. Данные в полях объекта и процедуры в этом случае относятся к области, имеющей фокус.. Для закрытия второй области достаточно переместить линию разбивки в самый верх окна или дважды щелкнуть ее мышью.
    Полоса индикатора на полях
    Серая полоса вдоль левого края окна модуля, в которой отображаются индикаторы на полях.
    Окно модуля Значок Просмотр процедуры
    Отображает выделенную процедуру. В окне модуля в каждый момент времени отображается только одна процедура.
    Окно модуля Значок Просмотр всего модуля
    Отображает весь программный текст модуля.

    Окно отображения значения

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

    Окно проекта

    Окно проекта
    Отображает иерархический список проектов и всех входящих в них элементов.
    Элементы окнаОкно проекта
    Программа
    Отображает окно модуля, в котором возможно написание и изменение программы, связанной с выделенным элементом.Окно проекта
    Объект
    Отображает окно объектов для выделенного элемента, существующий документ или UserForm. Окно проекта
    Папки
    Скрывает или отображает папки объектов, всегда показывая при этом содержащиеся в них отдельные элементы.
    Список
    Отображает список всех загруженных проектов и элементов, входящих в каждый проект.
    Проект Окно проекта
    Проект и содержащиеся в нем элементы.
    UserForms Окно проекта
    Все файлы с расширением .frm, связанные с проектом.
    Документ
    Связанный с проектом документ. Например, в Microsoft Word, это документ Word.
    Модули
    Окно проекта
    Все файлы проекта с расширением .bas.
    Модули класса
    Окно проекта
    Все файлы проекта с расширением .cls.
    Ссылки
    Окно проекта
    Все ссылки на другие проекты, установленные с помощью команды Ссылки из меню Сервис.

    Окно проверки

    Окно проверки
    Позволяет:
    Вводить или вставлять из буфера обмена строку кода и затем по нажатию клавиши ENTER запускать ее.
    Копировать или вставлять текст программы из окна проверки в окно модуля, но не позволяет сохранять содержимое окна проверки.
    Окно проверки может быть перемещено в любую точку экрана, если только оно не было зафиксировано на вкладке Закрепление окна диалога Параметры.
    Чтобы закрыть окно достаточно щелкнуть кнопку закрытия. Если эта кнопка заслонена другими окнами, следует щелкнуть заголовок окна, а затем кнопку закрытия.
    Примечание. В режиме прерывания инструкция в окне проверки выполняется в контексте или в области определения, указанной в поле процедуры. Например, если ввести команду Print имяПеременной, будет отображено значение локальной переменной. Это совпадает с результатом, который был бы получен при вызове метода Print из прерванной процедуры.

    Окно свойств

    Окно свойств
    Во время разработки отображает список свойств и их значений для выделенных объектов. Допускается изменение этих свойств во время разработки. При выборе нескольких элементов управления, в окне свойств отображаются только их общие свойства.
    Элементы окна
    Поле объектов
    Отображает список выделенных объектов. Видны объекты только активной формы. При выборе нескольких элементов управления, на вкладках списков свойств отображаются только их общие свойства и значения, основанные на значении свойств первого выделенного объекта.
    Вкладки списков свойств
    По алфавиту - Список всех свойств и их текущих значений, которые могут быть изменены во время разработки, для выделенного объекта отсортированный по алфавиту. Для изменения значения свойства следует выбрать его имя и ввести или выбрать новое значение.
    По категориям - Список всех свойств для выделенного объекта, отсортированный по категории. Например, свойства ЦветФона, Подпись и ЦветТекста находятся в категории Оформление. Возможно сворачивание списка до уровня категорий или его раскрытие до уровня свойств. При сворачивании или раскрытии списка, слева от имени категории появляется значок плюс (+) или минус (-).

    Типы данных, отображаемые в области Локальные окна отладки

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


    Тип данных
    Состояние по умолчанию
    Currency
    Отображается значение
    Double
    Отображается значение
    Integer
    Отображается значение
    Long
    Отображается значение
    Single
    Отображается значение
    String
    Отображается значение
    UDT
    Значение не отображается. Редактирование невозможно. Свернуто.
    Variant
    Отображается значение
    Object
    Значение не отображается. Редактирование невозможно. Свернуто.
    Decimal
    Отображается значение
    Array
    Значение не отображается. Редактирование невозможно. Свернуто.

    Вкладка Общие (окно диалога Свойства базы данных)

    Вкладка Общие (окно диалога Свойства базы данных)
    Определяет параметры текущего проекта Visual Basic. Имя проекта отображается в заголовке.
    Параметры вкладки
    Имя проекта Определяет компонент в реестре Windows и в просмотре объектов. Необходимо, чтобы имя было уникальным.
    Имя проекта является именем библиотеки типов для компонента. Библиотека типов или TypeLib содержит описание объектов и интерфейса, представляемых компонентом.
    Оно используется также для задания имен классов. Сочетание имени проекта и имени класса иногда называют полным именем класса или программным идентификатором. Полное имя класса может понадобиться для правильного указания того, что объект принадлежит компоненту.
    Описание проекта Устанавливает текст описания, выводимый в области описания в нижней части окна просмотра объектов.
    Файл контекстной справки Отображает имя файла справки, закрепленного за проектом.
    Идентификатор справки Отображает список идентификаторов контекста, используемых для вывода нужного раздела справки при нажатии кнопки
    Вкладка Общие (окно диалога Свойства базы данных), в то время как в окне просмотра объектов выделена объектная библиотека.
    Аргументы условной компиляции Список описаний констант, используемых для условной компиляции.

    Меню Visual Basic

    Клавиши быстрого вызова команд меню в окне модуля

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


    Сочетание клавиш
    Действие
    CTRL+P
    Печать
    CTRL+Z
    Отменить
    CTRL+V
    Вставить
    DEL или DELETE
    Удалить
    CTRL+F
    Найти
    F3
    Найти далее
    CTRL+H
    Заменить
    TAB
    Увеличить отступ
    SHIFT+TAB
    Уменьшить отступ
    CTRL+J
    Список свойств/методов
    CTRL+SHIFT+J
    Список констант
    CTRL+I
    Краткие сведения
    CTRL+SHIFT+I
    Сведения о параметре
    CTRL+ПРОБЕЛ
    Завершить слово
    SHIFT+F2
    Описание
    CTRL+SHIFT+F2
    Вернуться к последней позиции
    F2
    Просмотр объектов
    CTRL+G
    Окно отладки
    CTRL+R
    Окно проекта
    F4
    Окно свойств
    F8
    Шаг с заходом
    SHIFT+F8
    Шаг с обходом
    CTRL+F8
    Выполнить до текущей позиции
    SHIFT+F9
    Контрольное значение
    F9
    Точка останова
    CTRL+SHIFT+F9
    Снять все точки останова
    F5
    Запуск подпрограммы/формы или макроса
    CTRL+BREAK
    Прерывание программы
    SHIFT+F10
    Вызов контекстного меню
    CTRL+M
    Импорт файла
    CTRL+E
    Экспорт файла

    Клавиши быстрого вызова в окне отладки

    В окне отладки используются следующие сочетания клавиш:


    Сочетание клавиш
    Действие
    SHIFT+ENTER
    Отображение выделенного контрольного выражения.
    CTRL+W
    Отображение окна диалога Изменение контрольного значения.
    ENTER
    Отображение или скрытие структуры выделенного контрольного значения при наличии слева от него знака плюс (+) или минус (-).
    F2
    Открытие окна Просмотр объектов.
    SHIFT+F10
    Вызов контекстного меню

    Клавиши быстрого вызова в окне проекта

    Клавиши, используемые в окне проекта:


    Сочетание клавиш
    Действие
    ENTER
    Открытие выделенного в списке файла либо отображение или скрытие его структуры.
    SHIFT+ENTER
    Открытие для выделенного файла окна модуля.
    F7
    Открытие для выделенного файла окна модуля.
    SHIFT+F10
    Вызов контекстного меню.
    HOME
    Выделение первого файла в списке.
    END
    Выделение последнего файла в списке.
    СТРЕЛКА ВПРАВО
    Раскрытие списка и выделение записи при каждом нажатии.
    СТРЕЛКА ВЛЕВО
    Выделение записи в списке и перемещение на уровень вверх при каждом нажатии, пока не достигнут самый верхний уровень.
    СТРЕЛКА ВВЕРХ
    Перемещение вниз по списку на одну запись.
    СТРЕЛКА ВНИЗ
    Перемещение вверх по списку на одну запись

    Клавиши быстрого вызова в окне проверки

    Использование сочетаний клавиш в окне отладки:


    Сочетание клавиш
    Действие
    ENTER
    Запуск выбранной строки программы.
    CTRL+C
    Копирование выделенного текста в буфер обмена.
    CTRL+V
    Вставка содержимого буфера обмена в место вставки.
    CTRL+X
    Удаление выделенного текста в буфер обмена.
    CTRL+L
    Отображение окна диалога Стек вызова (только в режиме прерывания).
    F5
    Продолжение выполнения программы.
    F8
    Шаг с заходом в процедуру.
    SHIFT+F8
    Шаг с выполнением процедуры (перешагивание через процедуру).
    DELETE или DEL
    Удаление выделенного текста без помещения в буфер обмена
    F2
    Открытие окна Просмотр объектов.
    CTRL+ENTER
    Вставка символа возврат каретки.
    CTRL+HOME
    Перемещение курсора в верхнюю строку окна проверки.
    CTRL+END
    Перемещение курсора в нижнюю строку окна проверки.
    SHIFT+F10
    Вызов контекстного меню
    ALT+F5
    Запуск программы обработки ошибки или возврат ошибки в вызвавшую процедуру. Не влияет на установки по отслеживанию ошибок, сделанные на вкладке Общие окна диалога Параметры.
    ALT+F8
    Вход в процедуру обработки ошибки или возврат ошибки в вызвавшую процедуру. Не влияет на установки по отслеживанию ошибок, сделанные на вкладке Общие окна диалога Параметры.

    Клавиши быстрого вызова в окне свойств

    Клавиши, используемые в списке свойств окна свойств:


    Сочетание клавиш
    Действие
    PAGE DOWN
    Перемещение по списку свойств вниз.
    PAGE UP
    Перемещение по списку свойств вверх.
    СТРЕЛКА ВНИЗ
    Перемещение по списку свойств вниз на одну строку.
    СТРЕЛКА ВВЕРХ
    Перемещение по списку свойств вверх на одну строку
    СТРЕЛКА ВПРАВО
    Перемещение по списку свойств вниз на одно свойство
    СТРЕЛКА ВЛЕВО
    Перемещение по списку свойств вверх на одно свойство
    END
    Перемещение к последнему свойству в списке.
    HOME
    Перемещение к первому свойству в списке
    ALT+F6
    Переключение между двумя последними активными окнами.
    TAB
    Перемещения места вставки между полями свойства, значения свойства и объекта.
    CTRL+SHIFT+БУКВА
    Переход к свойству, начинающемуся на символ БУКВА.
    Двойное нажатие кнопки мыши
    Циклическое изменение перечисляемого значения свойства или передача фокуса на поле значения свойства для других типов.
    Клавиши, используемые в поле значения свойства в окне свойств:


    Сочетание клавиш
    Действие
    CTRL+Z
    Отмена последней операции редактирования в текущей строке.
    CTRL+C
    Копирование выделенного текста в буфер обмена.
    CTRL+X
    Удаление выделенного текста в буфер обмена.
    DEL или DELETE
    Удаление выделенного текста без помещения в буфер обмена
    CTRL+V
    Вставка содержимого буфера обмена в место вставки.
    SHIFT+TAB
    Перемещение фокуса между полем объекта и активной вкладкой свойств.
    TAB
    Перемещение фокуса между полем объекта, активной вкладкой свойств, свойством и его значением.
    ESC
    Отмена изменения свойства
    CTRL+SHIFT+БУКВА
    Переход к следующему свойству в списке, начинающемуся на символ БУКВА.
    Клавиши, используемые в поле перечислимого значения свойства в окне свойств:

    Сочетание клавиш
    Действие
    ALT+СТРЕЛКА ВНИЗ
    Открытие списка значений.
    ALT+СТРЕЛКА ВВЕРХ
    Закрытие списка значений
    Клавиши, используемые для установки значений свойств ЦветФона, ЦветТекста, ЦветЗаливки и ЦветГраницы в окне свойств:


    Сочетание клавиш
    Действие
    ALT+СТРЕЛКА ВНИЗ
    Отображение цветовой палитры.
    ALT+СТРЕЛКА ВВЕРХ
    Скрытие цветовой палитры.
    Клавиши, используемые для установки значений свойств Значок и Рисунок в окне свойств:


    Сочетание клавиш
    Действие
    ALT+СТРЕЛКА ВНИЗ
    Отображает окно диалога Загрузить значок или Загрузить рисунок.
    ALT+СТРЕЛКА ВВЕРХ
    Отображает окно диалога Загрузить значок или Загрузить рисунок.

    Клавиши редактирования текста программы

    Следующие сочетания клавиш используются для редактирования текста программы в окне модуля:


    Сочетание клавиш
    Действие
    CTRL+C
    Копирование выделенного текста в буфер обмена.
    CTRL+X
    Удаление выделенного текста в буфер обмена.
    DELETE или DEL
    Удаление выделенного текста без помещения в буфер обмена
    CTRL+V
    Вставка содержимого буфера обмена в место вставки.
    CTRL+Z
    Отмена последней операции редактирования в текущей строке.
    CTRL+Y
    Удаление текущей строки в буфер обмена.
    CTRL+DELETE
    Удаление символов до конца слова.
    CTRL+BACKSPACE
    Удаление символов до начала слова.
    F3
    Поиск следующего вхождения образца. Если перед этим не был выполнен поиск, выводится окно диалога Поиск.
    SHIFT+F3
    Поиск предыдущего вхождения образца. Если перед этим не был выполнен поиск, выводится окно диалога Поиск.
    SHIFT+TAB
    Удаление отступа.

    Меню Visual Basic

    Глобальные клавиши быстрого вызова

    Следующие сочетания клавиш используются во всех окнах Visual Basic:

    Сочетание клавиш
    Действие
    F5
    Запуск подпрограммы/формы или макроса.
    F8
    Шаг с заходом в процедуру.
    SHIFT+F8
    Выполнение одной строки инструкций, без входа в процедуры.
    CTRL+BREAK
    Прерывание выполнения программы Visual Basic.
    CTRL+G
    Отображение она проверки
    ALT+F5
    Запуск программы обработки ошибки или возврат ошибки в вызвавшую процедуру. Не влияет на установки по отслеживанию ошибок, сделанные на вкладке Общие окна диалога Параметры.
    ALT+F8
    Вход в процедуру обработки ошибки или возврат ошибки в вызвавшую процедуру. Не влияет на установки по отслеживанию ошибок, сделанные на вкладке Общие окна диалога Параметры.
    CTRL+TAB
    Переключение между окнами.

    Клавиши быстрого вызова в окне UserForm

    В окне UserForm используются следующие сочетания клавиш:


    Сочетание клавиш
    Действие
    SHIFT+CTRL+БУКВА
    Выбор свойства из списка свойств в окне свойств.
    БУКВА
    Ввод значения выбранного свойства в окне свойств.
    F7
    Открытие для выделенного объекта окна модуля.
    DEL или DELETE
    Удаление выделенных элементов удаления без помещения в буфер обмена.
    CTRL+Z
    Отмена удаления элементов управления.
    TAB
    Циклическое перемещение вперед от одного элемента управления к другому в последовательности перехода.
    SHIFT+TAB
    Циклическое перемещение назад от одного элемента управления к другому в последовательности перехода.
    CTRL+НАЖАТИЕ КНОПКИ МЫШИ
    Добавление или исключение элемента управления из выделенной группы.
    НАЖАТИЕ КНОПКИ МЫШИ+ПЕРЕМЕЩЕНИЕ МЫШИ
    Выбор нескольких элементов управления.
    SHIFT+ НАЖАТИЕ КНОПКИ МЫШИ
    Выбор нескольких элементов управления.
    CTRL+ НАЖАТИЕ КНОПКИ МЫШИ +ПЕРЕМЕЩЕНИЕ МЫШИ
    Добавление или исключение элементов управления из выделенной группы.
    F4
    Отображение окна свойств (только во время разработки).
    SHIFT+F10
    Вызов контекстного меню.
    CTRL+J
    Помещение элементов управления на передний план (влияет на перекрывающиеся элементы управления только во время разработки).
    CTRL+K
    Помещение элементов управления на задний план (влияет на перекрывающиеся элементы управления только во время разработки).
    Чтобы снять выделение со всех элементов управления следует выбрать мышью форму. Чтобы выбрать отдельные элементы из выделенной группы, следует снять выделение с группы, а затем с помощью нажатия и удержания клавиши CTRL, кнопки мыши и перемещения мыши выделить нужные элементы.

    Команда Дополнительные элементы... (контекстное меню)

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

    Команда Дополнительные элементы... (меню "Сервис")

    Отображает окно диалога Дополнительные элементы, используемое для добавления на панель элементов дополнительных элементов управления и вставляемых объектов (таких как документ Microsoft Word).

    Команда Файл (меню "Вставка")

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

    Команда Импорт файла и Экспорт файла (меню "Файл")

    Добавляет в проект существующие модули и формы или сохраняет модули и формы проекта в виде отдельного файла.
    Импорт файла Отображает окно диалога импорта файлов, в котором в проект добавляется существующие форма или модуль. В проект добавляется копия исходного файла, а сам файл остается нетронутым. При добавлении формы или модуля, имя которых совпадает с существующим в проекте, к имени файла добавляется число.
    Импортированные компоненты отображаются в окне проекта.
    Кнопка панели инструментов: Команда Импорт файла и Экспорт файла (меню . Клавиша быстрого вызова: CTRL+M.
    Экспорт файла Отображает окно диалога экспорта файла для извлечения из проекта активных формы или модуля. Файл копируется во внешний.
    Команда недоступна если в окне проекта не выбран файл.
    Кнопка панели инструментов: Команда Импорт файла и Экспорт файла (меню . Клавиша быстрого вызова: CTRL+E.

    Команда Изменить <Элемент> (контекстное меню)

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

    Команда Макрос (меню Сервис)

    Отображает окно диалога Макрос для создания, изменения, удаления и запуска макросов.

    Команда Объект (меню "Вставка")

    Вставляет в активную форму объект.
    Недоступна, если нет открытых форм, а также в режиме прерывания.
    Кнопка панели инструментов: Команда Объект (меню .

    Команда "Параметры" (меню "Сервис")

    Команда выводит окно диалога "Параметры", где возможен выбор вкладки для установки параметров среды программирования Visual Basic.
    Вкладки
    Редактор
    Формат
    Общие
    Закрепление

    Команда Переименовать (контекстное меню)

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

    Команда Подогнать размер (меню "Формат")

    Изменяет высоту и ширину объекта так, чтобы в нем полностью помещалось содержимое.
    Кнопка панели инструментов: Команда Подогнать размер (меню

    Команда Порядок перехода (меню "Вид")

    Для активной формы отображает окно диалога Последовательность перехода.
    Кнопка панели инструментов: Команда Порядок перехода (меню

    Команда <приложение> (меню "Вид")

    Помещает приложение на передний план редактора Visual Basic для удобного просмотра. Название команды изменяется на имя приложения.
    Клавиша быстрого вызова: ALT+F11.

    Команда Процедура (меню "Вставка")

    Добавляет в активный модуль процедуру Sub, процедуру Function или процедуру Property.
    Доступна только в окне модуля.
    Кнопка панели инструментов: Команда Процедура (меню .

    Команда Сброс <проект> (меню Запуск)

    Очищает стек вызова, а также переменные уровня модуля..
    Кнопка панели инструментов: Команда Сброс <проект> (меню Запуск).

    Команда Сохранить <документ> (меню "Файл")

    Сохраняет текущий проект, а также все его компоненты - формы и модули - в виде документа.
    Кнопка панели инструментов: Команда Сохранить <документ> (меню . Клавиша быстрого вызова: CTRL+5.

    Команда Создать страницу (контекстное меню)

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

    Команда Ссылки (меню "Сервис")

    Отображает окно диалога Ссылки, где возможно добавление в проект ссылки на объектную библиотеку или библиотеку типов.. Это делает объекты других приложений доступными в программе. При установке ссылки соответствующие объекты появляются в окне просмотра объектов.
    Допускается добавление ссылок на другие загруженные или сохраненные проекты. Если проект не был сохранен, он отображается в виде "НЕСОХРАНЕННЫЙ: <ИмяПроекта>" и установка ссылок на него невозможна.
    Команда доступна только во время разработки.

    Команда Свойства <имя проекта>... (меню "Сервис")

    Отображает окно диалога свойств проекта, используемое для установки защиты и необходимых параметров проекта.
    Кнопка панели инструментов: Команда Свойства <имя проекта>... (меню .

    Команда Удалить <Элемент> (контекстное меню)

    Удаляет выделенный элемент панели элементов. Для добавления элемента служит команда Дополнительные элементы... контекстного меню.

    Команда Удалить <Элемент>... (меню Файл)

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

    Команда Закрыть и вернуться в <приложение> (меню "Файл")

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

    Команды Группировать и Разделить (меню "Формат")

    Группирует или разгруппирует выделенные объекты.
    Группировать Создает группу.
    Примечание. Сохраняется возможность выбора одного элемента группы и изменение его свойств.
    Примечание. Не допускается создание групп внутри группы (вложенная группировка).
    Кнопка панели инструментов: Команды Группировать и Разделить (меню .
    Разделить Разгруппирует ранее сгруппированные объекты,.
    Кнопка панели инструментов: Команды Группировать и Разделить (меню .

    Команды Импорт страницы и Экспорт страницы (контекстное меню)

    Импортирует и экспортирует страницы.
    Импорт страницы Отображает окно диалога Импорт страницы, где выполняется поиск и выбор станицы, добавляемой к панели элементов.
    Окно диалога Импорт страницы является стандартным окном открытия файла в Windows.
    Экспорт страницы Отображает окно диалога Экспорт страницы, где для экспортируемой из панели элементов страницы задается новое имя и местоположение.
    Окно диалога Экспорт страницы является стандартным окном сохранения файла в Windows.

    Команды Конструктор и Выход из конструктора (меню "Запуск")

    Включает или выключает для проекта режим конструктора. Режим конструктора - период времени, в течении которого в проекте не выполняется ни одна программа. Выход из этого режима может быть осуществлен с помощью выполнения макроса или использования области проверки.
    Конструктор Выполняет переход в режим конструктора и изменяется на Выход из конструктора.
    Выход из конструктора Выполняет выход из режима конструктора и очищает все переменные уровня модуля в проекте.
    Кнопка панели инструментов: Команды Конструктор и Выход из конструктора (меню

    Команды Копировать и Переместить (контекстное меню)

    Позволяет использовать операции перемещения с помощью мыши над элементами управления в форме. С помощью правой кнопки мыши следует выбрать элемент управления и затем, не отпуская кнопки, переместить его в нужное положение. После отпускания кнопки появляется контекстное меню, содержащее команды.
    Копировать Копирует выделенный элемент управления в новое место.
    Переместить Перемещает выделенный элемент управления в новое место.
    Отменить Отменяет операцию.
    Справка по Microsoft Visual Basic
    Если помощник по Office не виден, отображает его и окно подсказок. Если помощник виден, отображает окно подсказок.
    Кнопка панели инструментов: Команды Копировать и Переместить (контекстное меню). Клавиша быстрого вызова: F1.
    Вызов справки
    Отображает окно диалога справки по Visual Basic, в котором возможен поиск по алфавитному указателю или полный поиск текста.
    Кнопка панели инструментов: Команды Копировать и Переместить (контекстное меню).
    Microsoft на Web
    Выполняет соединение с Интернет для получения дополнительных сведений и поддержки.
    Для использования этой команды необходимо иметь модем или быть подключенным к Интерент и средству просмотра Worldwide Web.
    О программе
    Отображает окно диалога, содержащее номер версии, сведения об авторстве и информацию о системе.

    Команды Модуль и Модуль класса (меню "Вставка")

    Модуль Создает новый стандартный модуль и добавляет его в активный проект.
    Кнопка панели инструментов: Команды Модуль и Модуль класса (меню
    Модуль класса Создает новый модуль класса и добавляет его в активный проект.
    Кнопка панели инструментов: Команды Модуль и Модуль класса (меню

    Команды Очистить и Удалить (меню Правка)

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

    Команды Упорядочить кнопки (меню "Формат")

    Располагает выделенные кнопки вдоль горизонтального или вертикального края формы.
    Упорядочить по нижнему краю Располагает кнопки вдоль нижней границы формы с равными промежутками.
    Кнопка панели инструментов: Команды Упорядочить кнопки (меню
    Упорядочить по правому краю Располагает кнопки вдоль правой границы формы с равными промежутками.
    Кнопка панели инструментов: Команды Упорядочить кнопки (меню

    Команды Запуск подпрограммы/формы, Продолжить и Запуск макроса (меню "Запуск")

    Запуск подпрограммы/формы Если курсор находится в процедуре, запускает текущую процедуру. Если же активна форма, будет запущена она. В режиме прерывания команда изменяется на Продолжить.
    Если ни окно модуля, ни UserForm не активны, название команды изменяется на Запуск макроса.
    Продолжить Возобновляет выполнение текущей процедуры или формы.
    Запуск макроса Запускает макрос.

    Окно диалога Импорт файла

    Окно диалога Импорт файла
    Позволяет выбрать импортируемый файл.
    Параметры окна диалога
    Папка
    Служит для выбора папки, в которой находится открываемый проект.
    Переход на один уровень вверхОкно диалога Импорт файла
    Отображает список папок или дисков, находящихся на один уровень выше текущей папки.
    Создать новую папкуОкно диалога Импорт файла
    Создает новую папку.
    Мелкие значкиОкно диалога Импорт файла
    Отображает папки и проекты в виде списка маленьких значков и имен.
    СведенияОкно диалога Импорт файла
    Отображает папки и проекты в виде списка, включающего значок, имя, размер, тип, дату и время последнего изменения.
    Имя файла
    Служит для ввода или выбора имени импортируемого файла.
    Тип файлов
    Служит для выбора типа файла; по умолчанию задается тип Проект Visual Basic (*.frm, *.bas, *.cls). Файлы выбранного типа появляются в списке имен файлов.
    Открыть
    Открытие выбранного файла.
    Отмена
    Закрытие окна диалога без открытия проекта.

    Окно диалога Экспорт файла

    Окно диалога Экспорт файла
    Служит для задания имени и местоположения экспортируемого файла.
    Параметры окна диалога
    Папка
    Служит для выбора папки, в которой будет сохранен файл.
    Переход на один уровень вверх Окно диалога Экспорт файла
    Отображает список папок или дисков, находящихся на один уровень выше текущей папки.
    Создать новую папкуОкно диалога Экспорт файла
    Создает новую папку.
    СведенияОкно диалога Экспорт файла
    Отображает папки и файлы в виде списка, включающего значок, имя, размер (только для документов), тип, дату и время последнего изменения.
    Мелкие значкиОкно диалога Экспорт файла
    Отображает папки и файлы в виде списка маленьких значков и имен.
    Имя файла
    Если не указано расширение имени файла, Visual Basic автоматически добавляет расширение по умолчанию: .frm для форм, .bas для модулей, .cls для модулей класса.
    Тип файлов
    Служит для выбора типа файла:
    Файлы форм (*.frm) - отображает все формы.
    Файлы программ на Basic (*.bas) - отображает все стандартные модули.
    Файлы классов (*.cis) - отображает все модули класса.

    Окно диалога Макрос

    Окно диалога Макрос
    Позволяет запускать, изменять и удалять выделенный макрос. Допускается также создание макроса.
    Параметры окна диалога
    Имя макроса Содержит имя выделенного макроса или пусто, если в поле Макросы нет макросов.
    Макросы Отображает список всех макросов в проекте, выделенном в поле Макросы в.
    Макросы в Отображает список доступных проектов.
    Выполнить Запускает выделенный макрос.
    Шаг Выделяет цветом первую строку макроса и помещает в ней маркер текущей выполняемой строки.
    Изменить Открывает окно модуля с выделенным макросом, в котором возможно его изменение.
    Создать В окне модуля открывает модуль для создания нового макроса.
    Удалить Удаляет выделенный макрос из проекта.

    Окно диалога настройки элемента управления

    Позволяет задать текст подсказки и изменить значок элемента управления.
    Параметры окна диалога
    Текст всплывающей подсказки Содержит текст подсказки для данного элемента.
    Просмотр Отображает выбранный для элемента управления значок.
    Изменить рисунок Отображает окно диалога, в котором возможно изменение значка.
    Загрузить рисунок Отображает окно диалога Выбор рисунка. Это окно является стандартным окном открытия файла.

    Окно диалога Параметры

    Окно диалога Параметры
    Служит для изменения заданных по умолчанию настроек среды разработчика Visual Basic.
    Окно диалога Параметры содержит следующие вкладки:
    Редактор
    Формат
    Общие
    Закрепление

    Окно диалога порядка страниц

    Окно диалога порядка страниц
    Окно диалога порядка страниц
    Служит для изменения порядка страниц в наборе вкладок.
    Параметры окна диалога
    Порядок страниц Отображает список страниц-вкладок в порядке слева направо.
    Вверх При каждом нажатии перемещает выделенную страницу на одну позицию вверх.
    Вниз При каждом нажатии перемещает выделенную страницу на одну позицию вниз.

    Панель инструментов Отладка

    Панель инструментов Отладка
    Содержит кнопки для быстрого вызова наиболее часто используемых при отладке команд меню.
    Для выполнения действия, закрепленного за кнопкой, следует нажать ее. Для отображения краткой справки о кнопках панели инструментов достаточно установить флажок Всплывающие подсказки на вкладке Общие окна диалога Параметры.
    Кнопки панели инструментовПанель инструментов Отладка
    Режим конструктора
    Включает и выключает режим конструктора.Панель инструментов Отладка
    Запуск подпрограммы/формы или Запуск макроса
    Если курсор находится внутри процедуры - запускает процедуру, если активна UserForm - запускает UserForm, иначе запускает макрос.
    Панель инструментов Отладка
    Прервать
    Останавливает выполнение программы и выполняет переход в режим прерывания.Панель инструментов Отладка

    Сброс <проекта>
    Очищает стек выполнения, переменные уровня модуля и выполняет сброс проекта.Панель инструментов Отладка
    Точка останова
    Устанавливает или удаляет в текущей строке точку останова. Панель инструментов Отладка

    Шаг с заходом
    Шаг с заходом в процедуру.Панель инструментов Отладка
    Шаг с обходом
    Шаг с выполнением процедуры (перешагивание через процедуру).Панель инструментов Отладка
    Шаг с выходом
    Выполняет оставшиеся инструкции процедуры, в которой находится текущая точка выполнения.Панель инструментов Отладка
    Область Локальные
    Отображает область Локальные окна отладки.Панель инструментов Отладка
    Область проверки
    Отображает область проверки окна отладки.Панель инструментов Отладка
    Область Контрольные
    Отображает область Контрольные окна отладки.Панель инструментов Отладка
    Контрольное значение
    Отображает окно диалога Контрольное значение, в котором выводится текущее значение выделенного выражения.Панель инструментов Отладка
    Стек вызова
    Отображает окно диалога Стек вызова, в котором выводится список активных вызовов процедур (запущенных, но еще не завершившихся).

    Панель инструментов Правка

    Панель инструментов Правка
    Содержит кнопки для быстрого вызова наиболее часто используемых при редактировании текста программы команд меню.
    Для выполнения действия, закрепленного за кнопкой, следует нажать ее. Для отображения краткой справки о кнопках панели инструментов достаточно установить флажок Всплывающие подсказки на вкладке Общие окна диалога Параметры.
    Кнопки панели инструментовПанель инструментов Правка
    Список свойств/методов
    В окне модуля выводит раскрывающийся список, содержащий доступные для объекта свойства и методы. Панель инструментов Правка
    Список констант
    В окне модуля выводит раскрывающийся список, содержащий допустимые константы для введенного свойства, за которым следует знак равенства (=).Панель инструментов Правка
    Краткие сведения
    Выводит синтаксис использования выбранной в окне модуля переменной, функции, инструкции, метода или процедуры.Панель инструментов Правка
    Сведения о параметре
    В окне модуля выводит сведения о параметрах функции или инструкции, на которых установлен курсор.Панель инструментов Правка
    Завершить слово
    Завершает ввод набираемого слова, если только введено достаточно символов для распознавания слова Visual Basic.Панель инструментов Правка
    Увеличить отступ
    Смещает все выделенные строки в следующую позицию табуляции.Панель инструментов Правка
    Уменьшить отступ
    Смещает все выделенные строки в предыдущую позицию табуляции.Панель инструментов Правка
    Точка останова
    Устанавливает или удаляет в текущей строке точку останова.Панель инструментов Правка

    Закомментировать блок
    Добавляет в начало каждой строки выделенного блока текста символ комментария.Панель инструментов Правка
    Раскомментировать блок
    Добавляет из начала каждой строки выделенного блока текста символ комментария.Панель инструментов Правка
    Закладка
    Снимает или устанавливает закладку в текущей строке окна модуля.Панель инструментов Правка
    Следующая закладка
    Перемещает фокус к следующей закладке в стеке закладок. Панель инструментов Правка
    Предыдущая закладка
    Перемещает фокус к предыдущей закладке в стеке закладок.Панель инструментов Правка
    Снять все закладки
    Удаляет все закладки.

    Панель инструментов UserForm

    Панель инструментов UserForm
    Содержит кнопки для быстрого вызова наиболее часто используемых при работе с формами команд меню.
    Для выполнения действия, закрепленного за кнопкой, следует нажать ее. Для отображения краткой справки о кнопках панели инструментов достаточно установить флажок Всплывающие подсказки на вкладке Общие окна диалога Параметры.
    Кнопки панели инструментовПанель инструментов UserForm
    На передний план
    Помещает выделенные объекты в форме перед всеми остальными.Панель инструментов UserForm
    На задний план
    Помещает выделенные объекты в форме позади всех остальных.Панель инструментов UserForm
    Сгруппировать
    Создает из выделенных объектов группу.Панель инструментов UserForm
    Разгруппировать
    ВыровнятьПанель инструментов UserForm
    По левому краю - выравнивает горизонтальное положение выбранных объектов, помещая их левые границы на одну линию.Панель инструментов UserForm
    По центру - выравнивает горизонтальное положение выбранных объектов, помещая их центры на одну линию.Панель инструментов UserForm
    По правому краю - выравнивает горизонтальное положение выбранных объектов, помещая их правые границы на одну линию.Панель инструментов UserForm
    По верхнему краю - выравнивает вертикальное положение выбранных объектов, помещая их верхние границы на одну линию.Панель инструментов UserForm
    По середине - выравнивает вертикальное положение выбранных объектов, помещая их середины на одну линию.Панель инструментов UserForm
    По нижнему краю - выравнивает вертикальное положение выбранных объектов, помещая их нижние границы на одну линию.Панель инструментов UserForm
    По узлам сетки - помещает верхний левый угол выделенных объектов в ближайший узел сетки. Размер объектов не изменяется.
    Центрировать
    Панель инструментов UserFormПо горизонтали - центрирует выделенные объекты по горизонтали.
    Панель инструментов UserFormПо вертикали - центрирует выделенные объекты по вертикали.
    Выровнять размер
    Панель инструментов UserFormпо ширине - Корректирует ширину.
    Панель инструментов UserFormпо высоте - Корректирует высоту.
    Панель инструментов UserFormпо ширине и высоте - Корректирует как ширину, так и высоту.
    Масштаб Панель инструментов UserForm
    Уменьшает или увеличивает изображение всех элементов управления в UserForm. Допускается выбор коэффициента масштабирования в диапазоне от 10 до 400 процентов.

    Панель элементов

    Панель элементов
    Отображает стандартные элементы управления Visual Basic, а также все добавленные в проект элементы управления ActiveX и вставляемые объекты.
    Допускается настройка панели элементов путем добавления к ней страниц или элементов управления с помощью команды Дополнительные элементы... из меню Сервис.
    При добавлении страницы в нее автоматически вставляется инструмент Выбор объектов.
    Стандартные элементы управления панели элементов Панель элементов
    Выбор объектов
    Это единственный инструмент на панели элементов, не создающий никаких элементов управления. Он служит для изменения размеров и положения элементов формы.Панель элементов
    Надпись
    Позволяет отобразить в форме неизменяемый текст, например подпись к рисунку.Панель элементов
    Поле
    Содержит вводимый и изменяемый пользователем текст.Панель элементов
    Поле со списком
    Вставляет объект, являющийся сочетанием списка и поля. Пользователь может либо выбрать нужное значение из списка, либо ввести его в поле.Панель элементов
    Список
    Вставляет список выбираемых пользователем элементов. Допускается прокручивание списка, если не все его элементы видны одновременно.Панель элементов
    Флажок
    Создает ячейку, которая может быть помечена пользователем, как имеющая значение истина или ложь, а также использующуюся для предоставления выбора нескольких вариантов.Панель элементов
    Переключатель
    Используется для предоставления выбора одного варианта из многих.
    Панель элементов
    Выключатель
    Создает кнопку, имеющую два состояния: включено и выключено.Панель элементов
    Группа
    Позволяет установить графическую или функциональную группировку элементов управления. Для создания группы следует сначала создать ее рамку, а затем внутри нее создать необходимые элементы.Панель элементов
    Кнопка
    Создает кнопку, при нажатии которой выполняется команда.Панель элементов
    Набор вкладок
    Позволяет создать несколько станиц в одной и той же области окна или окна диалога.Панель элементов
    MultiPage
    Служит для представления нескольких экранов информации в виде единого набора.Панель элементов
    Полоса прокрутки
    Создает графический инструмент для быстрого перемещения по длинным спискам элементов или по большим документам, отображающий текущее положение.Панель элементов
    SpinButton
    Прокручивающий элемент управления используется совместно с другими элементами для увеличения или уменьшения числовых значений. Допускается его использование для выбора объекта из диапазона значений или из списка элементов.Панель элементов
    Рисунок
    Отображает в форме точечный рисунок, значок или метафайл. Картинки в элементе управления рисунок являются декоративными и требуют меньше ресурсов, чем PictureBox.

    Стандартная панель инструментов

    Стандартная панель инструментов
    Содержит кнопки для быстрого вызова наиболее часто используемых команд меню.
    Для выполнения действия, закрепленного за кнопкой, следует нажать ее. Для отображения краткой справки о кнопках панели инструментов достаточно установить флажок Всплывающие подсказки на вкладке Общие окна диалога Параметры.
    Кнопки панели инструментовСтандартная панель инструментов
    Отобразить <приложение>
    Выполняет переключение между приложением и активным документом Visual Basic.
    Вставить
    Отображает меню для выбора вставляемого в активный проект объекта. Значок на кнопке изменяется на изображение последнего вставленного объекта. По умолчанию это форма.
    Стандартная панель инструментов- UserForm
    Стандартная панель инструментов- Модуль
    Стандартная панель инструментов- Модуль класса
    Стандартная панель инструментов- Процедура
    Стандартная панель инструментов Сохранить <имя документа>
    Сохраняет документ, включая проект и все его компоненты - формы и модули.Стандартная панель инструментов

    Вырезать
    Удаляет выделенный элемент управления или текст в буфер обмена.Стандартная панель инструментов
    Копировать
    Копирует выделенный элемент управления или текст в буфер обмена.Стандартная панель инструментов
    Вставить
    Вставляет содержимое буфера обмена в текущую позицию.Стандартная панель инструментов
    Найти
    Отображает окно диалога Поиск и выполняет поиск текста, заданного в поле Образец.Стандартная панель инструментов
    Отмена
    Отменяет последнюю операцию редактирования.Стандартная панель инструментов
    Возврат
    Отменяет последнюю команду Отмена, если после ее вызова не произошло никаких других событий.Стандартная панель инструментов
    Запуск подпрограммы/формы или Запуск макроса
    Если курсор находится внутри процедуры - запускает процедуру, если активна UserForm - запускает UserForm, иначе запускает макрос.Стандартная панель инструментов
    Прервать
    Останавливает выполнение программы и выполняет переход в режим прерывания.Стандартная панель инструментов

    Сброс <проекта>
    Очищает стек выполнения, переменные уровня модуля и выполняет сброс проекта.Стандартная панель инструментов
    Режим конструктора
    Включает и выключает режим конструктора.Стандартная панель инструментов
    Окно проекта
    Отображает окно проекта, в котором выводится иерархический список открытых проектов и их содержимого.Стандартная панель инструментов
    Окно свойств
    Отображает окно свойств, используемое для просмотра свойств выделенного элемента управления.Стандартная панель инструментов
    Просмотр объектов
    Отображает окно просмотра объектов, в котором выводится список библиотек объектов, библиотек типов, классов, методов, свойств, событий и констант, доступных для использования в программе, а также описанные в проекте модули и процедуры.Стандартная панель инструментов
    Панель элементов
    Отображает либо скрывает панель элементов, содержащую все доступные в приложении элементы управления и вставляемые объекты (такие как диаграмма Microsoft Excel). Доступна только когда активна UserForm.Стандартная панель инструментов
    Помощник по Office
    Отображает помощника по Office, используемого для получения справки о команде, окне диалога или активном окне.

    Вкладка Формат (окно диалога "Параметры")

    Вкладка Формат (окно диалога
    Определяет внешний вид программы на Visual Basic.
    Параметры вкладки
    Использование цвета Задает цвета фона и текста для типа выбранного в списке текста.
    Текстовая область - список элементов с настраиваемыми цветами.
    Текст - задает цвет текста, выбранного в списке Текстовая область.
    Фон - задает цвет фона для текста, выбранного в списке Текстовая область
    Индикатор - задает цвет индикатора на полях.
    Шрифт Задает используемый для всего текста программы шрифт.
    Размер Задает используемый для всего текста программы размер шрифта.
    Индикатор полей Отображает или скрывает сроку индикаторов на полях.
    Образец Отображает пример текста, оформленного с помощью выбранных атрибутов.

    Вкладка Общие (окно диалога "Параметры")

    Вкладка Общие (окно диалога
    Задает параметры настройки, обработки ошибок и компиляции текущего проекта Visual Basic.
    Параметры вкладки
    Параметры сетки в форме Определяет внешний вид формы во время ее редактирования.
    Показать сетку - определяет, показывать ли сетку.
    Размеры сетки - отображает используемые для формы единицы сетки.
    по ширине: - задает ширину ячеек сетки в форме (от 2 до 60 точек).
    по высоте: - задает высоту ячеек сетки в форме (от 2 до 60 точек).
    Привязка элементов к сетке - автоматически располагает внешние границы элементов управления на линиях сетки.
    Всплывающие подсказки Отображает подсказку по кнопкам панели инструментов.
    Скрытие окон при сбое Определяет, должно ли быть автоматически закрыто окно проекта, UserForm, объекта или модуля, при сворачивании проекта в окне проекта.
    Правка и продолжение
    Уведомить о потере состояния - определяет, должно ли отображаться сообщение, уведомляющее о том, что запрошенная операция приведет к сбросу всех переменных уровня модуля в проекте.
    Перехват ошибок. Останов: Определяет способ обработки ошибок в среде разработчика Visual Basic. Изменение этих параметров будет влиять на все запущенные позднее копии Visual Basic.
    Останов при любой ошибке - любая ошибка переводит проект в режим прерывания, независимо от того, активен ли обработчик ошибок и находится ли программа в модуле класса.
    Останов в модуле класса - любая необрабатываемая ошибка в модуле класса переводит проект в режим прерывания на строке модуля класса, вызвавшей ошибку.
    Останов на необрабатываемых ошибках - если обработчик ошибок активен, переход в режим прерывания не выполняется. Если же нет активного обработчика ошибок проект переводится в режим прерывания. Однако необрабатываемая ошибка в модуле класса переводит проект в режим прерывания на строке программы, вызвавшей процедуру, в которой произошла ошибка.
    Компиляция
    Компиляция по запросу - определяет, должен ли проект перед запуском быть скомпилирован полностью, либо по мере необходимости, что позволяет быстрее запустить приложение.
    В фоновом режиме - определяет следует ли использовать времена простоя при работе приложения для завершения компиляции проекта в фоновом режиме. Это позволяет увеличить скорость выполнения. Эта возможность недоступна, если выбран параметр Компиляция по запросу .

    Вкладка Редактор (окно диалога "Параметры")

    Вкладка Редактор (окно диалога
    Определяет параметры настройки окна модуля и окна проекта.
    Параметры вкладки
    Программирование
    Проверка синтаксиса - определяет, должен ли Visual Basic автоматически проверять правильность синтаксиса после ввода строки программы.
    Явное описание переменных - определяет необходимость явного описания переменных в модулях. Выбор этого параметра приведет к добавлению инструкции Option Explicit в раздел общих описаний всех создаваемых модулей.
    Список компонентов - отображает список данных, логически завершающих инструкцию, расположенную в месте вставки.
    Краткие сведения - отображает сведения о функции и ее параметрах по мере ввода ее имени.
    Подсказка значений - отображает значение переменной, на которой установлен курсор. Эта возможность доступна только в режиме прерывания.
    Автоотступ - позволяет задавать положение табуляции только для первой строки - следующие строки будут начинаться с того же положения.
    Интервал табуляции - устанавливает интервал табуляции в пределах от 1 до 32 пробелов; по умолчанию используется значение 4.
    Параметры окна
    Перетаскивание текста - позволяет использовать мышь для перемещения элементов внутри текущего окна модуля, а также между окном модуля и областями проверки и Контрольные.
    Полный модуль - для вновь открываемых модулей устанавливает возможность просмотра в окне модуля как списка всех процедур, так одной конкретной процедуры. Этот параметр не влияет на просмотр в открытых модулях.
    Разделитель процедур - позволяет скрывать и отображать разделяющую полосу, появляющуюся в конце каждой процедуры в окне модуля.
    Окно диалога Редактор кнопок
    Вкладка Редактор (окно диалога
    Инструмент для изменения значков панели элементов.
    Параметры окна диалога
    Рисунок Поточечно отображает значок.
    Переместить Перемещает рисунок, делая возможным работу с любой ее частью.Вкладка Редактор (окно диалога
    - при каждом нажатии перемещает картинку на один ряд точек вверх, пока не достигнут самый верхний ряд.Вкладка Редактор (окно диалога
    - при каждом нажатии перемещает картинку на один ряд точек вниз, пока не достигнут самый нижний ряд.Вкладка Редактор (окно диалога
    - при каждом нажатии перемещает картинку на один столбец точек вправо, пока не достигнут самый правый столбец.Вкладка Редактор (окно диалога
    - при каждом нажатии перемещает картинку на один столбец точек влево, пока не достигнут самый левый столбец.
    Цвета Изменяет цвет точек. Для рисования следует сначала выбрать нужный цвет, а затем отметить точку, которую необходимо окрасить в этот цвет.
    Удалить - Удаляет цвет со всех точек, выбранных с помощью мыши, после пометки данной ячейки.
    Просмотр Отображает внешний вид редактируемого значка.
    Очистить Удаляет картинку из поля рисования.
    OK Назначает измененную картинку элементу управления.

    Вкладка Закрепление (окно диалога "Параметры")

    Позволяет задать закрепленные окна. Окно считается закрепленным, когда его положение на экране, в окне приложения или в другом закрепленном окне зафиксировано. При перемещении такого окна оно остается "привязанным" к своему положению. Если окно может быть перемещено и оставлено в новом месте - оно не закреплено.
    На этой вкладке следует пометить окна, которые необходимо закрепить, и снять пометку с остальных. Допускается закрепление любого числа окон.
    Окно диалога Вставка объекта
    Вкладка Закрепление (окно диалога
    Позволяет вставить в форму новый объект путем его создания или выбора из файла.
    Параметры окна диалога
    Создать новый Отображает список Тип объекта, в котором следует выбрать тип создаваемого объекта.
    Тип объекта - список доступных объектов.
    Создать из файла Отображает поле Файл и кнопку Обзор для выбора файла, вставляемого в форму в виде объекта.
    Файл - Отображает имя и путь вставляемого файла.
    Обзор - Открывает стандартное окно просмотра для поиска вставляемого файла.
    Результат Отображает сведения о параметрах окна диалога или выбранном объекте.

    Вкладка Защита (окно диалога Свойства проекта)

    Вкладка Защита (окно диалога Свойства проекта)
    Устанавливает защиту проекта.
    Параметры окна диалога
    Блокировка проекта Позволяет заблокировать проект и предотвратить его изменение посторонними лицами.
    Вкладка Защита (окно диалога Свойства проекта)
    Блокировать проект для просмотра - Запрещает просмотр и изменение проекта.
    Пароль для просмотра свойств проекта Устанавливает пароль, позволяющий просматривать свойства проекта.
    Пароль - Установка пароля для проекта. Если параметр Блокировать проект для просмотра не выбран, но установлен пароль, для отображения окна свойств при следующем открытии проекта потребуется ввести этот пароль.
    Подтверждение - Служит для подтверждения пароля, введенного в поле Пароль. При нажатии кнопки OK содержимое этих полей должно совпадать, иначе будет выведено сообщение об ошибке.

    Меню Visual Basic

    Циклы в программе

    Использование условных инструкций и инструкций цикла, называемых также управляющими структурами, позволяет написать программу на языке Visual Basic, которая будет принимать решения и повторять операции. Другая полезная управляющая структура - инструкция With, позволяет выполнить последовательность инструкций, не повторяя задание имени объекта.
    Использование условных инструкций
    Условные инструкции проверяют, имеет ли условие значение True, или же False, и, в зависимости от результата, указывают одну или несколько дальнейших инструкций. Обычно условие является выражением, которое использует оператор сравнения для сравнения одного значения переменной с другим.
    Выбор условной инструкции
    If...Then...Else: ветвление программы в зависимости от значения условия True или False
    Select Case: выбор ветви из набора условий
    Использование циклов для повторения блоков программы
    Использование циклов дает возможность повторного выполнения набора инструкций. Некоторые циклы повторяют инструкции пока условие имеет значение False; другие - пока значение условия равно True. Имеются также циклы, которые повторяют набор инструкций определенное число раз или же выполняют его для каждого объекта семейства.
    Типы циклов
    Do...Loop: повторяет набор инструкций, пока условие имеет значение True или пока оно не примет значение True
    For...Next: использует счетчик. Повторяет набор инструкций указанное число раз.
    For Each...Next: повторяет набор инструкций для каждого объекта семейства
    Выполнение нескольких инструкций над одиночным объектом
    В Visual Basic, как правило, требуется указать объект перед выполнением одного из его методов или изменением одного из его свойств. С помощью инструкции With можно указать объект только один раз для последовательности инструкций.
    With: выполняет последовательность инструкций над одиночным объектом

    Именованные и аргументы Optional

    При вызове процедур Sub или Function возможна позиционная передача аргументов, т.е. в порядке следования в описании процедуры. Кроме того, аргументы могут передаваться по именам, вне зависимости от позиции.
    Например следующая процедура Sub имеет три аргумента:
    Sub PassArgs(strName As String, intAge As Integer, dteBirth As Date)
    Debug.Print strName, intAge, dteBirth
    End Sub
    Эту процедуру можно вызвать, передавая ее аргументы в соответствии с позициями и разделяя их запятой, как показано в следующем примере:
    PassArgs "Маша", 26, #2-21-69#
    Возможен также вызов этой процедуры с передачей именованных аргументов, разделенных запятыми.
    PassArgs intAge:=26, dteBirth:=#2/21/69#, strName:="Маша"
    Именованный аргумент состоит из имени аргумента, за которым следует двоеточие со знаком равенства (:=) и значение аргумента.
    Именованные аргументы особенно полезны при вызове процедуры с необязательными аргументами (Optional). Если используются именованные аргументы, то запятые для обозначения отсутствующих позиционных аргументов не нужны. С помощью именованных аргументов проще проследить, какие аргументы переданы, а какие опущены.
    В описании процедуры перед необязательными аргументами должно стоять ключевое слово Optional. Кроме того, в описании процедуры можно присвоить значение необязательному аргументу, которое он принимает по умолчанию. Например:
    Sub OptionalArgs(strState As String, Optional strCountry As String = "USA")
    . . .
    End Sub
    При вызове процедуры с аргументом Optional можно как указывать, так и не указывать необязательный аргумент. Если аргумент не описан, то для него используется имеющееся значение по умолчанию. Если по умолчанию значение не присвоено, аргумент обрабатывается так же, как любая другая переменная указанного типа.
    В следующей процедуре имеется необязательный аргумент, переменная varCountry. Функция IsMissing определяет, был ли передан в процедуру необязательный аргумент.
    Sub OptionalArgs(strState As String, Optional intRegion As Integer, _
    Optional strCountry As String = "USA")
    If IsMissing(intRegion) And IsMissing(strCountry) Then
    Debug.Print strState
    ElseIf IsMissing(strCountry) Then
    Debug.Print strState, intRegion
    ElseIf IsMissing(intRegion) Then
    Debug.Print strState, strCountry
    Else
    Debug.Print strState, intRegion, strCountry
    End If
    End Sub
    Эту процедуру можно вызвать с помощью именованного аргумента, как показано в следующих примерах.
    OptionalArgs strCountry:="USA", strState:="MD"
    OptionalArgs strState:= "MD", intRegion:=5

    Эффективная передача аргументов

    Если не задается обратное, аргументы передаются в процедуры по ссылке. Это эффективно, так как все аргументы, передаваемые по ссылке, требуют одинакового времени для передачи и одинакового количества памяти (4 байта) для каждой процедуры, независимо от типа данных аргумента.
    Если включить ключевое слово ByVal в описание процедуры, то аргумент будет передан по значению. Аргументы, переданные по значению, занимают от 2 до 16 байт на процедуру, в зависимости от типа данных аргументов. Типы данных большего размера требуют на передачу немного больше времени. По этой причине обычно не следует передавать по значению типы данных String и Variant.
    При передаче аргумента по значению создается копия исходной переменной. Изменения аргумента в процедуре не распространяются на значение исходной переменной. Например:
    Function Factorial (ByVal MyVar As Integer)' Описание функции.
    MyVar = MyVar - 1
    If MyVar = 0 Then
    Factorial = 1
    Exit Function
    End If
    Factorial = Factorial(MyVar) * (MyVar + 1)
    End Function
    ' Вызов функции Factorial с переменной S.
    S = 5
    Print Factorial(S)' Выводит на экран 120 (факториал 5).
    Print S' Выводит на экран 5.
    Без ключевого слова ByVal в описании функции приведенные выше инструкции Print выводят на экран 1 и 0. Причина заключается в том, что MyVar ссылается затем на переменную S, которая уменьшается на 1 до тех пор, пока не станет равной 0.
    Поскольку ByVal создает копию аргумента, она позволяет передавать в функцию Factorial значение типа Variant. Невозможна передача по ссылке значений типа Variant если процедура, описывающая аргумент, использует другой тип данных.

    Команда Объект (меню "Вид")

    Выводит активный элемент.
    Кнопка панели инструментов: Команда Объект (меню . Клавиша быстрого вызова: SHIFT+F7.

    Команда Окно контрольного значения (меню "Вид")

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

    Команда Окно локальных переменных (меню "Вид")

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

    Команда Окно отладки (меню "Вид")

    Отображает окно проверки, а также результаты работы отлаживаемых инструкций программы или команд, вводимых непосредственно в окне.
    Окно проверки полезно использовать для:
    Тестирования сложного или нового текста программы.
    Запроса или изменения значения переменной во время выполнения программы. При остановке следует присвоить переменной новое значение точно так, как это делается в программе.
    Запроса или изменения значения свойства во время выполнения программы.
    Вызова процедуры таким же образом, как это делается в программе.
    Просмотра отладочной информации, выводимой программой во время выполнения.
    Кнопка панели инструментов: Команда Окно отладки (меню . Клавиша быстрого вызова: CTRL+G.

    Команда Окно проекта (меню "Вид")

    Эта команда выводит Окно проекта с иерархическим списком открытых баз данных и их содержимым.
    Окно проекта является инструментом лишь для перемещения и управления. Невозможно с его помощью построить приложение.
    Кнопка панели инструментов: Команда Окно проекта (меню . Клавиша быстрого вызова: CTRL+R.
    Окно просмотра объектов
    Окно или область окна контрольного значения

    Команда Описание (меню "Вид")

    Эта команда выводит в окне модуля место описания переменной или процедуры, на имя которой установлен указатель. Если описание находится в ссылаемой библиотеке, оно выводится в окне просмотра объектов.
    Клавиша быстрого вызова: SHIFT+F2.

    Команда Панель элементов (меню "Вид")

    Выводит или скрывает панель элементов, содержащую доступные в настоящий момент элементы управления.
    Кнопка панели инструментов: Команда Панель элементов (меню .

    Команда Панели инструментов (меню "Вид")

    Выбор этой команды приводит к появлению списка встроенных в Visual Basic панелей инструментов, также команды Настройка. Возможно:
    Включение и выключение панелей инструментов
    Перемещение панелей инструментов по рабочему столу.
    Отладка Выводит панель инструментов Отладка, содержащую кнопки для общих команд отладки.
    Правка Выводит панель инструментов Правка, содержащую кнопки для общих команд редактирования.
    Стандарт Выводит панель инструментов Стандарт, являющуюся панелью инструментов по умолчанию.
    UserForm Выводит панель инструментов UserForm, содержащую кнопки для работы с формой.
    Настройка Выводит окно диалога Настройка, где возможна настройка или создание панелей инструментов и строк меню.

    Команда Программа (меню Вид)

    Выводит окно модуля класса для выделенного объекта.
    Кнопка панели инструментов: Команда Программа (меню Вид). Клавиша быстрого вызова: F7.

    Команда Просмотр объектов (меню "Вид")

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

    Команда Стек вызова (меню "Вид")

    Выводит окно диалога стек вызова со списком процедур, чью выполнение началось, но в данный момент еще не завершилось. Команда доступна только в режиме прерывания.
    При выполнении Visual Basic процедуры, она заносится в список активных вызовов. Если эта процедура вызывает другую, в списке активных вызовов оказывается уже две процедуры. Каждый раз, при вызове процедурой другой процедуры Sub, процедуры Function или процедуры Property, последняя добавляется в список. Процедура удаляется из списка, как только управление возвращается в вызывающую процедуру. Вызванные из окна проверки процедуры также вносятся в список вызовов.
    Вызов окна диалога также возможен с путем нажатия кнопки вызова (...) рядом с полем процедуры в области Локальные окна отладки.
    Кнопка панели инструментов: Команда Стек вызова (меню Клавиша быстрого вызова: CTRL+L.

    Команда Свойства (меню "Вид")

    Выводит окно свойств, в котором перечисляются свойства времени разработки для выделенной формы, элемента управления, класса, проекта или модуля.
    Кнопка панели инструментов: Команда Свойства (меню . Клавиша быстрого вызова: F4.

    Команда Вернуться к последней позиции (меню "Вид")

    Эта команда позволяет быстро перемещаться из одного места программы в другое. Команда доступна в окне модуля, только если редактировался текст программы или вызывалась команда Описание. В Visual Basic сохраняются последние 8 строк, над которыми выполнялись какие-либо операции.
    Клавиша быстрого вызова: CTRL+SHIFT+F2.

    Команды меню "Окно"

    "Разделить"
    Переключает разделение окна модуля горизонтально на две части. Эта команда доступна, только когда активно окно модуля.
    Кнопка панели инструментов: Команды меню
    "Сверху вниз"
    Размещает все окна открытого документа проекта горизонтально.
    Кнопка панели инструментов: Команды меню
    "Слева направо"
    Размещает все окна открытого документа проекта вертикально.
    Кнопка панели инструментов: Команды меню
    "Каскадом"
    Размещает все окна открытого документа проекта так, что они перекрываются и видны заголовки всех из них.
    Кнопка панели инструментов: Команды меню
    "Упорядочить значки"
    Упорядочивает значки всех свернутых окон документов, размещая их вдоль нижнего левого края окна приложения.
    "Список окон"
    Выводит список всех окон открытого документа.

    Объекты, свойства, методы и события

    Объект представляет элемент приложения, как например лист, ячейка, диаграмма, форма или отчет. В программе на языке Visual Basic необходимо идентифицировать объект, прежде чем применять к нему методы или изменять значения его свойства.
    Семейство (объект Collection) представляет собой объект, содержащий несколько других объектов, как правило, одного и того же типа. Например, в Microsoft Excel объект Workbooks содержит все открытые объекты Workbook. В Visual Basic семейство Forms содержит все объекты Form приложения.
    Элемент семейства может быть идентифицирован по номеру или по имени. Например, в следующей процедуре Workbooks(1) обозначает первый открытый объект Workbook.
    Sub CloseFirst()
    Workbooks(1).Close
    End Sub
    Следующая процедура использует имя, определенное как строка для указания на объект Form.
    Sub CloseForm()
    Forms("MyForm.frm").Close
    End Sub
    Если объекты имеют общие методы, можно рассматривать семейство объектов как одно целое. Например, в следующей процедуре закрываются все открытые формы.
    Sub CloseAll()
    Forms.Close
    End Sub
    Метод представляет собой действие, выполняемое над объектом. Например, Add - метод объекта ComboBox, поскольку он добавляет новую запись в поле со списком.
    В следующей процедуре для внесения нового элемента в объект ComboBox (поле со списком) используется метод Add.
    Sub AddEntry(newEntry as String)
    Combo1.Add newEntry
    End Sub
    Свойство представляет собой атрибут объекта, определяющий характеристики объекта, такие как размер, цвет, положение на экране или состояние объекта, например, доступность или видимость. Чтобы изменить характеристики объекта, надо просто изменить значения его свойств.
    Чтобы задать значение свойства, надо указать объект, через точку указать имя свойства, затем знак равенства (=) и новое значение свойства. Например, в следующей процедуре изменяется заголовок формы Visual Basic посредством задания свойства Caption.
    Sub ChangeName(newTitle)
    myForm.Caption = newTitle
    End Sub
    Некоторые свойства не задаются. В разделах Справочника для всех свойств указано, можно ли задать свойство (чтение-запись), только прочитать его (только чтение) или только записать (только запись).
    Имеется возможность отыскивать информацию об объекте, возвращая значение какого-либо из его свойств. В следующей процедуре используется окно сообщения для вывода на экран заголовка активной в данный момент формы.
    Sub GetFormName()
    formName = Screen.ActiveForm.Caption
    MsgBox formName
    End Sub
    Событие представляет собой действие, распознаваемое объектом (например, щелчок мышью или нажатие клавиши), для которого можно запрограммировать отклик. События возникают в результате действий пользователя или программы, или же они могут быть вызваны системой.
    Возвращение объектов
    В любом приложении имеется способ возвращать объекты, которые оно содержит. Однако, поскольку эти способы отличаются, следует обращаться к разделу Справочника по данному объекту или семейству, чтобы узнать, как возвращать объект.

    Окно диалога Дополнительные элементы...

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

    Окно диалога Последовательность перехода

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

    Окно диалога Вставка файла

    Окно диалога Вставка файла
    Служит для поиска и вставки файла в модуль проекта.
    Параметры окна диалога
    Папка
    Отображает список доступных компьютеров, серверов, дисков и папок, используемых для поиска открываемого проекта.
    Переход на один уровень вверхОкно диалога Вставка файла
    Отображает список папок или дисков, находящихся на один уровень выше текущей папки.
    Создать новую папкуОкно диалога Вставка файла
    Создает новую папку.
    Мелкие значкиОкно диалога Вставка файла
    Отображает папки и документы в виде списка маленьких значков и имен.
    СведенияОкно диалога Вставка файла
    Отображает папки и документы в виде списка, включающего значок, имя, размер (только для документов), тип, дату и время последнего изменения.
    Имя файла
    Служит для ввода или выбора имени вставляемого файла.
    Тип файлов
    Служит для выбора типа файла; по умолчанию задаются текстовые файлы (*.txt). Файлы выбранного типа появляются в списке имен файлов.
    Открыть
    Вставка выбранного файла.
    Отмена
    Закрытие окна диалога без вставки файла.

    Окно диалога Вставка процедуры

    Окно диалога Вставка процедуры
    Вставляет новую процедуру Sub, процедуру Function или процедуру Property. Тут же возможна установка общей или личной области определения, а также превращение всех локальных переменных процедуры в статические.
    Параметры окна диалога
    Имя Имя новой процедуры.
    Тип Задает тип создаваемой процедуры.
    Подпрограмма (Sub) - Создает новую процедуру Sub.
    Функция (Function) - Создает новую процедуру Function.
    Свойство (Property) - Создает пару процедур свойства Let и Get.
    Область определения Устанавливает общую или личную область определения процедуры.
    Все локальные переменные считать статическими Добавляет в описание процедуры ключевое слово Static.
    OK Вставляет шаблон процедуры в окно модуля.
    Отмена Закрывает окно диалога без вставки новой процедуры.

    Окно UserForm

    Окно UserForm
    Позволяет создавать в проекте окна и окна диалога. Допускается рисование и просмотр элементов правления в форме.
    При разработке формы:
    Каждое окно имеет кнопки Развернуть, Свернуть и Закрыть.
    Возможен просмотр и изменение размеров сетки формы на вкладке Общие окна диалога "Параметры".
    Кнопки панели элементов служат для вставки в форму элементов управления. На вкладке Общие окна диалога "Параметры" возможно задать выравнивание элементов по линиям сетки.

    Описание констант

    При описании константы ей можно присвоить значащее имя. Инструкция Const используется для описания константы и определения ее значения. После описания константу нельзя модифицировать и нельзя присваивать ей новое значение.
    Константа описывается в процедуре или в начале модуля, в разделе описаний. Константы уровня модуля по умолчанию являются личными. При описании общих констант уровня модуля инструкции Const должно предшествовать ключевое слово Public. Для явного описания личных констант перед инструкцией Const надо поставить ключевое слово Private. Это облегчает чтение и отладку программы. Дополнительные сведения содержатся в разделе "Область определения и видимость" справочника Visual Basic.
    В следующем примере константа Public conAge описывается как Integer, и ей присваивается значение 34.
    Public Const conAge As Integer = 34
    Константы могут быть описаны одним из следующих типов данных: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String, или Variant. Поскольку значение константы уже известно, можно задать тип данных в инструкции Const. Дополнительные сведения содержатся в разделе "Типы данных" справочника Visual Basic.
    Допускается также описание нескольких констант в одной строке. В этом случае, чтобы задать тип данных, надо указать определенный тип для каждой константы. В следующем примере константы conAge и conWage описываются как Integer.
    Const conAge As Integer = 34, conWage As Currency = 35000

    Описание массивов

    Как и другие переменные, массивы описываются с помощью инструкций Dim, Static, Private или Public. Разница между скалярными переменными (т.е. не массивами) и массивами состоит в том, что для последних надо указывать размер массива. Массив с заданным размером называется массивом фиксированного размера. Массив с переменным размером называется динамическим.
    Начало индексации массива с 0 или 1 определяется параметрами инструкции Option Base. Если не указано Option Base 1, нижняя граница индексов массива равняется нулю.
    Описание массива фиксированного размера
    В следующей строке программы массив фиксированного размера описывается как массив типа Integer, имеющий 11 строк и 11 столбцов:
    Dim MyArray(10, 10) As Integer
    Первый аргумент представляет строки, а второй - столбцы.
    Как и при описании других переменных, если тип данных при описании массива не задается, подразумевается, что элементы массива имеют тип Variant. На каждый элемент массива типа Variant отводится 16 байт. Строковый элемент типа Variant занимает 22 байта. Для написания максимально компактной программы следует явно описывать массивы как принадлежащие к типу данных, отличному от Variant. В следующих строках программы сравниваются размерности нескольких массивов:
    ' Массив Integer занимает 22 байта (11 элементов * 2 байта).
    ReDim MyIntegerArray(10) As Integer
    ' Массив Double-precision занимает 88 байт (11 элементов * 8 байт).
    ReDim MyDoubleArray(10) As Double
    ' Массив Variant занимает не менее 176 байт (11 элементов * 16 байт).
    ReDim MyVariantArray(10)
    ' Массив Integer занимает 100 * 100 * 2 байт (20,000 байт).
    ReDim MyIntegerArray (99, 99) As Integer
    ' Массив Double-precision занимает 100 * 100 * 8 байт (80,000 байт).
    ReDim MyDoubleArray (99, 99) As Double
    ' Массив Variant занимает не менее 160,000 байт (100 * 100 * 16 байт).
    ReDim MyVariantArray(99, 99)
    Максимальные размеры массива варьируются в зависимости от имеющейся операционной системы и доступной памяти. Использование массивов, превышающих по размеру объем доступной системной оперативной памяти, замедляет работу программы, поскольку при этом данные должны читаться с диска и записываться на диск.

    Описание динамического массива
    Если массив описан как динамический, можно изменять его размер во время работы программы. Для описания динамического массива используются инструкции Static, Dim, Private, или Public с пустыми скобками, как показано в следующем примере.
    Dim sngArray() As Single
    Примечание. Можно воспользоваться инструкцией ReDim для неявного описания массива внутри процедуры. При этом надо точно задавать имя массива. В случае опечатки, даже если в модуле есть инструкция Option Explicit, будет создан второй массив.
    В процедуре внутри области определения массива используется инструкция ReDim для изменения числа размерностей, определения числа элементов и задания верхних и нижних границ индексов для каждой размерности. Инструкцию ReDim можно применять для изменения динамического массива столько раз, сколько потребуется. Однако при каждом применении данные, содержащиеся в массиве, теряются. Инструкция ReDim Preserve увеличивает размер массива, сохраняя при этом его содержимое. В следующем примере показывается, как можно увеличить массив varArray на 10 элементов без уничтожения текущих значений элементов массива.
    ReDim Preserve varArray(UBound(varArray) + 10)
    Примечание. Использование ключевого слова Preserve вместе с динамическим массивом позволяет изменить только верхнюю границу последней размерности массива, однако изменение числа размерностей невозможно.

    Описание переменных

    При описании переменных обычно используется инструкция Dim. Для создания переменной на уровне процедуры инструкция описания помещается внутри процедуры. Чтобы создать переменную на уровне модуля, инструкция описания располагается в начале модуля, в разделе описаний.
    В следующем примере создается переменная strName и задается тип данных String.
    Dim strName As String
    Когда эта инструкция располагается в процедуре, переменная strName может использоваться только в данной процедуре. Если же такая инструкция находится в разделе описаний модуля, то переменная strName доступна для всех процедур данного модуля, но не может использоваться процедурами из других модулей проекта. Чтобы сделать переменную доступной для всех процедур проекта, перед ней надо поставить инструкцию Public, как показано в следующем примере:
    Public strName As String
    Дополнительные сведения о присвоения имен переменным содержатся в разделе справочника Visual Basic "Правила присвоения имен в языке Visual Basic".
    Переменные могут описываться как один из следующих типов данных: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (для строк переменной длины), String * длина (для строк фиксированной длины), Object, или Variant. Если тип данных не задан, по умолчанию переменная приобретает тип Variant. Имеется также возможность создать определяемый пользователем тип данных с помощью инструкции Type. Дополнительная информация о типах данных содержится в разделе справочника Visual Basic "Типы данных".
    Допускается также описание нескольких переменных в одной строке. В этом случае, чтобы задать тип данных, надо указать определенный тип для каждой переменной. В следующем примере переменные intX, intY, и intZ описываются как Integer.
    Dim intX As Integer, intY As Integer, intZ As Integer
    В следующей строке intX и intY описываются как Variant; и только intZ описывается как Integer.
    Dim intX, intY, intZ As Integer
    Можно не указывать тип данных переменной в описании. Если тип данных не указан, переменная приобретает тип Variant.

    Инструкция Public
    Инструкция Public используется для описания общих переменных на уровне модуля.
    Public strName As String
    Общие переменные могут использоваться в любой процедуре проекта. Если общая переменная описана в стандартном модуле или в модуле класса, она также может использоваться в любом проекте, в котором имеется ссылка на проект, где описана эта переменная.
    Инструкция Private
    Инструкция Private используется для описания личных переменных уровня модуля.
    Private MyName As String
    Личные переменные доступны только для процедур одного и того же модуля.
    Примечание. На уровне модуля инструкция Dim эквивалентна инструкции Private. Использование инструкции Private может упростить чтение и отладку программы.
    Инструкция Static
    Переменные, описанные с помощью инструкции Static вместо инструкции Dim, сохраняют свои значения при выполнении программы.
    Инструкция Option Explicit
    В языке Visual Basic можно неявно описать переменную, просто используя ее в инструкции присвоения. Все неявно описанные переменные имеют тип Variant. Переменные типа Variant более требовательны к ресурсам памяти, чем большинство других переменных. Программа будет более эффективной, если переменные явно описаны с определенным типом данных. Явное описание всех переменных уменьшает вероятность конфликтов имен и ошибок, связанных с опечатками.
    Если неявные описания нежелательны, инструкция Option Explicit должна предшествовать в модуле всем процедурам. Эта инструкция налагает требование явного описания всех переменных этого модуля. Если модуль содержит инструкцию Option Explicit, при попытке использования неописанного или неверно введенного имени переменной возникает ошибка во время компиляции.
    В программной среде Visual Basic имеется возможность установить параметр, автоматически включающий инструкцию Option Explicit во все новые модули. В документации приложения содержатся справочные сведения по изменению параметров среды Visual Basic. Следует отметить, что этот параметр не изменяет текст программы пользователя.


    Примечание. Явное описание динамических массивов и массивов с фиксированной размерностью обязательно.
    Описание объектной переменной для программирования объектов
    Когда приложение используется для управления объектами из другого приложения, необходимо создать ссылку на библиотеку типов второго приложения. Когда ссылка определена, имеется возможность описать объектные переменные с наиболее подходящим для них типом. Например, если при работе в Microsoft Access определяется ссылка на библиотеку типов Microsoft Excel, то внутри Microsoft Access можно описать переменную типа Worksheet, чтобы она представляла объект Worksheet Microsoft Excel.
    Если для управления объектами Microsoft Access используется другое приложение, то, как правило, объектные переменные описываются с наиболее подходящим для них типом. Возможно также использование ключевого слова New для автоматического создания нового экземпляра объекта. Однако необходимо указать, что это объект Microsoft Access. Например, если описывается объектная переменная, представляющая форму Microsoft Access внутри Microsoft Visual Basic, необходимо различать объект Form Microsoft Access и объект Form Visual Basic . Имя библиотеки типов включается в описание переменной, как показано в следующем примере:
    Dim frmOrders As New Access.Form
    Некоторые приложения не распознают отдельные объектные типы Microsoft Access. Даже если в этих приложениях создана ссылка на библиотеку типов Microsoft Access, необходимо описать все объектные переменные Microsoft Access с типом Object. В этом случае ключевое слово New также не может использоваться для создания нового экземпляра объекта. В следующем примере показано, как в таком приложении надо описывать переменную, чтобы она представляла экземпляр объекта Application Microsoft Access. Затем приложение создает экземпляр объекта Application.
    Dim appAccess As Object
    Set appAccess = CreateObject("Access.Application")
    Синтаксис, поддерживаемый приложением, описан в документации по приложению.

    Оптимизация циклов For...Next

    Переменные целого типа занимают меньше памяти, чем переменные с типом данных Variant и их обновление выполняется немного быстрее. Однако, это отличие становится заметным только при выполнении многих тысяч операций. Например:
    Dim CountFaster As Integer' В первом случае используем Integer.
    For CountFaster = 0 to 32766
    Next CountFaster
    Dim CountSlower As Variant' Во втором случае используем Variant.
    For CountSlower = 0 to 32766
    Next CountSlower
    В первом случае требуется немного меньше времени для выполнения, чем во втором. Однако, если значение CountFaster превышает 32767, возникает ошибка. Для устранения этой ошибки можно изменить тип данных CountFaster на тип данных Long, который допускает больший диапазон целых чисел. Вообще говоря, чем меньше значения какого-либо типа данных, тем меньше времени требуется для их обновления. Обновление для значений типа Variant выполняется немного медленнее, чем для значений соответствующего им типа данных.

    Программирование объектов

    Программирование объектов (ранее программирование OLE ) является свойством модели COM (Component Object Model), стандартной технологии, которая используется приложениями, чтобы предоставить свои объекты в распоряжение средств разработки, макроязыков и других приложений, поддерживающих программирование объектов. Например, приложение для работы с электронными таблицами может предоставлять для использования лист, диаграмму, ячейку или диапазон ячеек в качестве различных типов объектов. Текстовой процессор может предоставлять для использования объекты типа приложений, документов, абзацев, предложений, закладок или выделенных фрагментов.
    Если приложение поддерживает программирование объектов, предоставляемые им объекты доступны из языка Visual Basic. Visual Basic позволяет проводить обработку этих объектов с помощью методов этих объектов или с помощью чтения или установки свойств этих объектов. Например, если был создан программируемый объект по имени MyObj, для управления этим объектом можно использовать следующую программу:
    MyObj.Insert "Всем привет."' Размещает текст.
    MyObj.Bold = True' Форматирует текст.
    MyObj.SaveAs "C:\WORDPROC\DOCS\TESTOBJ.DOC"' Сохраняет объект.
    Следующие функции позволяют получить доступ к программируемому объекту:


    Функция
    Описание
    CreateObject
    Создает новый объект указанного типа.
    GetObject
    Загружает объект из файла.
    Сведения о поддерживаемых объектом свойствах и методах содержатся в документации к определенному приложению. Объекты, функции, свойства и методы, поддерживаемые приложением, определяются обычно в библиотеке объектов приложения.

    Создание объектных переменных


    Объектная переменная
    может рассматриваться как объект, ссылку на который она содержит. С ее помощью возможно задание или возвращение свойств объекта или использование любых его методов.
    Для создания объектной переменной:
    1Опишите объектную переменную.
    2Присвойте эту объектную переменную объекту.
    Описание объектной переменной
    Для описания объектной переменной применяется инструкция Dim или одна из других инструкций описания (Public, Private или Static). Переменная, которая ссылается на объект, должна иметь тип Variant, Object, или тип определенного объекта. Например, возможны следующие описания:
    ' Описывает MyObject с типом Variant.
    Dim MyObject
    ' Описывает MyObject с типом Object.
    Dim MyObject As Object
    ' Описывает MyObject с типом Font.
    Dim MyObject As Font
    Примечание. Если объектная переменная используется без предварительного описания, она по умолчанию приобретает тип даных Variant.
    Имеется возможность описать объектную переменную с типом данных Object в том случае, если определенный объектный тип не известен до выполнения процедуры. Тип данных Object позволяет создать универсальную ссылку на любой объект.
    Если определенный объектный тип известен, следует описать объектную переменную с этим объектным типом. Например, если используемое приложение содержит объектный тип Sample, возможно описание переменной для этого объекта с помощью одной из следующих инструкций:
    Dim MyObject As Object' Описывает объект как универсальный.
    Dim MyObject As Sample' Описывает объект только с типом Sample.
    Описание определенных объектных типов обеспечивает автоматическую проверку типа данных, более быстрое выполнение и улучшает читабельность текста программы.
    Присвоение объекта объектной переменной
    Для присвоения объекта объектной переменной применяется инструкция Set. Имеется возможность присвоить объектное выражение или Nothing. Например допустимы следующие присвоения объектной переменной:
    Set MyObject = YourObject' Присваивает ссылку на объект.
    Set MyObject = Nothing' Удаляет ссылку на объект.

    Можно комбинировать описание объектной переменной с присваиванием ей объекта с помощью ключевого слова New в инструкции Set. Например:

    Set MyObject = New Object' Создать и присвоить

    Задание для объектной переменной значения Nothing прекращает сопоставление этой переменной с каким-либо определенным объектом. Это предотвращает случайное изменение объекта при изменении переменной. Объектная переменная всегда имеет значение Nothing после закрытия объекта, с которым она сопоставляется, поэтому легко проверить, указывает ли объектная переменная на реальный объект. Например:

    If Not MyObject Is Nothing Then

    ' Переменная ссылается на объект.

    . . .

    End If

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

    Ссылка на текущий экземпляр объекта

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

    Sub ChangeObjectColor(MyObjectName As Object)

    MyObjectName.BackColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)

    End Sub

    Вызов этой процедуры и передача в качестве аргумента текущего экземпляра объекта выполняется с помощью следующей инструкции:

    ChangeObjectColor Me

    Создание рекурсивных процедур


    Процедуры
    выделяют для хранения переменных ограниченный объем памяти. При каждом вызове процедурой самой себя выделяется дополнительный объем этой памяти. Процедура, вызывающая сама себя, называется рекурсивной. Рекурсивная процедура, которая бесконечно вызывает саму себя, приводит к ошибке. Например:
    Function RunOut(Maximum)
    RunOut = RunOut(Maximum)
    End Function
    Эта ошибка менее очевидна, если две процедуры бесконечное число раз вызывают друг друга, или некоторое условие, ограничивающее рекурсию, никогда не выполняется. Рекурсия имеет свои области применения. Например, следующая процедура использует рекурсию для вычисления факториалов:
    Function Factorial (N)
    If N <= 1 Then' Достигнут конец рекурсивных вызовов.
    Factorial = 1' (N = 0) завершение вызовов.
    Else' Повторный вызов функции, если N > 0.
    Factorial = Factorial(N - 1) * N
    End If
    End Function
    Необходимо проверить, что рекурсивная функция не вызывает себя столько раз, что начинает сказываться нехватка памяти. При возникновении ошибки, убедитесь, что процедура не вызывает себя бесконечное число раз. После этого попробуйте сэкономить память с помощью:
    устранения ненужных переменных;
    использования типов данных , отличных от Variant;
    переосмысления логики процедуры. Часто вместо рекурсии можно воспользоваться вложенными циклами.

    Условная компиляция

    Условная компиляция используется для выборочного выполнения блоков программы, например, при отладке инструкций, сравнивающих различные подходы к программированию одной и той же задачи, или при локализации приложения для другой языковой среды.
    При помощи директивы #Const в программе определяется условная константа компилятора, а директива #If...Then...#Else служит для указания на блок программы, предназначенный для условной компиляции. В следующем примере в зависимости от значения переменной соnDebug программа выполняется с инструкциями отладки или без них.
    ' Описывает общую константу компиляции в разделе описаний.
    #Const conDebug = 1
    Sub SelectiveExecution()
    #If conDebug = 1 Then
    .' Выполняет программу с инструкциями отладки.
    .
    .
    #Else
    .' Выполняет обычную программу.
    .
    .
    #End If
    End Sub

    Устранение конфликтов имен

    При попытке создать или использовать идентификатор , определенный ранее, возникает конфликт имен. В некоторых случаях при конфликтах имен вырабатываются ошибки типа "Обнаружено повторяющееся имя" или "Повторяющееся описание в текущей области определения". Если конфликты имен не обнаружены, они могут привести к ошибкам в программе, и, как следствие, к ошибочным результатам. Это особенно вероятно в том случае, если все переменные не были описаны явным образом до их применения.
    Для предотвращения большинства конфликтов имен необходимо аккуратно разобраться с областями определения идентификаторов для данных, объектов и процедур. Язык Visual Basic имеет три уровня областей определения: уровень процедуры, личный уровень модуля и общий уровень модуля.
    Конфликты имен могут возникать, если идентификатор:
    Является видимым более чем на одном уровне областей определения.
    Имеет на одном и том же уровне два различных значения.
    Например процедуры в различных модулях могут иметь одинаковое имя. Таким образом процедура по имени MySub может быть определена в модулях Mod1 и Mod2. Конфликты не возникают, если каждая процедура вызывается только из других процедур в ее собственном модуле. Однако возможно возникновение ошибки, если MySub вызывается из третьего модуля и отсутствует полная ссылка на определенный модуль, позволяющая различить эти две процедуры MySub.
    Большинство конфликтов имен может быть разрешено с помощью предшествующего каждому идентификатору указателя, состоящего из имени модуля и, если нужно, имени проекта. Например:
    YourProject.YourModule.YourSub MyProject.MyModule.MyVar
    Предшествующая программа вызывает процедуру Sub YourSub и передает переменную MyVar как аргумент. Допускается использование любой комбинации указателей, позволяющей различить одинаковые идентификаторы.
    Visual Basic сопоставляет каждую ссылку на идентификатор с "ближайшим" описанием такого идентификатора. Например, если MyID описан как Public в двух модулях проекта (Mod1 и Mod2), то можно указать MyID, описанный в Mod2 без дополнительного указания внутри Mod2, но необходимо точно задать его имя (как Mod2.MyID) для ссылки на него в Mod1. Это справедливо также, если Mod2 находится в другом проекте, который является напрямую адресуемым проектом. Однако если Mod2 находится в косвенно адресуемом проекте, т.е. таком, на который ссылается напрямую адресуемый проект, ссылки на его переменную по имени MyID всегда должны быть полными и содержать имя проекта. Если ссылка на MyID выполняется из внешнего напрямую адресуемого модуля, то она сопоставляется с первым описанием, обнаруженным в следующем порядке:
    Напрямую адресуемые проекты в том порядке, в котором они появляются в окне диалога Ссылки, вызываемого из меню Сервис.
    Модули каждого проекта. Следует отметить, что не существует внутреннего порядка для модулей проекта.
    Имена объектов главного приложения (например, R1C1 в Microsoft Excel) не могут повторно использоваться на других уровнях области определения.
    Совет. К типичным ошибкам, вызывающим конфликты имен, относятся неоднозначные задания имен, повторяющиеся описания, неописанные идентификаторы и ненайденные процедуры. Задание в начале каждого модуля инструкции Option Explicit, требующее явного описания переменных до их использования, помогает избежать как возможных конфликтов имен, так и ошибок, связанных с идентификаторами.

    Возвращение строк из функций

    Некоторые функции имеют по две версии, одна из которых возвращает тип данных Variant а другая -- тип данных String. Первая версия является более удобной, так как при этом для значений типа Variant преобразование типов данных выполняется автоматически. В ней также допускается передача значения Null через выражение. Вторая версия, возвращающая тип String, более эффективна, так как она использует меньше памяти.
    Версия, возвращающая тип String, может быть полезна в следующих случаях:
    Программа имеет большой размер и использует очень много переменных.
    Выполняется прямая запись данных в файлы с произвольным доступом.
    Следующие функции возвращают значения типа String, если к имени функции добавляется символ доллара ($). Эти функции имеют такое же применение и синтаксис, как и их эквиваленты без символа доллара, возвращающие тип Variant.



    Chr$

    ChrB$
    *Command$

    CurDir$

    Date$

    Dir$

    Error$

    Format$

    Hex$

    Input$

    InputB$

    LCase$

    Left$

    LeftB$

    LTrim$

    Mid$

    MidB$

    Oct$

    Right$

    RightB$

    RTrim$

    Space$

    Str$

    String$

    Time$

    Trim$

    Ucase$
    * Функция доступна не во всех приложениях.

    Время жизни переменных

    Временем жизни переменной называется время, в течение которого переменная может иметь значение. Значение переменной может меняться на протяжении ее времени жизни, но в течение этого времени она обязательно имеет какое-либо. Когда переменная теряет область определения, она более не имеет значения.
    В начале выполнения процедуры все переменные инициализируются. Числовая переменная получает значение 0, строка переменной длины получает значение пустой строки (""), а строка фиксированной длины заполняется ASCII символом 0 или Chr(0). Переменные типа Variant получают при инициализации значение Empty. Каждый элемент массива переменных с определяемым пользователем типом при инициализации получает значение, которое он получил бы, если бы являлся одиночной переменной.
    При описании объектной переменной для нее выделяется память, но ее значение определяется как Nothing до тех пор, пока ей не присвоена ссылка на объект с помощью инструкции Set.
    Если значение переменной не изменяется во время выполнения программы, она сохраняет значение, полученное при инициализации, до тех пор, пока не потеряет область определения.
    Переменная, описанная с помощью инструкции Dim на уровне процедуры, сохраняет значение до окончания выполнения процедуры. Если процедура вызывает другие процедуры, переменная сохраняет свое значение, пока не закончится выполнение и этих процедур.
    Если переменная уровня процедуры описана с помощью ключевого слова Static, она сохраняет свое значение до тех пор, пока программа выполняется в каком-либо модуле. По завершении работы всей программы переменная теряет свою область определения и свое значение. Ее время жизни совпадает с временем жизни переменной уровня модуля.
    Переменная уровня модуля отличается от статической переменной. В стандартном модуле или в модуле класса она сохраняет свое значение до завершения выполнения программы. В модуле класса она сохраняет значение пока существует экземпляр этого класса. Переменные уровня модуля занимают память, пока их значения не удалены, поэтому их следует использовать только при необходимости.
    Если перед инструкциями Sub или Function имеется ключевое слово Static, значения всех переменных уровня процедуры сохраняются между вызовами процедуры.

    Выполнение программы с установкой свойств

    Допускается создание процедур Property Let, Property Set и Property Get с одним и тем же именем. Таким образом создается группа связанных процедур, работающих совместно. Имя, данное процедуре Property, не может использоваться в качестве имени процедур Sub и Function, переменой или определяемого пользователем типа данных.
    Инструкция Property Let позволяет создать процедуру, которая задает значение свойства. Примером может служить процедура Property, которая создает свойство инвертирования точечного рисунка в форме. Ниже представлен синтаксис вызова процедуры Property Let:
    Form1.Inverted = True
    Реальная работа по инвертированию точечного рисунка в форме выполняется в процедуре Property Let:
    Private IsInverted As Boolean
    Property Let Inverted(X As Boolean)
    IsInverted = X
    If IsInverted Then
    :
    (statements)
    Else
    (statements)
    End If
    End Property
    Переменная уровня формы IsInverted содержит значение этого свойства. Если она описана как Private, пользователь может изменить ее только с помощью процедуры Property Let. Рекомендуется использовать имя, которое облегчает понимание того, что переменная использована для этого свойства.
    Процедура Property Get свойства Inverted:
    Property Get Inverted() As Boolean
    Inverted = IsInverted
    End Property
    Процедуры-свойства упрощают выполнение программы одновременно с присвоением значения свойства. Они могут использоваться для выполнения следующих операций:
    Определение значения свойства до того, как оно присвоено.
    Присвоение свойства на основе нового значения.

    Вызов процедур Property

    В следующей таблице приводится синтаксис для вызова процедур-свойств:


    Процедура
    Синтаксис
    Property Let
    [объект.]свойство(аргументы)] = аргумент
    Property Get

    переменная = [объект.]свойство(аргументы)]
    Property Set
    Set [объект.]свойство[.(аргументы)] = переменная
    При вызове процедур Property Let или Property Set всегда имеется один аргумент справа от знака равенства (=).
    При описании процедур Property Let или Property Set с несколькими аргументами Visual Basic передает крайний справа аргумент последнему аргументу в описании Property Let или Property Set. Например, следующая диаграмма показывает как аргументы в вызове процедуры Property сопоставляются с аргументами в описании Property Let:
    Вызов процедур Property
    На практике процедуры с несколькими аргументами используются только для создания массивов свойств.

    Вызов процедур с одинаковыми именами

    Вызов процедуры, находящейся в любом модуле одного проекта, осуществляется так же, как вызов процедуры в активном модуле. Однако если два (или более) модуля содержат процедуры с одинаковыми именами, необходимо явно указать имя модуля в инструкции вызова процедуры, как показано в следующем примере:
    Sub Main()
    Module1.MyProcedure
    End Sub
    Если две разные процедуры в двух различных проектах названы одинаковыми именами, то при вызове этих процедур необходимо явно указать имя проекта. Например, следующая процедура вызывает процедуру Main в модуле MyModule в проекте MyProject.vbp.
    Sub Main()
    [MyProject.vbp].[MyModule].Main
    End Sub
    Примечание. Разные приложения имеют различные имена для проекта. Например в Microsoft Access проект называется базой данных (.mdb); а в Microsoft Excel он называется книгой Excel (.xls).
    Правила вызова процедур
    При переименовании модуля или проекта необходимо изменить имя данного модуля или проекта во всех инструкциях вызова; в противном случае Visual Basic не сможет найти вызываемую процедуру. Чтобы найти и заменить текст в модуле, можно использовать команду Заменить в меню Правка.
    Для предотвращения конфликта имен между адресуемыми проектами рекомендуется давать процедурам уникальные имена. Тогда можно вызывать процедуры без указания проекта или модуля.

    Вызов процедур Sub и Function

    Чтобы вызвать процедуру Sub из другой процедуры, следует указать имя этой процедуры и значения для всех требуемых аргументовs. Использование инструкции Call не обязательно, однако если она все же используется, аргументы должны быть заключены в скобки.
    Можно использовать процедуру Sub для организации других процедур, это облегчает процесс восприятия этих процедур и их отладку. В следующем примере процедура Sub Main вызывает процедуру Sub MultiBeep, передавая значение 56 для ее аргумента. По окончании работы MultiBeep управление возвращается к Main, и Main вызывает процедуру Sub Message. Message показывает окно сообщения, когда пользователь выбирает мышью OK, управление возвращается к Main, и Main завершается.
    Sub Main()
    MultiBeep 56
    Message
    End Sub
    Sub MultiBeep(numbeeps)
    For counter = 1 To numbeeps
    Beep
    Next counter
    End Sub
    Sub Message()
    MsgBox "Пора сделать перерыв!"
    End Sub
    Вызов процедур Sub с несколькими аргументами
    Следующий пример показывает два способа вызова процедуры Sub с несколькими аргументами. Когда процедура HouseCalc вызывается во второй раз, аргументы заключаются в скобки, поскольку используется инструкция Call.
    Sub Main()
    HouseCalc 99800, 43100
    Call HouseCalc(380950, 49500)
    End Sub
    Sub HouseCalc(price As Single, wage As Single)
    If 2.5 * wage <= 0.8 * price Then
    MsgBox "Этот дом слишком дорогой."
    Else
    MsgBox "Цена этого дома приемлема."
    End If
    End Sub
    Использование скобок при вызове процедур Function
    Чтобы получить возвращаемое значение функции, надо присвоить эту функцию переменной и заключить аргументы в скобки, как показано в следующем примере.
    Answer3 = MsgBox("Вам нравится Ваша зарплата?", 4, "Question 3")
    Если возвращаемое значение функции не требуется, можно вызвать функцию точно так же, как процедуру Sub. Надо опустить скобки, указать список аргументов и не присваивать функцию переменной, как показано в следующем примере.
    MsgBox "Конец задачи!", 0, "Список задач"
    Внимание! Наличие скобок в предыдущем примере приведет к синтаксической ошибке.
    Передача именованных аргументов
    Инструкция в процедуре Sub или Function может передавать значения вызываемым процедурам с помощью именованных аргументов. Именованные аргументы можно перечислять в любом порядке. Именованный аргумент состоит из имени аргумента, за которым следует двоеточие, знак равенства (:=) и значение, присваиваемое аргументу.
    В следующем примере вызывается функция MsgBox с помощью именованных аргументов без возвращаемого значения.
    MsgBox Title:="Список задач", Prompt:="Конец задачи!"
    Следующий пример вызывает функцию MsgBox с помощью именованных аргументов. Возвращаемое значение присваивается переменной answer3.
    answer3 = MsgBox(Title:="Question 3", _
    Prompt:="Вам нравится Ваша зарплата?", Buttons:=4)

    Меню Visual Basic

    Инструкции описания

    Инструкции описания используются для описания процедур, переменных, массивов и констант и для присвоения им имен. При описании процедур, переменных или констант задается также их область определения, которая зависит от того, где расположено описание и какие ключевые слова при этом использованы.
    Следующий пример содержит три описания.
    Sub ApplyFormat()
    Const limit As Integer = 33
    Dim myCell As Range
    ' Другие инструкции
    End Sub
    Инструкция Sub (с парной ей инструкцией End Sub) описывает процедуру с именем ApplyFormat. Все инструкции, заключенные между Sub и End Sub выполняются всегда, когда вызывается или выполняется процедура ApplyFormat.
    Процедура Sub
    Инструкция Const описывает константу limit, задавая ей тип данных Integer и значение 33.
    Описание констант
    Инструкция Dim описывает переменную myCell. Тип данных объектный, в данном случае это объект Microsoft Excel Range. Переменную можно описать как объект, представленный в текущем приложении. Инструкции Dim относятся к типу инструкций, используемых для описания переменных. Другие ключевые слова, используемые для описания, - это ReDim, Static, Public, Private, и Const.
    Описание переменных

    Инструкции присвоения

    Инструкции присвоения присваивают выражение переменной или константе. Инструкции присвоения всегда включают знак равенства (=). В следующем примере переменной yourName присваивается возвращаемое значение функции InputBox.
    Sub Question()
    Dim yourName As String
    yourName = InputBox("Как Ваше имя?")
    MsgBox "Ваше имя - " & yourName
    End Sub
    Инструкция Let необязательна и чаще всего опускается. К примеру, предыдущую инструкцию присвоения можно написать следующим образом:
    Let yourName = InputBox("Как Ваше имя?").
    Для присвоения объекта переменной, описанной как объект, применяется инструкция Set. Ключевое слово Set обязательно. В следующем примере инструкция Set присваивает диапазон на листе Sheet1 объектной переменной myCell:
    Sub ApplyFormat()
    Dim myCell As Range
    Set myCell = Worksheets("Sheet1").Range("A1")
    With myCell.Font
    .Bold = True
    .Italic = True
    End With
    End Sub
    Инструкции, задающие значение свойства также являются инструкциями присвоения. В следующем примере задается свойство Bold объекта Font для активной ячейки:
    ActiveCell.Font.Bold = True

    Инструкция Do...Loop

    Инструкция Do...Loop используется для выполнения наборов инструкций неопределенное число раз. Набор инструкций повторяется, пока условие имеет значение True, либо пока оно не примет значение True.
    Повторение инструкций, пока условие имеет значение True
    Имеется два способа проверки условия в инструкции Do...Loop с помощью ключевого слова While: условие проверяется до входа в цикл; условие проверяется после хотя бы однократного выполнения цикла.
    В следующей процедуре ChkFirstWhile условие проверяется до входа в цикл. Если myNum задать равным 9 вместо 20, инструкции внутри цикла выполняться не будут. В процедуре ChkLastWhile инструкции внутри цикла выполняются только один раз до того как условие примет значение False.
    Sub ChkFirstWhile()
    counter = 0
    myNum = 20
    Do While myNum > 10
    myNum = myNum - 1
    counter = counter + 1
    Loop
    MsgBox "Выполнено " & counter & " итераций цикла."
    End Sub
    Sub ChkLastWhile()
    counter = 0
    myNum = 9
    Do
    myNum = myNum - 1
    counter = counter + 1
    Loop While myNum > 10
    MsgBox "В цикле выполнено " & counter & " итераций."
    End Sub
    Повторение инструкций, пока условие не примет значение True
    Имеется два способа проверки условия в инструкции Do...Loop с помощью ключевого слова Until: условие проверяется до входа в цикл (как продемонстрировано в процедуре ChkFirstUntil), или условие проверяется после хотя бы однократного выполнения цикла (как показано в процедуре ChkLastUntil). Итерации продолжаются, пока условие имеет значение False.
    Sub ChkFirstUntil()
    counter = 0
    myNum = 20
    Do Until myNum = 10
    myNum = myNum - 1
    counter = counter + 1
    Loop
    MsgBox "В цикле выполнено " & counter & " итераций."
    End Sub
    Sub ChkLastUntil()
    counter = 0
    myNum = 1
    Do
    myNum = myNum + 1
    counter = counter + 1
    Loop Until myNum = 10
    MsgBox "В цикле выполнено " & counter & " итераций."
    End Sub
    Выход из цикла Do...Loop
    Инструкцию Do...Loop можно завершить с помощью инструкции Exit Do. Например, для завершения бесконечного цикла используется инструкция Exit Do в блоке True инструкции If...Then...Else или инструкции Select Case. Если условие имеет значение False, цикл будет выполняться как обычно.
    В следующем примере переменной myNum присваивается значение, приводящее к бесконечному циклу. Инструкция If...Then...Else проверяет условие на myNum, а затем завершает инструкцию Do...Loop, предотвращая таким образом бесконечный цикл.
    Sub ExitExample()
    counter = 0
    myNum = 9
    Do Until myNum = 10
    myNum = myNum - 1
    counter = counter + 1
    If myNum < 10 Then Exit Do
    Loop
    MsgBox "В цикле выполнено " & counter & " итераций."
    End Sub
    Примечание. Для прекращения бесконечного цикла используются клавиши ESC или CTRL+BREAK.

    Инструкция For Each...Next

    Инструкция For Each...Next повторяет набор инструкций для всех объектов семейства или для всех элементов массива. Visual Basic автоматически задает переменную во время каждого выполнения цикла. Например, в следующей процедуре закрываются все формы, за исключением формы, содержащей текущую процедуру.
    Sub CloseForms()
    For Each frm In Application.Forms
    If frm.Caption <> Screen. ActiveForm.Caption Then frm.Close
    Next
    End Sub
    В следующих строках программы выполняется цикл для всех элементов массива, и их значения присваиваются индексной переменной I.
    Dim TestArray(10) As Integer, I As Variant
    For Each I In TestArray
    TestArray(I) = I
    Next I
    Циклы по диапазонам ячеек
    Инструкция For Each...Next используется также для организации циклов по диапазонам ячеек. Следующая процедура выполняет цикл по диапазону A1:D10 на листе Sheet1 и присваивает любому числу, имеющему абсолютное значение меньше 0.01, значение 0 (ноль).
    Sub RoundToZero()
    For Each myObject in myCollection
    If Abs(myObject.Value) < 0.01 Then myObject.Value = 0
    Next
    End Sub
    Выход из цикла For Each...Next до его завершения
    Допускается выход из цикла For Each...Next с помощью инструкции Exit For. Например, если возникает ошибка, для ее проверки можно использовать инструкцию Exit For в блоке True инструкции If...Then...Else или инструкции Select Case. Если ошибки нет, инструкция If...Then...Else имеет значение False, и выполнение цикла продолжается как ожидалось.
    В следующем примере проверяется первая ячейка диапазона A1:B5, которая не содержит числового значения. Когда такая ячейка найдена, на экран выводится сообщение, и Exit For завершает цикл.
    Sub TestForNumbers()
    For Each myObject In MyCollection
    If IsNumeric(myObject.Value) = False Then
    MsgBox "Объект не содержит числового значения."
    Exit For
    End If
    Next c
    End Sub

    Инструкция For...Next

    Инструкция For...Next используется для выполнения наборов инструкций указанное число раз. Циклы For используют в качестве счетчика переменную, значение которой увеличивается или уменьшается при каждом выполнении цикла.
    Следующая процедура заставляет компьютер подавать звуковой сигнал 50 раз. Инструкция For определяет счетчик x и его начальное и конечное значения. Инструкция Next изменяет счетчик с шагом 1.
    Sub Beeps()
    For x = 1 To 50
    Beep
    Next x
    End Sub
    Имеется возможность увеличивать или уменьшать значение счетчика на указанную величину с помощью ключевого слова Step. В следующем примере счетчик j изменяется с шагом 2 при каждом выполнении цикла. По завершении цикла total равняется сумме 2, 4, 6, 8 и 10.
    Sub TwosTotal()
    For j = 2 To 10 Step 2
    total = total + j
    Next j
    MsgBox "Сумма равна " & total
    End Sub
    Для уменьшения значения счетчика используется отрицательное значение Step. В этом случае указывается конечное значение, которое должно быть меньше начального значения. В следующем примере счетчик myNum уменьшается на 2 при каждом выполнении цикла. По окончании цикла total равняется сумме 16, 14, 12, 10, 8, 6, 4 и 2.
    Sub NewTotal()
    For myNum = 16 To 2 Step -2
    total = total + myNum
    Next myNum
    MsgBox "Сумма равна " & total
    End Sub
    Примечание. Указание имени счетчика после инструкции Next не обязательно. В предыдущих примерах имя счетчика было указано для облегчения чтения программы.
    Инструкция Exit For дает возможность завершения инструкции For...Next до того, как счетчик достигнет своего конечного значения. Например, если возникает ошибка, для ее проверки можно использовать инструкцию Exit For в блоке True инструкции If...Then...Else или инструкции Select Case. Если ошибки нет, инструкция If...Then...Else имеет значение False, и выполнение цикла продолжается как ожидалось.

    Инструкция If...Then...Else

    Инструкция If...Then...Else выполняет определенные инструкции или наборы инструкций в зависимости от значения условия. Допускаются многократно вложенные инструкции If...Then...Else, имеющие столько уровней вложения, сколько потребуется. Однако для облегчения чтения программы вместо многократно вложенных инструкций If...Then...Else иногда предпочтительнее использовать инструкцию Select Case.
    Выполнение инструкций, когда условие имеет значение True
    Для выполнения только одной инструкции, когда условие имеет значение True, используется однострочный синтаксис инструкции If...Then...Else. Ниже приводится пример однострочного синтаксиса без ключевого слова Else.
    Sub FixDate()
    myDate = #2/13/95#
    If myDate < Now Then myDate = Now
    End Sub
    Для выполнения нескольких строк программы используется многострочный синтаксис. Этот синтаксис содержит инструкцию End If как показано в следующем примере:
    Sub AlertUser(value as Long)
    If value = 0 Then
    AlertLabel.ForeColor = "Красный"
    AlertLabel.Font.Bold = True
    AlertLabel.Font.Italic = True
    End If
    End Sub
    Выполнение одних инструкций, когда условие истинно, и других - когда ложно
    Инструкция If...Then...Else используется также для задания двух блоков исполняемых инструкций: один блок выполняется, если условие имеет значение True, а другой - если оно имеет значение False.
    Sub AlertUser(value as Long)
    If value = 0 Then
    AlertLabel.ForeColor = vbRed
    AlertLabel.Font.Bold = True
    AlertLabel.Font.Italic = True
    Else
    AlertLabel.Forecolor = vbBlack
    AlertLabel.Font.Bold = False
    AlertLabel.Font.Italic = False
    End If
    End Sub
    Проверка второго условия, если первое условие имеет значение False
    Инструкция ElseIf добавляется к If...Then...Else для проверки второго условия, если первое условие имеет значение False. Например в следующей процедуре Function вычисляется премия на основе оценки проделанной работы. Инструкция, следующая за Else, выполняется, если условия во всех инструкциях If и ElseIf имеют значения False.
    Function Bonus(performance, salary)
    If performance = 1 Then
    Bonus = salary * 0.1
    ElseIf performance = 2 Then
    Bonus = salary * 0.09
    ElseIf performance = 3 Then
    Bonus = salary * 0.07
    Else
    Bonus = 0
    End If
    End Function

    Инструкция Select Case

    Инструкция Select Case может служить альтернативой инструкции ElseIf в If...Then...Else при оценке одного выражения, которое имеет несколько возможных значений. В то время как If...Then...Else для каждой инструкции ElseIf оценивает разные выражения, инструкция Select Case оценивает выражение только один раз, в начале управляющей структуры.
    В следующем примере Select Case оценивает аргумент performance, который передается в процедуру. Следует отметить, что каждая инструкция Case несколько значений, диапазон значений или комбинацию значений и операторов сравнения. Необязательная инструкция Case Else выполняется, если Select Case не находит подходящего значения ни в одной из инструкций Case.
    Function Bonus(performance, salary)
    Select Case performance
    Case 1
    Bonus = salary * 0.1
    Case 2, 3
    Bonus = salary * 0.09
    Case 4 To 6
    Bonus = salary * 0.07
    Case Is > 8
    Bonus = 100
    Case Else
    Bonus = 0
    End Select
    End Function

    Инструкция With

    Инструкция With позволяет указывать объект или определяемый пользователем тип данных только один раз для последовательности инструкций. Инструкция With ускоряет выполнение процедур и помогает избежать повторного задания имени объекта.
    В следующем примере диапазон ячеек заполняется числовым значением 30, затем устанавливается полужирный шрифт и для внутренней области ячеек задается желтый цвет.
    Sub FormatRange()
    With Worksheets("Sheet1").Range("A1:C10")
    .Value = 30
    .Font.Bold = True
    .Interior.Color = RGB(255, 255, 0)
    End With
    End Sub
    Для увеличения эффективности программы возможно создание вложенных инструкций With. В следующем примере в ячейку A1 вставляется формула, и затем форматируется шрифт.
    Sub MyInput()
    With Workbooks("Book1").Worksheets("Sheet1").Cells(1, 1)
    .Formula = "=SQRT(50)"
    With .Font
    .Name = "Arial"
    .Bold = True
    .Size = 8
    End With
    End With
    End Sub

    Исполняемые инструкции

    Исполняемая инструкция инициирует действие. Она может выполнить метод или функцию, а также может организовать повторение или ветвление блоков программы. Исполняемые инструкции часто содержат математические или условные операторы.
    В следующем примере используется инструкция For Each...Next для итераций по всем ячейкам диапазона с именем MyRange на листе Sheet1 текущей книги Microsoft Excel. Переменная c представляет собой ячейку в семействе ячеек, содержащемся в MyRange.
    Sub ApplyFormat()
    Const limit As Integer = 33
    For Each c In Worksheets("Sheet1").Range("MyRange").Cells
    If c.Value > limit Then
    With c.Font
    .Bold = True
    .Italic = True
    End With
    End If
    Next c
    MsgBox "Все сделано!"
    End Sub
    Инструкция If...Then...Else в этом примере проверяет значение ячейки. Если значение больше 33, инструкция With задает свойства Bold и Italic объекту Font для этой ячейки. Инструкция If...Then...Else завершается инструкцией End If.
    Инструкция With облегчает набор текста программы, поскольку все инструкции, которые она содержит, автоматически выполняются для объекта, следующего за ключевым словом With.
    Инструкция Next вызывает следующую ячейку семейства, содержащегося в MyRange.
    Функция MsgBox (которая отображает встроенное окно диалога Visual Basic) выводит на экран сообщение о том, что выполнение процедуры Sub закончилось.

    Использование констант

    Программа может содержать часто встречающиеся постоянные значения, или же она может зависеть от некоторых чисел, которые запоминаются с трудом и не имеют очевидного смысла. В этом случае процесс чтения и эксплуатации программы можно упростить с помощью использования констант. Константа представляет собой значащее имя для числа или строки, которые не изменяются. В отличие от переменной константу нельзя модифицировать или присвоить ей новое значение.
    Имеется три типа констант:
    Внутренние константы, или константы, определяемые системой. Значения таких констант берутся из приложений и элементов управления. В других приложениях, имеющих библиотеки объектов, таких как Microsoft Access, Microsoft Excel и Microsoft Project, также предоставляется список констант, которые могут использоваться с методами, объектами и свойствами этих приложений. Список констант, предоставляемых для индивидуальных библиотек объектов, можно найти в окне Просмотр объектов.
    Константы языка Visual Basic перечислены в библиотеках Visual Basic (VB), Visual Basic для приложений (VBA) и в библиотеке DAO (Data Access Object).
    Примечание. Язык Visual Basic распознает константы в приложениях, созданных с помощью предыдущих версий Visual Basic или Visual Basic для приложений. Пользователь может обновить свои константы, чтобы они соответствовали списку в окне просмотра объектов. Константы, перечисленные в окне просмотра объектов, не требуют описания в приложении пользователя.
    Символические константы, или константы, определяемые пользователем, описываются с помощью инструкции Const.
    Условные константы компилятора описываются с помощью инструкции #Const.
    В предыдущих версиях Visual Basic имена констант обычно изображались прописными буквами со знаком подчеркивания. Например:
    TILE_HORIZONTAL
    В данной версии внутренние константы именуются таким образом, чтобы избежать ситуаций, когда константам с одинаковыми именами в разных библиотеках объектов присваиваются различные значения. Имена констант задаются двумя способами:

    С помощью префиксов

    С помощью ссылок на библиотеку

    Определение констант с помощью префиксов

    Внутренние константы, определенные для любых объектами, записываются в формате со смешанным регистрами с двухбуквенным префиксом, означающим библиотеку объектов, которая описывает константу. Константы из библиотек объектов Visual Basic и Visual Basic для приложений имеют префикс "vb"; константы из библиотеки объектов Data Access Object имеют префикс "db"; а константы из библиотеки объектов Microsoft Excel имеют префикс "xl". В следующем примере проиллюстрировано, как меняются префиксы для специальных элементов управления, в зависимости от библиотеки типов.

    vbTileHorizontal

    dbAppendOnly

    xlDialogborder

    grdAlignCenter

    Определение констант по ссылке через библиотеку

    Допускается также ссылка на константу с помощью следующего синтаксиса:

    [библиотека.] [модуль.]константа

    Синтаксис для определения константы состоит из трех частей:
    Часть

    Описание



    библиотека

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



    модуль

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



    константа

    Имя, определенное для константы в библиотеке типов.

    Например:

    Threed.LeftJustify

    Использование массивов

    Имеется возможность описать массив для работы с набором значений одного типа данных. Массив представляет собой одну переменную с множеством ячеек памяти для хранения значений, тогда как обычная переменная имеет только одну ячейку, в которой может храниться только одно значение. При необходимости сослаться на все элементы массива можно ссылаться на массив как целое. Возможны также ссылки на его отдельные элементы.
    Например, для записи денежных затрат на каждый день календарного года можно описать один массив с 365 элементами, вместо того, чтобы описывать 365 переменных. Каждый элемент массива содержит одно значение. Следующая инструкция описывает массив curExpense с 365 элементами. По умолчанию индексация массива начинается с нуля, так что верхняя граница массива - 364, а не 365.
    Dim curExpense(364) As Currency
    Чтобы задать значение отдельного элемента, надо указать его индекс. В следующем примере всем элементам массива присваивается исходное значение 20.
    Sub FillArray()
    Dim curExpense(364) As Currency
    Dim intI As Integer
    For intI = 0 to 364
    curExpense(intI) = 20
    Next
    End Sub
    Изменение нижней границы индексов
    Для того, чтобы изменить индекс первого элемента массива, по умолчанию равный 0, на 1, можно использовать инструкцию Option Base в начале модуля. В следующем примере инструкция Option Base изменяет индекс первого элемента , а инструкция Dim описывает массив curExpense с 365 элементами.
    Option Base 1
    Dim curExpense(365) As Currency
    Допускается также явное задание нижней границы индексов массива с помощью предложения To, как продемонстрировано в следующем примере.
    Dim curExpense(1 To 365) As Currency
    Dim strWeekday(7 To 13) As String
    Запоминание значений Variant в массивах
    Создать массив значений Variant можно двумя способами. Первый способ - это описание массива с типом данных Variant, как показано в следующем примере:
    Dim varData(3) As Variant
    varData(0) = "Мария Петрова"
    varData(1) = "Зеленая, 19"
    varData(2) = 38
    varData(3) = Format("06-09-1952", "General Date")

    Другой способ - это присвоение массива, возвращаемого функцией Array, переменной Variant, как продемонстрировано в следующем примере.

    Dim varData As Variant

    varData = Array("Иван Петров", "Зеленая, 19", 38, _

    Format("06-09-1952", "General Date"))

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

    MsgBox "Записаны данные для " & varData(0) & "."

    Использование многомерных массивов

    В языке Visual Basic допускается описание массивов, имеющих до 60 размерностей. Например, следующая инструкция описывает двумерный массив 5 на 10.

    Dim sngMulti(1 To 5, 1 To 10) As Single

    Если рассматривать этот массив как матрицу, то его первый аргумент представляет строки, а второй - столбцы.

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

    Sub FillArrayMulti()

    Dim intI As Integer, intJ As Integer

    Dim sngMulti(1 To 5, 1 To 10) As Single

    ' Заполнение массива.

    For intI = 1 To 5

    For intJ = 1 To 10

    sngMulti(intI, intJ) = intI * intJ

    Debug.Print sngMulti(intI, intJ)

    Next intJ

    Next intI

    End Sub

    Использование скобок в программе

    Процедуры Sub, встроенные инструкции и некоторые методы не возвращают значений, и поэтому аргументы не заключаются в скобки. Например:
    MySub "stringArgument", integerArgument
    Процедуры Function, встроенные функции и некоторые методы возвращают значения, которые не используются. Если возвращаемое значение игнорируется, скобки не ставятся, и функция вызывается так же, как процедура Sub: скобки опускаются, перечисляются все аргументы, и функция не присваивается переменной. Например:
    MsgBox "Конец задачи!", 0, "Список задач"
    Чтобы получить возвращаемое значение функции, надо заключить аргументы в скобки, как показано в следующем примере.
    Answer3 = MsgBox("Вам нравится Ваша зарплата?", 4, "Question 3")
    Инструкция в процедурах Sub или Function может передавать значения вызываемой процедуре с помощью именованных аргументов. Правила использования скобок применимы как при наличии, так и при отсутствии именованных аргументов. Если используются именованные аргументы, они перечисляются в любом порядке, и необязательные аргументы опускаются. За именованным аргументом всегда следует двоеточие со знаком равенства (:=), а затем значение аргумента
    В следующем примере вызывается функция MsgBox с помощью именованных аргументов, но возвращаемое значение не используется:
    MsgBox Title:="Список задач", Prompt:="Конец задачи!"
    В следующем примере вызывается функция MsgBox с помощью именованных аргументов. Возвращаемое значение присваивается переменной answer3:
    answer3 = MsgBox(Title:="Question 3", _
    Prompt:="Вам нравится Ваша зарплата?", Buttons:=4)

    Эффективное использование типов данных

    Если обратное не указано, неописанные переменные приобретают тип данных Variant . Этот тип данных упрощает написание программ, но его использование не всегда является наиболее эффективным.
    Следует предусмотреть применение других типов данных, если:
    Программа имеет большой размер и очень много переменных.
    Требуется как можно более быстрое выполнение программы.
    Выполняется прямая запись данных в файлы с произвольным доступом.
    Кроме типа Variant поддерживаются типы данных Byte, Boolean, Integer, Long, Single, Double, Currency, Decimal, Date, Object и String. Для описания переменной определенного типа используется инструкция Dim, например:
    Dim X As Integer
    Эта инструкция описывает переменную X как Integer - целые числа от -32768 и до 32767. При попытке присвоить X число, выходящее за пределы этого диапазона, возникает ошибка. При присваивании X дробного числа, выполняется округление. Например:
    X = 32768' Вызывает ошибку.
    X = 5.9' Задает для x значение 6.

    Массивы параметров

    Для передачи аргументов в процедуру может использоваться массив параметров. При описании процедуры не требуется указывать число элементов такого массива.
    Для обозначения массива параметров используется ключевое слово ParamArray. Такой массив описывается как массив типа Variant и всегда представляет последние элементы из списка аргументов в описании процедуры .
    Ниже приводится пример описания процедуры с массивом параметров.
    Sub AnyNumberArgs(strName As String, ParamArray intScores() As Variant)
    Dim intI As Integer
    Debug.Print strName; " Scores"
    ' Использует функцию UBound для определения верхней границы массива.
    For intI = 0 To UBound(intScores())
    Debug.Print " "; intScores(intI)
    Next intI
    End Sub
    В следующих строках приведены примеры вызова этой процедуры.
    AnyNumberArgs "Иван", 10, 26, 32, 15, 22, 24, 16
    AnyNumberArgs "Мария", "Высокий", "Низкий", "Средний", "Высокий"

    Область определения и видимость

    Область определения определяет доступность переменной, константы, или процедуры для других процедур. Имеется три уровня областей определения: уровень процедуры, личный уровень модуля и общий уровень модуля.
    Область определения переменной определяется при описании этой переменной. Рекомендуется явно описывать все переменные для предотвращения ошибок, связанных с конфликтами имен между переменными с различными областями определения.
    Область определения уровня процедуры
    Переменная или константа, определенная внутри процедуры, недоступна вне этой процедуры .Она может использоваться только процедурой, которая содержит описание этой переменной. В первой процедуре следующего примера в окне сообщения содержится строка. Во второй процедуре окно сообщения останется пустым, так как переменная strMsg является локальной в первой процедуре.
    Sub LocalVariable()
    Dim strMsg As String
    strMsg = "Эта переменная не может использоваться вне этой процедуры."
    MsgBox strMsg
    End Sub
    Sub OutsideScope()
    MsgBox strMsg
    End Sub
    Область определения уровня модуля
    Переменная или константа уровня модуля может быть определена в разделе описаний модуля. Переменная уровня модуля может быть общей или частной. Общие переменные доступны для всех процедур во всех модулях проекта; личные переменные доступны только для процедур данного модуля. Переменные, описанные с инструкцией Dim в разделе описаний, по умолчанию определяются как частные. Однако если переменной предшествует ключевое слово Private, область определения задается программой пользователя.
    В следующем примере строковая переменная strMsg доступна для всех процедур, описанных в модуле. При вызове второй процедуры в диалоговом окне выводится значение строковой переменной.
    ' Add following to Declarations section of module.
    Private strMsg sAs String
    Sub InitializePrivateVariable()
    strMsg = "Эта переменная не может использоваться вне этого модуля."
    End Sub
    Sub UsePrivateVariable()
    MsgBox strMsg
    End Sub
    Примечание. Общие процедуры в стандартном модуле или модуле класса доступны для любого адресующего проекта. Для ограничения области определения всех процедур в модуле текущего проекта в раздел описаний модуля помещается инструкция Option Private Module. Общие переменные и процедуры остаются доступными для других процедур текущего проекта, но не для адресующего проекта.

    Область определения общего уровня модуля

    Если переменная уровня модуля описана как общая, то она доступна для всех процедур проекта. В следующем примере строковая переменная strMsg может использоваться всеми процедурами во всех модулях проекта.

    ' Включает в раздел описаний модуля.

    Public strMsg As String

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

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

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

    Правила присвоения имен в языке Visual Basic

    При присвоении имен процедурам, константам, переменным, и аргументам в модулеVisual Basic используются следующие правила:
    Имена должны начинаться с буквы.
    Имя не может содержать пробел, точку (.), восклицательный знак (!) или символы @, &, $, #.
    Имена не должны содержать более 255 символов.
    Как правило, не следует использовать имена, совпадающие с названиями функций, инструкций, и методов языка Visual Basic, так как при этом прекращается выделение в тексте одноименных ключевых слов языка. Чтобы использовать встроенные функции языка, инструкции или методы, имена которых конфликтуют с присвоенным пользователем именем, их необходимо явно указывать. Для этого перед именем встроенной функции, инструкции или метода, должно стоять имя связанной с ними библиотеки типов. Например, если имеется переменная с именем Left, то функция Left должна вызываться как VBA.Left.
    Не допускается использование повторяющихся имен на одном уровне области определения. Нельзя, например, описать две переменных с именем age в одной процедуре. Однако описание личной переменной age и переменной уровня процедуры age внутри одного модуля допустимо.
    Примечание. В языке Visual Basic не различаются строчные и прописные буквы, однако в инструкции описания сохраняются прописные буквы.

    Процедура Function

    Процедура Function представляет собой последовательность инструкций языка Visual Basic, ограниченных инструкциями Function и End Function. Процедура Function подобна процедуре Sub, однако в отличие от последней она возвращает значения. Процедура Function может получать аргументы, как например константы, переменные, или выражения, передаваемые ей вызывающей процедурой. Если процедура Function не имеет аргументов, ее инструкция Function должна содержать пустые скобки. Возврат значения осуществляется путем его присвоения имени функции в одной или нескольких инструкциях процедуры.
    В следующем примере функция Celsius пересчитывает градусы Фаренгейта в градусы Цельсия. Когда функция вызывается процедурой Main, переменная, содержащая значение аргумента, передается функции. Результат вычислений возвращается вызывающей процедуре и выводится в окно сообщения.
    Sub Main()
    temp = Application.InputBox(Prompt:= _
    "Введите температуру в градусах Фаренгейта.", Type:=1)
    MsgBox "Температура равна " & Celsius(temp) & " градусов Цельсия."
    End Sub
    Function Celsius(fDegrees)
    Celsius = (fDegrees - 32) * 5 / 9
    End Function

    Процедура Property

    Процедура Property представляет собой последовательность инструкций языка Visual Basic, которые позволяют программисту создавать собственные свойства и оперировать с ними.
    Процедуры Property создают допускающие только чтение свойства для форм, стандартных модулей и модулей класса.
    Процедуры Property следует использовать вместо переменных Public в программе, которая должна выполняться после задания значение свойства.
    В отличие от переменных Public процедуры Property могут иметь справочные строки, присвоенные им в окне Просмотр объектов.
    Когда создается процедура Property, она становится свойством модуля, содержащего эту процедуру. В языке Visual Basic имеются три следующих типа процедур Property:

    Процедура
    Описание
    Property Let
    Присваивает значение свойству.
    Property Get
    Возвращает значение свойства.
    Property Set
    Задает ссылку на объект.
    Синтаксис процедуры Property :
    [Public | Private] [Static] Property имя_свойства_ [(список_аргументов)] [As тип]
    инструкции
    End Property
    Процедуры Property обычно используются попарно: Property Let с Property Get и Property Set с Property Get. Описание одной процедуры Property Get подобно описанию свойства, доступного только для чтения. Использование всех трех процедур Property вместе полезно только для переменных Variant, так как только могут содержать как объект, так и другую информацию о типах данных. В отличие от Property Let процедура Property Set предназначена для работы с объектами.
    Обязательные аргументы описания процедур Property представлены в следующей таблице:

    Процедура
    Синтаксис описания
    Property Get
    Property Get имя(1, :, n) As тип
    Property Let
    Property Let имя(1, :,,,, n, n+1)
    Property Set
    Property Set имя(1, :, n, n+1)
    Первый аргумент и все следующие вплоть до последнего (1, :, n) должны иметь одно и то же имя и тип данных во всех одноименных процедурах Property.
    Описание процедуры Property Get имеет на один аргумент меньше, чем связанные описания Property Let и Property Set. Тип данных процедуры Property Get должен быть тем же самым, что и тип последнего аргумента (n+1) в связанных описаниях Property Let и Property Set. Например, если описывается следующая процедура Property Let, в описании Property Get должны использоваться аргументы с тем же самым именем и типом данных, как аргументы в процедуре Property Let.
    Property Let Names(intX As Integer, intY As Integer, varZ As Variant)
    'Выполняемая инструкция.
    End Property
    Property Get Names(intX As Integer, intY As Integer) As Variant
    'Выполняемая инструкция.
    End Property
    Тип данных последнего аргумента в описании Property Set должен быть или объектным типом или Variant.

    Процедура Sub

    Sub Процедура Sub представляет собой последовательность инструкций языка Visual Basic, ограниченных инструкциями Sub и End Sub, которая выполняет действия, но не возвращает значение. Процедура Sub может получать аргументы, как например константы, переменные, или выражения, передаваемые ей вызывающей процедурой. Если процедура Sub не имеет аргументов, инструкция Sub должна содержать пустые скобки.
    В следующей процедуре Sub содержатся комментарии, объясняющие каждую строк.
    ' Описывает процедуру с именем GetInfo
    ' Эта процедура Sub не имеет аргументов
    Sub GetInfo()
    ' Описывает строковую переменную с именем answer
    Dim answer As String
    ' Присваивает переменой answer возвращаемое значение функции
    answer = InputBox(Prompt:="Как Ваше имя?")
    ' Условная инструкция If...Then...Else
    If answer = Empty Then
    ' Вызов функции MsgBox
    MsgBox Prompt:="Введите имя."
    Else
    ' Функция MsgBox объединена с переменной answer
    MsgBox Prompt:="Имя переменной " & answer
    ' Завершает инструкцию If...Then...Else
    End If
    ' Завершает процедуру Sub
    End Sub

    Работа с приложениями

    Язык Visual Basic позволяет создавать новые объекты и загружать существующие объекты из многих приложений Microsoft. Другие приложения также могут предоставлять объекты, которые пользователь может создавать с помощью Visual Basic. Дополнительные сведения содержатся в документации приложения.
    Для создания нового объекта или получения существующего объекта из другого приложения используются функции CreateObject и GetObject:
    ' Запуск Microsoft Excel и создание нового листа.
    Set ExcelWorksheet = CreateObject("Excel.Sheet")
    ' Запуск Microsoft Excel и открытие существующего листа.
    Set ExcelWorksheet = GetObject("SHEET1.XLS")
    ' Запуск Microsoft Word.
    Set WordBasic = CreateObject("Word.Basic")
    Большинство приложений предоставляют также методы Exit или Quit, которые закрывают приложение, независимо от того отображается оно на экране или нет. Дополнительные сведения по объектам, методам и свойствам, предоставляемым приложением содержатся в документации по приложению.
    Некоторые приложения позволяют использовать ключевое слово New для создания объекта любого класса, который существует в библиотеке типов. Например:
    Dim X As New Field
    В данном случае Field является примером класса из библиотеки типов доступа к данным. Новый экземпляр объекта Field создается с помощью этого синтаксиса. Информация о том, какие классы объектов могут быть созданы таким образом, содержится в документации по приложению.

    Синтаксис Visual Basic

    В разделах Справочника Visual Basic по методам, инструкциям или функциям объясняются все элементы синтаксиса, необходимые для правильного использования методов, инструкций или функций. В этих разделах приводятся примеры интерпретации наиболее распространенных элементов синтаксиса.
    Синтаксис метода Activate
    объект.Activate
    В синтаксисе метода Activate слово объект представляет собой прототип для передаваемой информации - в данном случае это программа, возвращающая объект. Слова, выделенные полужирным шрифтом, должны набираться в точности так, как они написаны. Например, следующая процедура активизирует второе окно в активном документе.
    Sub MakeActive()
    Windows(2).Activate
    End Sub
    Синтаксис функции MsgBox
    MsgBox(prompt[, buttons] [, title] [, helpfile, context])
    В синтаксисе функции MsgBox полужирные курсивные слова представляют собой именованные аргументы функции. Аргументы, заключенные в скобки, не обязательны (скобки не набираются в тексте программы на языке Visual Basic). Единственным аргументом, который пользователь должен задать для функции MsgBox, является текст подсказки.
    Аргументы функций и методов могут указываться в программе в соответствии с позицией или по имени. Чтобы указать аргумент в соответствии с позицией, следует придерживаться синтаксиса, т.е. отделять аргументы запятой, например:
    MsgBox "Ответ неверный!",0,"Заголовок окна"
    Указание аргумента по имени состоит из имени аргумента, за которым следуют двоеточие со знаком равенства (:=) и значение аргумента. Именованные аргументы можно указывать в любом порядке, например:
    MsgBox Title:="Заголовок окна", Prompt:="Ответ неверный!"
    Синтаксис функций и некоторых методов содержит аргументы, заключенные в скобки. Эти функции и методы возвращают значения, поэтому необходимо заключать аргументы в скобки, чтобы присвоить значение переменной. Если возвращаемое значение не используется, или аргументы вообще не передаются, скобки не нужны. Методы, которые не возвращают значения, не требуют заключения аргументов в скобки. Эти правила применимы как для позиционных, так и для именованных аргументов.

    В следующем примере значение, возвращаемое функцией MsgBox представляет собой число, обозначающее определенную кнопку, которое запоминается в переменной myVar. Поскольку используется возвращаемое значение, требуются скобки. Затем в другом окне сообщения появляется значение переменной.
    Sub Question()
    myVar = MsgBox(Prompt:="Я люблю свою работу.", _
    Title:="Заголовок окна ", Buttons:="4")
    MsgBox myVar
    End Sub
    Синтаксис инструкции Option
    Option Compare
    В синтаксисе инструкции Option Compare фигурные скобки и вертикальная черта указывают на принудительный выбор между тремя элементами (фигурные скобки не набираются в инструкциях языка Visual Basic). Например, следующая инструкция означает, что строки в модуле будут сравниваться в порядке сортировки, т.е. без учета регистра букв.
    Option Compare Text
    Синтаксис инструкции Dim
    Dim имяПеременной[([индексы])] [As тип] [, имяПеременной[([индексы])] [As тип]] . . .
    В синтаксисе инструкции Dim слово Dim является обязательным ключевым словом. Единственным обязательным элементом является имяПеременной. Например, следующая инструкция создает три переменных: myVar, nextVar и thirdVar. Они автоматически получают тип Variant.
    Dim myVar, nextVar, thirdVar
    В следующем примере переменная описывается как String. Использование типа данных экономит память и облегчает поиск ошибок в программе.
    Dim myAnswer As String
    Чтобы описать несколько переменных с помощью одной инструкции, надо указывать тип каждой переменной. Переменные, описанные без типа, автоматически приобретают тип Variant.
    Dim x As Integer, y As Integer, z As Integer
    В следующем примере x и y описаны с типом Variant, а z описан с типом Integer.
    Dim x, y, z As Integer
    Если описывается массив, необходимо указывать скобки. Индексы не обязательны. Следующая инструкция описывает динамический массив myArray.
    Dim myArray()

    Тип данных Variant

    Если при описании константы, переменной, или аргумента не указан тип данных, им автоматически присваивается тип данных Variant. Переменные, описанные с типом данных Variant, могут содержать строку, дату, время, логические (Boolean) или числовые значения и могут автоматически преобразовываться к другому типу. Числовые значения Variant занимают 16 байт памяти (что существенно только в больших процедурах или в сложных модулях), и доступ к ним осуществляется медленнее, чем к переменным, которые описаны явным образом с любым другим типом. Тип данных Variant редко используется для констант. Строковое значение Variant занимает 22 байта памяти.
    Следующие инструкции создают переменные Variant:
    Dim myVar
    Dim yourVar As Variant
    theVar = "Это текст."
    В последней инструкции переменная theVar не описывается явно, она описывается неявно или же автоматически. Переменные, описанные неявно, получают тип данных Variant.
    Совет. Если для переменной или аргумента указан определенный тип данных, а затем используется неверный тип, то возникает ошибка. Чтобы избежать ошибок, связанных с типами данных, рекомендуется или использовать только неявно описанные переменные (тип данных Variant), или явно описывать все переменные с определенным типом данных. Последний способ предпочтительнее.

    Запись данных в файлы

    При работе с большим количеством данных часто бывает удобно записывать данные в файл или считывать из файла. Инструкция Open позволяет напрямую создать файл и получить к нему доступ. Инструкция Open обеспечивает три типа доступа к файлам:
    Последовательный доступ (режимы Input, Output и Append режимы), обычно используемый для записи текстовых файлов, например протоколов ошибок или отчетов.
    Произвольный доступ (режим Random), используемый при необходимости считать и записать данные в файл без его закрытия. Файлы произвольного доступа содержат данные в виде записей, которые упрощают и ускоряют поиск нужных сведений.
    Двоичный доступ (режим Binary), используется, когда требуется считать или записать байт в любую позицию в файле, например при сохранении или отображении точечных изображений.
    Примечание. Инструкцию Open не следует использовать для доступа к собственным типам файлов приложений. Например, не следует использовать Open для доступа к документу Word, к электронной таблице Microsoft Excel или к базе данных Microsoft Access, поскольку это вызовет потерю целостности и порчу файла.
    В следующей таблице показываются инструкции, обычно используемые для записи данных в файлы и для чтения данных из файлов.

    Тип доступа
    Запись данных
    Чтение данных
    Последовательный
    Print #, Write #
    Input #
    Произвольный
    Put
    Get
    Двоичный
    Put
    Get

    Меню Visual Basic

    Инструкции Visual Basic


    Инструкция
    Visual Basic является полной командой. Она может содержать ключевые слова, операторы, переменные, константы и выражения. Любая инструкция относится к одной из следующих категорий:
    Инструкции описания, именующие переменные, константы или процедуры, а также могут задавать типы данных.
    Инструкции описания
    Инструкции присвоения, которые присваивают значение или выражение переменной или константе.
    Инструкции присвоения
    Исполняемые инструкции, которые инициируют действие. Они могут выполнить метод или функцию, а также могут организовать повторение или ветвление блоков программы. Эти инструкции часто содержат математические или условные операторы.
    Исполняемые инструкции
    Продолжение инструкций на несколько строк
    Обычно инструкция располагается на одной строке, но ее можно продолжить на следующую строку с помощью символа продолжения строки. В следующем примере исполняемая инструкция MsgBox продолжается на трех строках:
    Sub DemoBox() 'Эта процедура описывает строковую переменную,
    ' присваивает ей значение Мария и выводит
    ' сцепленное сообщение.
    Dim myVar As String
    myVar = "Иван"
    MsgBox Prompt:="Привет " & myVar, _
    Title:="Приветствие", _
    Buttons:=vbExclamation
    End Sub
    Комментарии
    Комментарии позволяют объяснить процедуру или определенную инструкцию всем читателям программы. Когда процедура выполняется, Visual Basic игнорирует комментарии. Строки комментария начинаются с апострофа (') или со слова Rem, за которым следует пробел. Их можно вносить в любое место процедуры. Чтобы внести комментарий в строку, на которой расположена инструкция, после инструкции следует поставить апостроф, а за ним комментарий. По умолчанию комментарии выделяются в тексте зеленым цветом.
    Проверка синтаксических ошибок
    Если после набора строки и нажатия клавиши ENTER строка выделяется красным цветом (может появиться также сообщение об ошибке), необходимо выяснить, что неправильно в данной инструкции и исправить ее.

    Метод Add

    Добавляет объект в семейство.
    Синтаксис
    объект.Add(компонент)
    Синтаксис метода Add содержит следующие элементы:


    Элемент
    Описание

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

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

    Константа
    Описание
    vbext_ct_ClassModule
    Добавляет модуль класса в семейство.
    Vbext_ct_MSForm
    Добавляет форму в семейство.
    Vbext_ct_StdModule
    Добавляет стандартный модуль в семейство.
    Дополнительные сведения
    Для семейства LinkedWindows метод Add добавляет окно в семейство текущих связанных окон.
    Примечание. Пользователь может добавить окно, являющееся областью связанной рамки окна, в другое связанное окно, просто передвинув окно из одной области в другую. Если связанная рамка окна, из которой окно было передвинуто, не содержит других областей, она разрушается.
    Для семейства VBComponents метод Add создает новый стандартный компонент и добавляет его в проект.
    Для семейства VBComponents метод Add возвращает объект VBComponent. Для семейства LinkedWindows метод Add возвращает значение Nothing.

    Метод AddFromFile

    Для семейства References добавляет ссылку на проект из некоторого файла. Для объекта CodeModule добавляет содержимое файла в модуль.
    Синтаксис
    объект.AddFromFile(имя_файла)
    Синтаксис метода AddFromFile содержит следующие элементы:


    Элемент
    Описание

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

    имя_файла
    Обязательный. Строковое выражение, определяющее имя файла, которое добавляется в проект или модуль. Если имя файла не найдено и путь к нему не указан, поиск проводится в каталогах, найденных с помощью функции Windows OpenFile.
    Дополнительные сведения
    Для объекта CodeModule метод AddFromFile вставляет содержимое файла, начиная со строки, предшествующей первой процедуре в программном модуле. Если модуль не содержит процедур, метод AddFromFile помещает содержимое файла в конец модуля.

    Метод AddFromGuid

    Добавляет ссылку в семейство Reference с помощью уникального кода ссылки (GUID).
    Синтаксис
    объект.AddFromGuid(GUID, старший, младший) As Reference
    Синтаксис метода AddFromGuid содержит следующие элементы:

    Элемент
    Описание

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

    GUID
    Обязательный. Строковое выражение, представляющее код GUID ссылки.

    старший
    Обязательный. Переменная типа Long, указывающая номер старшей версии ссылки.

    младший
    Обязательный. Переменная типа Long, указывающая номер младшей версии ссылки.
    Дополнительные сведения
    Чтобы найти ссылку, которую необходимо добавить, метод AddFromGuid ищет реестр. GUID может быть библиотекой типов, элементом управления, идентификатором класса и т.д.

    Метод AddFromString

    Добавляет текст в модуль.
    Синтаксис
    объект.AddFromString
    Прототип объект представляет собой объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение".
    Дополнительные сведения
    Метод AddFromString вставляет текст, начиная со строки, предшествующей первой процедуре в модуле. Если модуль не содержит процедур, метод AddFromString помещает текст в конец модуля.

    Метод Close

    Закрывает и уничтожает окно.
    Синтаксис
    объект.Close
    Прототип объект представляет собой объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение".
    Дополнительные сведения
    Метод Close по-разному действует на следующие типы окон:
    Если окно является областью окна программы, Close разрушает эту область.
    Если окно является конструктором, Close

    уничтожает содержащийся в нем конструктор.
    Если окно должно всегда оставаться доступным в пункте меню Вид, метод Close скрывает такое окно.

    Метод CreateEventProc

    Создает процедуру обработки события.
    Синтаксис
    объект.CreateEventProc(событие, источник) As Long
    Синтаксис метода CreateEventProc содержит следующие элементы:


    Элемент
    Описание

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

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

    источник
    Обязательный. Строковое выражения, указывающее имя объекта, который является источником события.
    Дополнительные сведения
    Метод CreateEventProc используется для создания процедуры обработки события. Например, чтобы создать процедуру обработки события "Нажатие кнопки" (Click) для элемента управления Command Button с именем Command1, можно использовать следующий код (CM представляет собой объект типа CodeModule):
    TextLocation = CM.CreateEventProc("Нажатие кнопки", "Command1")
    Метод CreateEventProc возвращает строку, с которой начинается основная часть процедуры обработки события. CreateEventProc не сработает, если аргументы относятся к несуществующему событию.

    Метод DeleteLines

    Стирает одну строку или указанную последовательность строк.
    Синтаксис
    объект.DeleteLines (строка [, количество])
    Синтаксис метода DeleteLines содержит следующие элементы:


    Элемент
    Описание

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

    строка
    Обязательный. Переменная типа Long, указывающая номер первой строки, которую надо стереть.

    количество
    Необязательный. Переменная типа Long, указывающая количество строк, которые надо стереть.
    Дополнительные сведения
    Если число стираемых строк не указано, DeleteLines сотрет одну строку.

    Метод Export

    Сохраняет компонент как отдельный файл или файлы.
    Синтаксис
    объект.Export(имя_файла)
    Синтаксис метода Export содержит следующие элементы:


    Элемент
    Описание

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

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

    Метод Find

    Ищет активный модуль, содержащий указанную строку.
    Синтаксис
    объект.Find(образец, строка1, столбец1, строка2, столбец2 [, слово] [, регистр] [, выражение]) As Boolean
    Синтаксис метода Find содержит следующие элементы:


    Элемент
    Описание

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

    образец
    Обязательный. Переменная типа String, значением которой является искомый текст или образец.

    строка1
    Обязательный. Переменная типа Long, указывающая номер строки, с которой начинается поиск. Если найден текст, совпадающий с образцом, получает значение номера первой строки найденного текста.

    столбец1
    Обязательный. Переменная типа Long, указывающая номер столбца, с которого начинается поиск. Если найден текст, совпадающий с образцом, получает значение номера первого столбца найденного текста.

    строка2
    Обязательный. Переменная типа Long, указывающая номер последней строки совпадающего с образцом текста (если он найден).

    столбец2
    Обязательный. Переменная типа Long, указывающая номер последнего столбца совпадающего с образцом текста (если он найден).

    слово
    Необязательный. Переменная типа Boolean, указывающая, что проводится поиск слов только целиком; в этом случае для нее задается значение True. По умолчанию имеет значение False.

    регистр
    Необязательный. Переменная типа Boolean, указывающая, что поиск проводится с учетом буквенного регистра; в этом случае для нее задается значение True. По умолчанию имеет значение False.

    выражение
    Необязательный. Переменная типа Boolean, указывающая, что образцом представляет собой правильное выражение; в этом случае для нее задается значение True. По умолчанию имеет значение False.
    Дополнительные сведения
    Если найден текст, совпадающий с образцом, метод Find возвращает значение True, в противном случае -- значение False.
    Аргументы регистр и образец являются взаимоисключающими. Если оба аргумента имеют значение True, возникает ошибка.
    Метод Find не влияет на содержимое диалогового окна Find.

    Метод GetSelection

    Возвращает выделенный фрагмент в области окна программы.
    Синтаксис
    объект.GetSelection(строка1, столбец1, строка2, столбец2)
    Синтаксис метода GetSelection содержит следующие элементы:


    Элемент
    Описание

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

    строка1
    Обязательный. Переменная типа Long, указывающая номер первой строки выделенного фрагмента в области окна программы.

    столбец1
    Обязательный. Переменная типа Long, указывающая номер первого столбца выделенного фрагмента в области окна программы.

    строка2
    Обязательный. Переменная типа Long, указывающая номер последней строки выделенного фрагмента в области окна программы.

    столбец2
    Обязательный. Переменная типа Long, указывающая номер последнего столбца выделенного фрагмента в области окна программы.
    Дополнительные сведения
    При использовании метода GetSelection информация содержится в возвращаемых значениях аргументов. Следовательно, надо использовать переменные, которые будут возвращать информацию путем модификации их значений.

    Метод Import

    Добавляет компонент в проект из файла; возвращает этот вновь добавленный компонент.
    Синтаксис
    объект.Import(имя_файла) As VBComponent
    Синтаксис метода Import содержит следующие элементы:


    Элемент
    Описание

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

    имя_файла
    Обязательный. Переменная типа String, указывающая путь и имя для файла, из которого извлекается компонент.
    Дополнительные сведения
    Метод Import может использоваться для добавления в проект компонента, формы, модуля, класса, и т.д.

    Метод InsertLines

    Вставляет одну или несколько строк в указанное место программы.
    Синтаксис
    объект.InsertLines(строка, текст)
    Синтаксис метода InsertLines содержит следующие элементы:


    Элемент
    Описание

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

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

    текст
    Обязательный. Переменная типа String, содержащая вставляемый текст.
    Дополнительные сведения
    Если вставляемый с помощью InsertLines текст содержит символы возврата каретки с переводом строки, он будет вставлен в виде последовательности строк.

    Метод Item

    Возвращает компонент семейства с заданным номером.
    Синтаксис
    объект.Item(индекс)
    Синтаксис метода Item содержит следующие элементы:


    Элемент
    Описание

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

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

    Семейство
    Аргумент Key
    Windows
    Значение свойства Caption
    LinkedWindows
    Значение свойства Caption
    CodePanes
    Специальная строка не предусмотрена.
    VBProjects
    Значение свойства Name
    VBComponents
    Значение свойства Name
    References
    Значение свойства Name
    Properties
    Значение свойства Name
    Дополнительные сведения
    Аргумент индекс может быть числовым значением или строкой, содержащей заголовок объекта.

    Метод Lines

    Возвращает указанные строки программы.
    Синтаксис
    объект.Lines(строка, количество) As String
    Синтаксис метода Lines содержит следующие элементы:


    Элемент
    Описание

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

    строка
    Обязательный. Переменная типа Long, указывающая номер первой строки возвращаемого текста

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

    Метод ProcBodyLine

    Возвращает первую строку процедуры.
    Синтаксис
    объект.ProcBodyLine(имя_процедуры, тип_процедуры) As Long
    Синтаксис метода ProcBodyLine содержит следующие элементы:


    Элемент
    Описание

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

    Имя_процедуры
    Обязательный. Переменная типа String, содержащая имя процедуры.

    Тип_процедуры
    Обязательный. Указывает вид процедуры, которую надо найти. Поскольку в модуле может находиться несколько различных процедур Property, необходимо указывать вид искомой процедуры. Все процедуры, отличные от процедур-свойств (т.е., процедуры Sub и Function) используют аргумент vbext_pk_Proc.
    В качестве аргументатип_процедуры используются следующие константы:

    Константа
    Описание
    vbext_pk_Get
    Соответствует процедуре, возвращающей значение свойства.
    vbext_pk_Let
    Соответствует процедуре, присваивающей свойству значение.
    vbext_pk_Set
    Соответствует процедуре, задающей ссылку на объект.
    vbext_pk_Proc
    Используется со всеми процедурами, отличными от процедур-свойств.
    Дополнительные сведения
    Первой строкой процедуры является строка, на которой находится инструкция Sub, Function или Property.

    Метод ProcCountLines

    Возвращает количество строк в указанной процедуре.
    Синтаксис
    объект.ProcCountLines(имя_процедуры, тип_процедуры) As Long
    Синтаксис метода ProcCountLines содержит следующие элементы:


    Элемент
    Описание

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

    имя_процедуры
    Обязательный. Переменная типа String, содержащая имя процедуры.

    тип_процедуры
    Обязательный. Указывает вид процедуры, которую надо найти. Поскольку в модуле может находиться несколько различных процедур Property, необходимо указывать вид искомой процедуры. Все процедуры, отличные от процедур-свойств(т.е., процедуры Sub и Function) используют аргумент vbext_pk_Proc.
    В качестве аргументатип_процедуры используются следующие константы:

    Константа
    Описание
    vbext_pk_Get
    Соответствует процедуре, возвращающей значение свойства.
    vbext_pk_Let
    Соответствует процедуре, присваивающей свойству значение.
    vbext_pk_Set
    Соответствует процедуре, задающей ссылку на объект.
    vbext_pk_Proc
    Используется со всеми процедурами, отличными от процедур-свойств.
    Дополнительные сведения
    Метод ProcCountLines учитывает все пустые строки или строки комментария, предшествующие описанию процедуры, и, если процедура является последней в программном модуле, все пустые строки, следующие за процедурой.

    Меню Visual Basic

    Метод ProcOfLine

    Возвращает имя процедуры, содержащей строку с указанным номером.
    Синтаксис
    объект.ProcOfLine(строка, тип_процедуры) As String
    Синтаксис метода ProcOfLine содержит следующие элементы:


    Элемент
    Описание

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

    строка
    Обязательный. Переменная типа Long, указывающая номер искомой строки.

    тип_процедуры
    Обязательный. Указывает вид процедуры, которую надо найти. Поскольку в модуле может находиться несколько различных процедур Property, необходимо указывать вид искомой процедуры. Все процедуры, отличные от процедур-свойств(т.е., процедуры Sub и Function) используют аргумент vbext_pk_Proc.
    В качестве аргументатип_процедуры используются следующие константы:

    Константа
    Описание
    vbext_pk_Get
    Соответствует процедуре, возвращающей значение свойства.
    vbext_pk_Let
    Соответствует процедуре, присваивающей свойству значение.
    vbext_pk_Set
    Соответствует процедуре, задающей ссылку на объект.
    vbext_pk_Proc
    Используется со всеми процедурами, отличными от процедур-свойств.
    Дополнительные сведения
    Пустые строки или строки комментария, предшествующие описанию процедуры, а также, если процедура является последней в программном модуле, все пустые строки, следующие за процедурой, считаются находящимися внутри процедуры.

    Метод ProcStartLine

    Возвращает строку, с которой начинается указанная процедура.
    Синтаксис
    объект.ProcStartLine(имя_процедуры, тип_процедуры) As Long
    Синтаксис метода ProcStartLine содержит следующие элементы:


    Элемент
    Описание

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

    имя_процедуры
    Обязательный. Переменная типа String, содержащая имя процедуры.

    тип_процедуры
    Обязательный. Указывает вид процедуры, которую надо найти. Поскольку в модуле может находиться несколько различных процедур Property, необходимо указывать вид искомой процедуры. Все процедуры, отличные от процедур-свойств(т.е., процедуры Sub и Function) используют аргумент vbext_pk_Proc.
    В качестве аргументатип_процедуры используются следующие константы:

    Константа
    Описание
    vbext_pk_Get
    Соответствует процедуре, возвращающей значение свойства.
    vbext_pk_Let
    Соответствует процедуре, присваивающей свойству значение.
    vbext_pk_Set
    Соответствует процедуре, задающей ссылку на объект.
    vbext_pk_Proc
    Используется со всеми процедурами, отличными от процедур-свойств.
    Дополнительные сведения
    Процедура начинается со строки, следующей за инструкцией End Sub предшествующей процедуры. Если процедура является первой, она начинается сразу после общего раздела описаний.

    Метод Remove

    Удаляет компонент из семейства.
    Синтаксис
    объект.Remove(компонент)
    Синтаксис метода Remove содержит следующие элементы:


    Элемент
    Описание

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

    компонент
    Обязательный. Для семейства LinkedWindows это объект. Для семейства References -- ссылка на библиотеку типов или на проект. Для семейства VBComponents -- специальная константа, представляющая модуль класса, форму или стандартный модуль.
    Дополнительные сведения
    Если метод Remove используется для семейства LinkedWindows, он удаляет окно из текущего семейства связанных окон. Удаленное окно становится перемещаемым окном, которое имеет свою собственную связанную рамку окна.

    Метод ReplaceLine

    Замещает одну строку программы другой.
    Синтаксис
    объект.ReplaceLine(строка, текст)
    Синтаксис метода ReplaceLine содержит следующие элементы:


    Элемент
    Описание

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

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

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

    Метод SetFocus

    Передает фокус указанному окну.
    Синтаксис
    объект.SetFocus
    Прототип объект представляет собой объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение".
    Дополнительные сведения
    Метод SetFocus используется для окон, которые уже являются видимыми.

    Метод SetSelection

    Выделяет фрагмент в области окна программы.
    Синтаксис
    объект.SetSelection(строка1, столбец1, строка2, столбец2)
    Синтаксис метода SetSelection содержит следующие элементы:


    Элемент
    Описание

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

    строка1
    Обязательный. Переменная типа Long, указывающая номер первой строки выделенного фрагмента.

    столбец1
    Обязательный. Переменная типа Long, указывающая номер первого столбца выделенного фрагмента.

    строка2
    Обязательный. Переменная типа Long, указывающая номер последней строки выделенного фрагмента.

    столбец2
    Обязательный. Переменная типа Long, указывающая номер последнего столбца выделенного фрагмента.

    Метод Show

    Выводит указанную область окна программы на передний план.
    Синтаксис
    объект.Show
    Прототип объект представляет собой объектное выражение, значением которого является один из объектов, перечисленных в списке "Применение".
    Дополнительные сведения
    Метод Show передает фокус указанной области программы в данном окне.
    Пример использования метода Add
    В данном примере метод Add используется для добавления одного стандартного модуля в семейство VBComponents.
    Application.VBE.VBProjects(1).VBComponents.Add(vbext_ct_StdModule)
    Пример использования метода AddFromFile
    В данном примере метод AddFromFile используется для добавления содержимого некоторого файла в указанную область окна программы.
    Application.VBE.CodePanes(3).CodeModule.AddFromFile "c:\Code Files\book2.frm"
    Пример использования метода AddFromGUID
    В данном примере метод AddFromGUID используется для добавления ссылки на текущий проект. Для этого указывается ссылка с помощью значения кода GUID объекта Reference.
    Application.VBE.ActiveVBProject.References.AddFromGuid("", 5, 0)
    Пример использования метода AddFromString
    В данном примере метод AddFromString используется для добавления строки "Dim intJack As Integer" в указанную область окна программы.
    Application.VBE.CodePanes(3).CodeModule.AddFromString "Dim intJack As Integer"
    Пример использования метода Close
    В данном примере метод Close закрывает указанный компонент семейства Windows.
    Application.VBE.Windows(9).Close
    Пример использования метода CreateEventProc
    В данном примере метод CreateEventProc используется для создания процедуры Button_Click.
    Debug.Print Application.VBE.SelectVBComponents.CodeModule.CreateEventProc("Нажмите ", "кнопку ")
    Пример использования метода DeleteLines
    Следующий пример состоит из двух частей. Первый цикл For:Next с помощью метода InsertLines вставляет в область окна программы CodePanes(1) 26 последовательно удлиняющихся сегментов латинского алфавита, начиная с буквы "a". Последний вставленный сегмент представляет собой весь алфавит.

    Во второй части цикл For:Next использует метод DeleteLines для удаления строк с нечетными номерами. На первый взгляд кажется, что второй цикл должен просто стирать каждую вторую строку, однако следует принять во внимание, что после каждой операции удаления нумерация строк производится заново. Следовательно, на каждом шаге стирается каждая третья строка: первая строка пропускается, так как I увеличивается на единицу, а вторая -- поскольку больший номер строки каждый раз уменьшается на единицу.

    For I = 1 to 26

    Application.VBE.SelectedVBComponent.CodeModule.InsertLines i, Mid$("abcdefghijklmnopqrstuvwxyz", 1, I)

    Next

    For I = 1 to 13

    Application.VBE.SelectedVBComponent.CodeModule.DeleteLines I

    Next

    Пример использования метода Export

    В данном примере создается файл с именем test.bas и с помощью метода Export, в него копируется содержимое стандартного модуля VBComponents(1).

    Application.VBE.ActiveVBProject.VBComponents(1).Export("test.bas")

    Пример использования метода Find

    В данном примере с помощью метода Find устанавливается, что указанная последовательность строк в области окна программы (строки с 1261 по 1279) содержит строку "Tabs.Clear".

    Application.VBE.CodePanes(2).CodeModule.Find ("Tabs.Clear", 1261, 1, 1280, 1, False, False)

    Пример использования метода GetSelection

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

    Dim m As Long

    Dim n As Long

    Dim x As Long

    Dim y As Long

    Application.VBE.CodePanes(1).GetSelection m, n, x, y

    Пример использования метода Import

    В данном примере метод Import семейства VBComponents используется, чтобы скопировать содержимое файла test.bas в стандартный модуль.

    Application.VBE.ActiveVBProject.VBComponents.Import("test.bas")

    Пример использования метода InsertLines

    В данном примере метод InsertLines используется, чтобы вставить строку "Option Explicit" в указанную область окна программы.


    Application.VBE.CodePanes(1).CodeModule.InsertLines 1, "Option Explicit"

    Пример использования метода Item

    В данном примере показаны два способа вывода на экран указанного компонента семейства CodePanes; в одном из них используется метод Item.

    Application.VBE.CodePanes.Item(2).Show

    Application.VBE.CodePanes(2).Show

    Пример использования метода Lines

    В данном примере метод Lines используется для возвращения указанного блока программы (строки с 1 по 4) в определенную область окна программы.

    Debug.Print Application.VBE.CodePanes(1).CodeModule.Lines( 1, 4)

    Пример использования метода ProcBodyLine

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

    Debug.Print Application.VBE.CodePanes(3).CodeModule.ProcBodyLine ("SetupTabs", vbext_pk_Proc)

    Пример использования метода ProcCountLines

    В данном примере метод ProcCountLines используется для возвращения указанного числа строк процедуры SetupTabs в определенную область окна программы.

    Debug.Print Application.VBE.CodePanes(3).CodeModule.ProcCountLines ("SetupTabs", vbext_pk_Proc)

    Пример использования метода ProcOfLine

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

    Debug.Print Application.VBE.CodePanes(3).CodeModule.ProcOfLine (1270, vbext_pk_Proc)

    Пример использования метода ProcStartLine

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

    Debug.Print Application.VBE.CodePanes(3).CodeModule.ProcStartLine ("SetupTabs", vbext_pk_Proc)

    Пример использования метода Remove

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

    Debug.Print Application.VBE.ActiveVBProject.VBComponents(4).Name


    Application.VBE.ActiveVBProject.VBComponents.Remove Application.VBE.ActiveVBProject.VBComponents(4)

    Пример использования метода ReplaceLine

    Следующий пример состоит из двух частей. Первый цикл For:Next с помощью метода InsertLines вставляет в область окна программы CodePanes(1) 26 последовательно удлиняющихся сегментов латинского алфавита, начиная с буквы "a". Последний вставленный сегмент представляет собой весь алфавит.

    Второй цикл For:Next с помощью метода ReplaceLine замещает строку с четным номером последним символом текста, который содержался в этой строке ранее. Строки с нечетными номерами не изменяются.

    For I = 1 to 26

    Application.VBE.CodePanes(1).CodeModule.InsertLines I, Mid$("abcdefghijklmnopqrstuvwxyz", 1, I)

    Next I

    For I = 1 to 13

    Application.VBE.CodePanes(1).CodeModule.ReplaceLine 2*I, Mid$("abcdefghijklmnopqrstuvwxyz", 1, I)

    Next I

    Пример использования метода SetFocus

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

    Application.VBE.Windows(9).SetFocus

    Пример использования метода SetSelection

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

    Application.VBE.CodePanes(1).SetSelection 2,4,3,15

    Пример использования метода Show

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

    Application.VBE.CodePanes(2).Show

    Событие Click

    Данное событие происходит, когда установлено свойство OnAction для соответствующего элемента управления на панели команд.
    Синтаксис
    Sub объект_Click (ByVal ctrl As Object, ByRef handled As Boolean, ByRef canceldefault As Boolean)
    Синтаксис события Click (Нажатие кнопки) содержит следующие именованные аргументы:


    Элемент
    Описание

    ctrl
    Обязательный; тип данных Object. Указывает объект -- источник события "Нажатие кнопки" (Click).

    handled
    Обязательный; тип данных Boolean. Если его значение равно True, событие должно обрабатываться с помощью других надстроек. Если False -- действие элемента панели команд не было обработано.

    canceldefault
    Обязательный; тип данных Boolean. Если его значение равно True, выполняются действия, предусмотренные по умолчанию, до их отмены надстройкой, обрабатывающей нисходящий поток команд. Если False -- действия, предусмотренные по умолчанию не выполняются до их восстановления надстройкой, обрабатывающей нисходящий поток команд.
    Дополнительные сведения
    Событие Click с объектом CommandBarEvents выполняется особым образом. С помощью ключевого слова WithEvents описывается переменная, определяющая событие Click для элемента управления CommandBar. Этой переменной будет присвоено возвращаемое значение свойства CommandBarEvents объекта Events. Свойство CommandBarEvents использует элемент управления CommandBar в качестве аргумента. При выборе элемента управления CommandBar (для переменной, описанной с помощью ключевого слова WithEvents) выполняется программа.

    Событие ItemAdded

    Данное событие происходит после добавления ссылки.
    Синтаксис
    Sub объект_ItemAdded(ByVal элемент As Reference)
    Обязательный аргумент элемент указывает добавленный объект.
    Дополнительные сведения
    Событие ItemAdded (Элемент добавлен) происходит, когда объект Reference добавляется в семейство References.

    Событие ItemRemoved

    Данное событие происходит после удаления ссылки из проекта.
    Синтаксис
    Sub объект_ItemRemoved(ByVal элемент As Reference)
    Обязательный аргумент элемент указывает объект Reference, который был удален.
    Пример события "Нажатие кнопки" (Click)
    В данном примере проиллюстрировано, как можно написать программу для процедуры события "Нажатие кнопки" (Click) с помощью инструкций WithEvents и Set. Следует отметить, что вместо пункта меню Сервис в имени события "Нажатие кнопки" (Click) используется ссылка на объект ce.
    Private WithEvents ce As CommandBarEvents
    Sub Test()
    Dim c As CommandBarControl
    Set c = Application.VBE.CommandBars("Сервис").Controls(1)
    Set ce = Application.VBE.Events.CommandBarEvents(c)
    End Sub
    Private Sub ce_Click(ByVal CommandBarControl As Object, Handled As Boolean, CancelDefault As Boolean)
    ' Место для инструкций обработки события.
    End Sub

    Свойство ActiveCodePane

    Возвращает активный или последний активный объект CodePane или указывает активный объект CodePane. Чтение/запись.
    Дополнительные сведения
    В свойстве ActiveCodePane можно указать любой допустимый объект CodePane, как показано в следующем примере:
    Set MyApp.VBE.ActiveCodePane = MyApp.VBE.CodePanes(1)
    Эта инструкция делает активной областью программы первую область программы в семействе областей программы. Область программы можно также сделать активной с помощью метода Set.

    Свойство ActiveVBProject

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

    Свойство ActiveWindow

    Возвращает активное окно в среде разработчика. Только для чтения.
    Дополнительные сведения
    Если в среде разработчика открыто несколько окон, значением свойства ActiveWindow является окно, имеющее фокус. Когда фокус имеет главное окно, свойство ActiveWindow возвращает значение Nothing.

    Свойство BuiltIn

    Возвращает значение типа Boolean, указывающее, является ли ссылка стандартной ссылкой, которую нельзя удалить. Только для чтения.
    Возвращаемые значения
    Свойство BuiltIn возвращает следующие значения:

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

    Свойство Caption

    Возвращает значение типа String, содержащее заголовок активного окна. Только для чтения.
    Дополнительные сведения
    Заголовком активного окна называют текст, выводящийся в строке заголовка окна.

    Свойство CodeModule

    Возвращает объект, представляющий программу, определенную для компонента. Только для чтения.
    Дополнительные сведения
    Свойство CodeModule возвращает значение Nothing, если компонент не имеет связанного с ним программного модуля.
    Примечание. Объект CodePane представляет видимое окно программы. Конкретный компонент может иметь несколько объектов CodePane. Объект CodeModule представляет программу, определенную для компонента. Каждому компоненту может соответствовать только один объект CodeModule.

    Свойство CodePane

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

    Свойство CodePanes

    Возвращает семейство активных объектов CodePane. Только для чтения.

    Свойство CodePaneView

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

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

    Свойство Collection

    Возвращает семейство, содержащее объект, с которым работает пользователь. Только для чтения.
    Дополнительные сведения
    Для большинства объектов в используемой модели объектов определено либо свойство Parent, либо свойство Collection, указывающее на родительский объект указанного объекта.
    Свойство Collection обеспечивает доступ к свойствам, методам и элементам управления семейства, к которому принадлежит объект.

    Свойство CommandBarEvents

    Возвращает объект CommandBarEvents. Только для чтения.
    Значения
    Аргумент, передаваемый в свойство CommandBarEvents, имеет вид:


    Аргумент
    Описание

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

    Свойство Count

    Возвращает значение типа Long, содержащее число элементов в семействе. Только для чтения.

    Свойство CountOfDeclarationLines

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

    Свойство CountOfLines

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

    Свойство CountOfVisibleLines

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

    Свойство Description

    Возвращает или задает строковое выражение, содержащее описание объекта. Для объекта VBProject это свойство доступно для чтения/записи; для объекта Reference свойство доступно только для чтения.
    Дополнительные сведения
    Для объекта VBProject свойство Description возвращает или задает стоку описания, связанную с активным проектом.
    Для объекта Reference свойство Description возвращает краткое описание ссылки.

    Свойство Designer

    Возвращает объект, обеспечивающий доступ к средствам разработки компонента.
    Дополнительные сведения
    Если для объекта открыто окно конструктора, свойство Designer возвращает открытое окно конструктора; в противном случае создается новое окно конструктора. Окно конструктора является характеристикой определенных объектов VBComponent, при создании которых окно конструктора создается вместе с объектом. Компонент может иметь только одно окно конструктора, причем всегда одно и то же. Свойство Designer обеспечивает доступ к объекту, специфическому для компонента. В некоторых случаях, например, для стандартных модулей и модулей класса окно конструктора не создается, поскольку эти типы объектов VBComponent не поддерживают окно конструктора.
    Если объект VBComponent не имеет окна конструктора, свойство Designer возвращает значение Nothing.

    Свойство DesignerWindow

    Возвращает объект Window, представляющий окно конструктора компонента.
    Дополнительные сведения
    Если компонент поддерживает окно конструктора, но не имеет открытого окна конструктора, то окно конструктора создается при обращении к свойству DesignerWindow, но при этом является невидимым. Чтобы сделать окно видимым, следует задать значение True для свойства Visible объекта Window.

    Свойство GUID

    Возвращает значение типа String, содержащее идентификатор класса объекта. Только для чтения.

    Свойство HasOpenDesigner

    Возвращает значение типа Boolean, указывающее, имеет или нет объект VBComponent открытое окно конструктора. Только для чтения.
    Возвращаемые значения
    Свойство HasOpenDesigner возвращает следующие значения:

    Значение
    Описание
    True
    Объект VBComponent имеет открытое окно конструктора.
    False
    Объект VBComponent не имеет открытого окна конструктора

    Свойство height

    Возвращает или задает значение типа Single, содержащее высоту окна в единицах твип. Чтение/запись.
    Дополнительные сведения
    Изменение значения свойства height связанного окна или закрепленного окна не имеет последствий, пока окно остается связанным или закрепленным.

    Свойство HelpContextID

    Возвращает или задает значение типа String, содержащее контекстный идентификатор раздела справки Microsoft Windows. Чтение/запись.

    Свойство HelpFile

    Возвращает или задает значение типа String, указывающее файл справки Microsoft Windows для проекта. Чтение/запись.

    Свойство IndexedValue

    Возвращает или задает значение компонента свойства, которое определяется индексированным списком или массивом.
    Дополнительные сведения
    Значение, возвращаемое или задаваемое свойством IndexedValue, представляет выражение, которое при оценке дает тип, принимаемый объектом. Для свойства, представляющего индексированный список или массив, необходимо использовать свойство IndexedValue вместо свойства Value. Индексированный список является числовым выражением, указывающим положение индекса.
    Свойство IndexedValue принимает до 4 индексов. Число индексов, принимаемых свойством IndexedValue, возвращается в значении свойства NumIndices.
    Свойство IndexedValue используется только в тех случаях, когда значение свойства NumIndices превышает нуль. Значения в индексированном списке задаются или возвращаются с помощью одного индекса.

    Свойство IsBroken

    Возвращает значение типа Boolean, указывающее, представляет ли объект Reference допустимую ссылку в реестре. Только для чтения.
    Возвращаемые значения
    Свойство IsBroken возвращает следующие значения:

    Значение
    Описание
    True
    Объект Reference более не представляет допустимую ссылку в реестре.
    False
    Объект Reference представляет допустимую ссылку в реестре.

    Свойство Saved

    Возвращает значение типа Boolean, указывающее, был ли объект изменен после его последнего сохранения. Чтение/запись.
    Возвращаемые значения
    Свойство Saved возвращает следующие значения:

    Значение
    Описание
    True
    Объект не был изменен после его последнего сохранения.
    False
    Объект был изменен после его последнего сохранения.
    Дополнительные сведения
    Метод SaveAs задает для свойства Saved значение True.
    Примечание. Ели задать для свойства Saved значение False в программе, это свойство будет возвращать значение False, а объект будет отмечен как измененный после его последнего сохранения.

    Свойство SelectedVBComponent

    Возвращает выделенный компонент. Только для чтения.
    Дополнительные сведения
    Свойство SelectedVBComponent возвращает выделенный компонент в окно проекта. Если элемент, выделенный в окне проекта, не является компонентом, свойство SelectedVBComponent возвращает значение Nothing.

    Меню Visual Basic

    Дополнительные сведения

    Поскольку свойство Value возвращает значение типа Variant, оно обеспечивает доступ к любому свойству. Для доступа к спискам следует использовать свойство IndexedValue.
    Если свойство, представляемое объектом Property, доступно для чтения/записи, свойство Value также доступно для чтения/записи. Если свойство доступно только для чтения, попытка задать для него значение свойства Value приводит к ошибке. Если свойство допускает только запись, попытка возвратить значение свойства Value приводит к ошибке.
    Свойство Value является используемым по умолчанию свойством объекта Property.

    Объект CodeModule

    Представляет программу, определенную для таких компонентов проекта как форма, класс или документ.
    Дополнительные сведения
    Объект CodeModule используется для изменения (добавления, удаления или изменения) программы, определенной для компонента.
    Каждый компонент связывается с одним объектом CodeModule. Однако объект CodeModule может быть связан с несколькими областями программы.
    Методы, определенные для объекта CodeModule, позволяют построчно обрабатывать программы и возвращать информацию о тексте программы. Например, метод AddFromString используют для добавления текста в модуль. Метод AddFromString помещает текст непосредственно перед первой процедурой в модуле или в конец модуля, если в модуле нет процедур.
    Свойство Parent позволяет возвратить объект VBComponent, связанный с программным модулем.

    Объект CommandBarEvents

    Объект CommandBarEvents
    Объект CommandBarEvents Объект CommandBarEvents
    Объект CommandBarEvents Объект CommandBarEvents Объект CommandBarEvents
    Возвращается свойством CommandBarEvents. Объект CommandBarEvents запускает событие при выборе элемента управления на панели инструментов.
    Дополнительные сведения
    Объект CommandBarEvents возвращается свойством CommandBarEvents объекта Events. В интерфейсе возвращенного объекта имеется одно событие нажатия кнопки. Для обработки этого события используется описание WithEvents.

    Семейство CommandBars

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

    Свойство FullPath

    Возвращает значение типа String, содержащее путь и имя файла адресуемой библиотеки типов. Только для чтения.

    Свойство Left

    Возвращает или задает значение типа Single, содержащее положение левой границы окна на экране в единицах твип. Чтение/запись.
    Дополнительные сведения
    Значение, возвращаемое свойством Left, зависит от того, является ли окно связанным или закрепленным.
    Примечание. Изменение значения свойства Left для связанного или закрепленного окна не имеет последствий, пока окно остается связанным или закрепленным.

    Свойство LinkedWindowFrame

    Возвращает объект Window, представляющий рамку, содержащую окно. Только для чтения.
    Дополнительные сведения
    Свойство LinkedWindowFrame обеспечивает доступ к объекту, представляющему рамку связанных окон, свойства которой отличаются от свойств содержащихся в ней окон. Если окно не является связанным, свойство LinkedWindowFrame возвращает значение Nothing.

    Свойство MainWindow

    Возвращает объект Window, представляющий главное окно среды разработчика Visual Basic. Только для чтения.
    Дополнительные сведения
    Объект Window, который возвращается свойством MainWindow, используют для добавления или удаления закрепленных окон. Этот объект Window используется также для развертывания, свертывания, скрытия или восстановления главного окна среды разработчика Visual Basic.

    Свойство Major

    Возвращает значение типа Long, содержащее основной номер версии адресуемой библиотеки типов. Только для чтения.
    Дополнительные сведения
    Значение, возвращаемое свойством Major, соответствует основному номеру версии, сохраненному в библиотеке типов, на которую задается ссылка.

    Свойство Minor

    Возвращает значение типа Long, содержащее дополнительный номер версии адресуемой библиотеки типов. Только для чтения.
    Дополнительные сведения
    Значение, возвращаемое свойством Minor, соответствует дополнительному номеру версии, сохраненному в библиотеке типов, на которую задается ссылка.

    Свойство Mode

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


    Константа
    Описание
    vbext_vm_RunMode
    Указанный проект находится в режиме выполнения.
    vbext_vm_BreakMode
    Указанный проект находится в режиме прерывания.
    vbext_vm_DesignMode
    Указанный проект находится в режиме конструктора.

    Свойство Name

    Возвращает или задает значение типа String, содержащее имя, которое используется в программе для идентификации объекта. Для объектов VBProject и VBComponent это свойство доступно для чтения/записи; для объекта Property и объекта Reference свойство доступно только для чтения.
    Дополнительные сведения
    В следующей таблице приводится описание способов применения свойства Name для разных объектов.


    Объект
    Применение свойства Name
    VBProject
    Возвращает или задает имя активного проекта.
    VBComponent
    Возвращает или задает имя компонента. При попытке указать в свойстве Name уже используемое или недопустимое имя возникает ошибка.
    Property
    Возвращает имя свойства в том виде, как оно выводится в окне свойств. Это же значения используется для индексации семейства Properties. Это имя задать невозможно.
    Reference
    Возвращает имя ссылки в программе. Это имя задать невозможно
    Имя, которое новые объекты получаю по умолчанию, образуется из типа объекта и уникального целого числа. Например, первый новый объект Form получает имя Form1, следующий объект Form имя Form2, а третий элемент управления, являющийся полем (TextBox) в форме имя TextBox3.
    Имя объекта (значение свойства Name) должно начинаться с буквы и содержать не более 40 символов. В имя можно включать цифры и символы подчеркивания (_), но нельзя включать пробелы или знаки препинания. Имена форм и модулей не должны совпадать с именами других общих объектов, таких как Clipboard, Screen или App. Хотя в качестве значения свойства Name можно указать ключевое слово, имя свойства или имя другого объекта, делать это не рекомендуется во избежание конфликтов имен в программе.

    Свойство NumIndices

    Возвращает количество индексов для свойства, возвращаемого объектом Property.
    Дополнительные сведения
    Значением свойства NumIndices может быть любое целое число от 0 до 4. Для большинства свойств свойство NumIndices возвращает значение 0. Свойства, индексируемые обычным образом, возвращают значение 1. Массивы свойств могут возвращать значение 2.

    Свойство Object

    Возвращает или задает значение объекта, который возвращается свойством. Чтение/запись.
    Дополнительные сведения
    Если возвращается объект, то свойство Object позволяет задать или возвратить значение этого объекта.

    Свойство Parent

    Возвращает объект или семейство, которое содержит другой объект или семейство. Только для чтения.
    Дополнительные сведения
    Для большинства объектов определено либо свойство Parent, либо свойство Collection, указывающее на родительский объект, который данный объект имеет в иерархии объектов. Свойство Collection используется, если родительский объект является семейств.
    Свойство Parent используют для доступа к свойствам, методам и элементам управления родительского объекта.

    Свойство Protection

    Возвращает значение, указывающее состояние защиты проекта. Только для чтения.
    Возвращаемые значения
    Свойство Protection возвращает следующие значения:


    Константа
    Описание
    vbext_Protection
    Указанный проект защищен.
    vbext_NoProtection
    Указанный проект не защищен.
    vbext_Locked
    Указанный проект блокирован.

    Свойство ReferencesEvents

    Возвращает объект ReferencesEvents. Только для чтения.
    Значения
    Аргумент, передаваемый в свойство ReferencesEvents, может иметь следующие значения:


    Аргумент
    Описание

    проектVB
    Если аргумент проектVB имеет значение Nothing, возвращенный объект будет передавать события в семейства References всех объектов VBProject в семействе VBProjects.

    Если аргумент проектVB указывает на допустимый объект VBProject, то возвращенный объект будет передавать события только в семейство References этого проекта.
    Дополнительные сведения
    Свойство ReferencesEvents принимает аргумент и возвращает объект-источник события. Объект ReferencesEvents является источником событий, которые генерируются при добавлении или удалении ссылок.

    Свойство Top

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

    Свойство TopLine

    Возвращает значение типа Long, указывающее номер верхней строки, которая выводится в области программы, или задающее номер строки, которая является верхней в области программы. Чтение/запись.
    Дополнительные сведения
    Свойство TopLine возвращает или задает номер строки, которая выводится верхней в области программы. Например, чтобы первой строкой в области программы была строка с номером 25, следует задать для свойства TopLine значение 25.
    Значение свойства TopLine должно быть целым положительным числом. Если для свойства TopLine задается значение, превышающее число строк в программе, то значением этого свойства становится номер последней строки.

    Свойство Type

    Возвращает числовое или строковое значение, определяющее тип объекта. Только для чтения.
    Возвращаемые значения
    Значения свойства Type объекта Window перечислены в следующей таблице:


    Константа
    Значение
    Описание
    vbext_wt_CodeWindow
    0
    Окно программы
    vbext_wt_Designer
    1

    Окно конструктора
    vbext_wt_Browser
    2
    Окно поиска объекта
    vbext_wt_Watch
    3
    Область контрольных значений
    vbext_wt_Locals
    4
    Национальные настройки
    vbext_wt_Immediate
    5
    Область проверки
    vbext_wt_ProjectWindow
    6

    Окно проекта
    vbext_wt_PropertyWindow
    7

    Окно свойств
    vbext_wt_Find
    8
    Диалоговое окно поиска
    vbext_wt_FindReplace
    9
    Диалоговое окно поиска и замены
    vbext_wt_Toolbox
    10
    Набор инструментов
    vbext_wt_LinkedWindowFrame
    11

    Рамка связанных окон
    vbext_wt_MainWindow
    12
    Главное окно
    vbext_wt_Preview
    13
    Окно предварительного просмотра
    vbext_wt_ColorPalette
    14
    Окно палитры цветов
    Значения свойства Type объекта VBComponent перечислены в следующей таблице:


    Константа
    Описание
    vbext_ct_ClassModule

    Модуль класса
    vbext_ct_MSForm
    Форма Microsoft
    vbext_ct_StdModule

    Стандартный модуль
    vbext_ct_Document
    Модуль документа
    Значения свойства Type объекта Reference перечислены в следующей таблице:


    Константа
    Описание
    vbext_rt_TypeLib

    Библиотека типов
    vbext_rt_Project

    Проект

    Свойство Value

    Возвращает или задает значение типа Variant, определяющее значение свойства. Чтение/запись.

    Свойство VBE

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

    Свойство Version

    Возвращает значение типа String, содержащее версию языка Visual Basic для приложений (VBA), используемую приложением. Только для чтения.
    Дополнительные сведения
    Значение свойства Version является строкой, содержащей одну или две цифры, точку и еще две цифры; остальная часть строки может содержать любой текст или цифры.

    Свойство Visible

    Для объекта Window возвращает или задает значение типа Boolean, указывающее, является ли окно видимым. Чтение/запись. Для объекта CodePane возвращает значение типа Boolean, указывающее, является ли видимой область программы в окне. Только для чтения.
    Возвращаемые значения
    Свойство Visible возвращает следующие значения:


    Значение
    Описание
    True
    (По умолчанию). Объект является видимым.
    False
    Объект является скрытым.

    Свойство width

    Возвращает или задает значение типа Single, содержащее ширину окна твип. Чтение/запись.
    Дополнительные сведения
    Изменение значения свойства width для связанного или закрепленного окна не имеет последствий, пока окно остается связанным или закрепленным.

    Свойство Window

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

    Свойство WindowState

    Возвращает или задает числовое значение, определяющее вид окна. Чтение/запись.
    Значения
    Свойство WindowState возвращает или задает следующие значения:


    Константа
    Значение
    Описание
    vbext_ws_Normal
    0
    (По умолчанию). Обычное окно.
    vbext_ws_Min
    1
    Окно свернуто в значок.
    vbext_ws_Max
    2
    Окно развернуто до максимального размера.
    Пример использования свойства ActiveCodePane
    В данном примере свойства ActiveCodePane и TopLine используются для определения номера первой строки активной области окна программы.
    Debug.Print Application.VBE.ActiveCodePane.TopLine
    Пример использования свойства ActiveVBProject
    В следующем примере свойство ActiveVBProject используется для определения имени активного проекта.
    Debug.Print Application.VBE.ActiveVBProject.Name
    Пример использования свойства ActiveWindow
    В следующем примере свойство ActiveWindow используется для определения заголовка активного окна.
    Debug.Print Application.VBE.ActiveWindow.Caption
    Пример использования свойства BuiltIn
    В следующем примере свойство BuiltIn используется для возвращения переменной типа Boolean, указывающей, является ли некоторая ссылка в активном проекте встроенной.
    Debug.Print Application.VBE.ActiveVBProject.References(1).BuiltIn
    Пример использования свойства Caption
    В следующем примере свойство Caption используется для вывода на экран заголовка активного окна.
    Debug.Print Application.VBE.ActiveWindow.Caption
    Пример использования свойства CodeModule
    В следующем примере свойства CodeModule и CountOfLines используются для определения числа строк в указанном программном модуле.
    Debug.Print Application.VBE.ActiveVBProject.VBComponents(6).CodeModule.CountOfLines
    Пример использования свойства CodePane
    В данном примере свойства CodePane и TopLine используются для вывода на экран номера первой строки в программном модуле выделенного объекта VBComponent.
    Debug.Print Application.VBE.SelectedVBComponent.CodeModule.CodePane.TopLine
    Пример использования свойства CodePanes
    В данном примере свойства CodePanes и TopLine используются для вывода на экран номера первой строки указанной области окна программы

    Debug.Print Application.VBE.CodePanes(3).TopLine

    Пример использования свойства CodePaneView

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

    Debug.Print Application.VBE.CodePanes(3).CodePaneView

    Пример использования свойства Collection

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

    Debug.Print Application.VBE.ActiveVBProject.Collection.Count

    Пример использования свойства CommandBarEvents

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

    Private WithEvents ce As CommandBarEvents

    Sub Test()

    Dim c As CommandBarControl

    Set c = Application.VBE.CommandBars("Сервис").Controls(1)

    Set ce = Application.VBE.Events.CommandBarEvents(c)

    End Sub

    Private Sub ce_Click(ByVal CommandBarControl As Object, Handled As Boolean, CancelDefault As Boolean)

    ' Место для программы обработки событий.

    End Sub

    Пример использования свойства Count

    В следующем примере свойство Count используется для определения числа объектов VBComponent в указанном проекте.

    Debug.Print Application.VBE.VBProjects(1).VBComponents.Count

    Пример использования свойства CountOfDeclarationLines

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

    Debug.Print Application.VBE.CodePanes(2).CodeModule.CountOfDeclarationLines

    Пример использования свойства CountOfLines

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

    Application.VBE.CodePanes(2).CodeModule.CountOfLines

    Пример использования свойства CountOfVisibleLines

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


    Debug.Print Application.VBE.Codepanes(3).CountOfVisibleLines

    Пример использования свойства Description

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

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

    Application.VBE.VBProjects(1).Description = "Горячие пирожки"

    Debug.Print Application.VBE.VBProjects(1).Description

    Debug.Print Application.VBE.VBProjects(1).References(1).Description

    Debug.Print Application.VBE.VBProjects(1).References(2).Description

    Пример использования свойства Designer

    В следующем примере свойства Designer и Count используются для определения числа элементов управления в форме. При этом окно, содержащее данную форму, должно быть выделено. Объектом свойства Designer (конструктор) является сама форма.

    Debug.Print Application.VBE.SelectVBComponent.Designer.Controls.Count

    Пример использования свойства DesignerWindow

    В следующем примере свойства DesignerWindow и Visibile использованы, чтобы определить, является ли некоторый конструктор видимым. При этом объект VBComponent должен представлять собой форму.

    Debug.Print Application.VBE.VBProjects(1).VBComponents(1).DesignerWindow.Visible

    Пример использования свойства FullPath

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

    Debug.Print Application.VBE.ActiveVBProject.References(1).FullPath

    Пример использования свойства GUID

    В следующем примере свойство GUID используется для возвращения кода GUID для указанного объекта Reference конкретного проекта.

    Debug.Print Application.VBE.VBProjects(1).References(1).GUID

    Пример использования свойства HasOpenDesigner

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


    Debug.Print Application.VBE.VBProjects(1).VBComponents(1).HasOpenDesigner

    Пример использования свойств height и width

    В следующем примере свойства height и width используются для определения высоты и ширины ( в твипах) некоторого окна. Когда указанное окно связано с другим окном или закреплено в главном окне, параметры этих свойств изменяются, поскольку в этих случаях они относятся к объекту Window, в котором исходное окно связано или закреплено.

    Debug.Print Application.VBE.Windows(9).height

    Debug.Print Application.VBE.Windows(9).width

    Пример использования свойства HelpContextID

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

    Debug.Print Application.VBE.VBProjects(1).HelpContextID

    Пример использования свойства HelpFile

    В следующем примере свойство HelpFile используется для введения файла справочной системы в проект. Затем полный путь данного файла выводится на печать для проверки выполнения описанной операции.

    Application.VBE.VBProjects(1).HelpFile = "C:\HelpStuff\veenob3.hlp"

    Debug.Print Application.VBE.VBProjects(1).HelpFile

    Пример использования свойства IsBroken

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

    Debug.Print Application.VBE.vbprojects(1).References(1).IsBroken

    Пример использования свойств Left и Top

    В следующем примере свойства Left и Top используются для определения координат верхнего левого угла некоторого окна (в твипах). Когда указанное окно связано с другим окном или закреплено в главном окне, параметры данных свойств изменяются, поскольку в этих случаях они относятся к объекту Window, в котором исходное окно связано или закреплено.

    Debug.Print Application.VBE.Windows(9).Left

    Debug.Print Application.VBE.Windows(9).Top

    Пример использования свойства MainWindow

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


    Debug.Print Application.VBE.MainWindow.Caption

    Пример использования свойства Major

    В следующем примере свойство Major используется для возвращения номера максимальной версии указанного объекта Reference в некотором проекте.

    Debug.Print Application.VBE.VBProjects(1).References(1).Major

    Пример использования свойства Minor

    В следующем примере свойство Minor используется для возвращения номера минимальной версии указанного объекта Reference в некотором проекте.

    Debug.Print Application.VBE.VBProjects(1).References(1).Minor

    Пример использования свойства Mode

    В следующем примере свойство Mode используется для определения режима активного проекта. При этом возвращается заранее определенная константа, соответствующая режиму проекта.

    Debug.Print Application.VBE.ActiveVBProject.Mode

    Пример использования свойства Name

    В следующем примере свойство Name используется для определения имени указанного компонента семейства VBComponents в некотором проекте.

    Debug.Print Application.VBE.VBProjects(1).VBComponents(1).Name

    Пример использования свойства NumIndices

    В следующем примере свойство NumIndices используется для возвращения числа индексов, относящихся к указанному свойству определенного объекта VBComponent.

    Debug.Print Application.VBE.VBProjects(1).VBComponents(1).Properties(40).NumIndices

    Пример использования свойства Object

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

    Set Application.VBE.ActiveVBProject.VBComponents(1).Properties("Значок").Object = LoadPicture("Baseball.ico")

    Пример использования свойства Parent

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

    Debug.Print Application.VBE.ActiveVBProject.VBComponents.Parent.Name

    Пример использования свойства Protection

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


    Debug.Print Application.VBE.ActiveVBProject.Protection

    Пример использования свойства ReferencesEvents

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

    Private WithEvents X As ReferencesEvents

    Sub Test()

    Set X = Application.VBE.Events.ReferencesEvents

    End Sub

    Private Sub X_ItemAdded(ByVal Reference As VBIDE.Reference)

    ' Место для программы добавления элемента.

    End Sub

    Private Sub X_ItemRemoved(ByVal Reference As VBIDE.Reference)

    ' Место для программы удаления элемента.

    End Sub

    Пример использования свойства Saved

    В следующем примере свойство Saved используется для возвращения переменной типа Boolean, указывающей, был ли указанный проект сохранен в текущем состоянии.

    Debug.Print Application.VBE.VBProjects(1).Saved

    Пример использования свойства SelectedVBComponent

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

    Debug.Print Application.VBE.SelectedVBComponent.Name

    Пример использования свойства TopLine

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

    Debug.Print Application.VBE.CodePanes(3).TopLine

    Пример использования свойства Type

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

    Debug.Print Application.VBE.VBProjects(1).VBComponents(1).Type

    Пример использования свойства Value

    В следующем примере свойство Value используется для возвращения значения указанного свойства одного из компонентов семейства VBComponents.

    Debug.Print Application.VBE. ActiveVBProject.VBComponents(1).Properties("AcceptLabelsInFormulas").Value

    Пример использования свойства VBE

    В следующем примере свойства VBE и Name используются для определения имени активного проекта.


    Debug.Print Application.VBE.ActiveVBProject.Name

    Пример использования свойства Version

    В следующем примере свойство Version используется для определения номера версии главного приложения.

    Debug.Print Application.VBE.Version

    Пример использования свойства Visible

    В следующем примере свойство Visible используется для возвращения переменной типа Boolean, которая показывает, является ли указанное окно видимым.

    Debug.Print Application.VBE.Windows(9).Visible

    Пример использования свойства Window

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

    Debug.Print Application.VBE.CodePanes(1).Window.Caption

    Пример использования свойства WindowState

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

    Debug.Print Application.VBE.Windows(9).WindowState

    Меню Visual Basic

    Объект CodePane

    Объект CodePane
    Объект CodePane Объект CodePane
    Объект CodePane Объект CodePane Объект CodePane
    Представляет область программы.
    Дополнительные сведения
    Объект CodePane используется для управления положением видимого текста или выделенного текста, выводящегося в области программы.
    Для того чтобы сделать видимой указанную область программы, используют метод Show. Метод SetSelection задает, а метод GetSelection возвращает положение выделенного фрагмента в области программы.

    Объект Events

    Содержит свойства, обеспечивающие подключение надстроек ко всем событиям Visual Basic для приложений (VBA).
    Дополнительные сведения
    Объект Events поддерживает свойства, которые возвращают объекты-источники событий. Объекты-источники событий, возвращаемые этими свойствами, информирую пользователя об изменениях в среде Visual Basic для приложений (VBA).
    Свойства объекта Events возвращают объекты, тип которых совпадает с именами свойств. Например, свойство CommandBarEvents возвращает объект CommandBarEvents.

    Объект Property

    Объект Property
    Объект Property Объект Property
    Представляет свойства объекта, которые являются доступными для просмотра в окне свойств любого конкретного компонента.
    Дополнительные сведения
    Свойство Value объекта Property задает или возвращает значение свойства компонента.
    Все компоненты имеют по крайней мере одно свойство Name. Чтобы задать или возвратить значение свойства, используется свойство Value объекта Property. Свойство Value возвращает значение типа Variant соответствующего подтипа. Если возвращаемое значение представляет объект, свойство Value возвращает семейство Properties, содержащее объекты Property, представляющие отдельные свойства объект. Для доступа к каждому из объектов Property в возвращенном семействе Properties используют метод Item.
    Если значение, возвращаемое объектом Property, представляет объект, пользователь имеет возможность использовать свойство Object, чтобы указать новый объект в значении объекта Property.

    Объект Reference

    Объект Reference
    Объект Reference Объект Reference
    Представляет ссылку на библиотеку типов или проект.
    Дополнительные сведения
    Объект Reference используют для проверки, является ли ссылка действительной.
    Если ссылка более не является действительной, свойство IsBroken возвращает значение True. Если ссылка является стандартной ссылкой, которая не может быть добавлена или удалена, свойство BuiltIn возвращает значение True. При проверке правильности добавляемой или удаляемой ссылки следует использовать свойство Name.

    Объект ReferencesEvents

    Возвращается свойством ReferencesEvents.
    Дополнительные сведения
    Объект ReferencesEvents является источником событий, которые возникают при добавлении ссылки или ее удалении из проекта. При добавлении ссылки в проект возникает событие ItemAdded (добавление элемента). При удалении ссылки возникает событие ItemRemoved (удаление элемента).

    Объект VBComponent

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

    Объект VBE

    Объект VBE
    Объект VBE Объект VBE
    Объект VBE Объект VBE
    Объект VBE Объект VBE
    Объект VBE Объект VBE
    Корневой объект, который содержит все остальные объекты и семейства, определенные в языке Visual Basic для приложений (VBA).
    Дополнительные сведения
    Для доступа к объектам, содержащимся в объекте VBE, используются следующие семейства:
    Семейство VBProjects используется для доступа к семейству проектов.
    Семейство Windows используется для доступа к семейству окон.
    Семейство CodePanes используется для доступа к семейству областей программы.
    Семейство CommandBars используется для доступа к семейству панелей команд.
    Семейство Events используется для доступа к свойствам, которые активизируют подключение надстроек ко всем событиям Visual Basic для приложений (VBA).
    Для возвращения активного компонента используется свойство SelectedVBComponent. Активным компонентом является компонент, выбранный в окне проекта. Если элемент, выделенный в окне проекта, не является компонентом, свойство SelectedVBComponent возвращает значение Nothing.
    Примечание. Для каждого объекта в данной модели объектов определено свойство VBE, указывающее на объект VBE.

    Объект VBProject

    Объект VBProject
    Объект VBProject Объект VBProject
    Объект VBProject Объект VBProject Объект VBProject
    Представляет проект.
    Дополнительные сведения
    Объект VBProject используется для задания свойств проекта, для доступа к семейству VBComponents, а также для доступа к семейству References.

    Объект Window

    Объект Window
    Объект Window Объект Window
    Объект Window Объект Window Объект Window
    Объект Window
    Объект Window Объект Window
    Представляет окно в среде разработчика.
    Дополнительные сведения
    Объект Window используется для вывода на экран, скрытия или размещения окон.
    Для закрытия окна, входящего в семейство Windows, используют метод Close. Метод Close действует на окна разных типов следующим образом:

    Окно
    Результат вызова метода Close
    Окно программы
    Удаляет окно из семейства Windows.
    Окно конструктора
    Удаляет окно из семейства Windows.
    Объекты Window типа рамки связанных окон
    Преобразует окна в отдельные несвязанные окна.
    Примечание. Вызов метода Close для окна программы или окна конструктора приводит к фактическому закрытию окна. Заданное для свойства Visible значение False делает окно скрытым, но не закрывает его. Вызов метода Close для окон среды разработчика, таких как окно проекта или окно свойств, приводит к тем же результатам, что и задание значения False для свойства Visible.
    Для перевода фокуса в окно следует использовать метод SetFocus.
    Свойство Visible позволяет задавать или возвращать состояние видимости окна.
    Чтобы проверить тип окна, с которым проводится работа, следует использовать свойство Type. Если имеется несколько окон одного типа, например, несколько окон конструктора, то определить конкретное окно позволяет свойство Caption. Кроме того, нужное окно можно найти с помощью свойства DesignerWindow объекта VBComponent или свойства Window объекта CodePane.

    Семейство CodePanes

    Семейство CodePanes
    Семейство CodePanes Семейство CodePanes
    Содержит активные области программы из объекта VBE.
    Дополнительные сведения
    Семейство CodePanes обеспечивает доступ к открытым областям программы в проекте.
    Для возвращения числа активных областей программы в семействе используют свойство Count.

    Семейство LinkedWindows

    Семейство LinkedWindows
    Семейство LinkedWindows Семейство LinkedWindows
    Содержит все связанные окна в рамке связанных окон.
    Дополнительные сведения
    Семейство LinkedWindows используют для изменения состояния закрепленных и связанных окон в среде разработчика.
    Свойство LinkedWindowFrame объекта Window возвращает объект Window, содержащий допустимое семейство LinkedWindows.
    Рамки связанных окон содержат все окна, которые могут быть связаны или закреплены. В их число входят все окна за исключением окна программы, окна конструктора, окна просмотра объектов и окна поиска и замены.
    Если все области из рамки связанных окон перемещаются в другое окно, то пустая рамка связанных окон уничтожается. Однако главное окно, из которого удалены все области, не уничтожается.
    Чтобы проверить, является ли окно видимым, или сделать окно видимым, используют свойство Visible.
    Для добавления окна в семейство текущих связанных окон используется метод Add. Окно, которое является областью одной рамки связанных окон, может быть добавлено в другую рамку связанных окон. Метод Remove используется для удаления окна из текущих связанных окон; в результате окно становится несвязанным или незакрепленным.
    Семейство LinkedWindows используют для закрепления окон в главном окне или для снятия закрепления.

    Семейство Properties

    Семейство Properties
    Семейство Properties Семейство Properties
    Представляет свойства объекта.
    Дополнительные сведения
    Семейство Properties обеспечивает доступ к свойствам, отображаемым в окне свойств. Каждому свойству, выводящемуся в окне свойств, соответствует объект в семействе Properties.

    Семейство References

    Семейство References
    Семейство References Семейство References
    Представляет набор ссылок в проекте.
    Дополнительные сведения
    Семейство References используют при добавлении или удалении ссылок. Семейство References совпадает с набором ссылок, выделенных в диалоговом окне Ссылки.

    Семейство VBComponents

    Семейство VBComponents
    Семейство VBComponents Семейство VBComponents
    Представляет компоненты, содержащиеся в проекте.
    Дополнительные сведения
    Семейство VBComponents используется для доступа, добавления или удаления компонентов проекта, таких как форма, модуль или класс. Семейство VBComponents является стандартным семейством, которое может быть использовано в блоке ForEach.
    Свойство Parent возвращает проект, в который входит семейство VBComponents.
    В языке Visual Basic для приложений (VBA) поддерживается метод Import, позволяющий добавлять в проект компонент из файла.

    Семейство VBProjects

    Семейство VBProjects
    Семейство VBProjects Семейство VBProjects
    Представляет все проекты, открытые в среде разработчика.
    Дополнительные сведения
    Семейство VBProjects используется для доступа к конкретным проектам в данном экземпляре среды разработчика. Семейство VBProjects является стандартным семейством, которое может быть использовано в блоке ForEach.

    Семейство Windows

    Семейство Windows
    Семейство Windows Семейство Windows
    Содержит все открытые или постоянные окна.
    Дополнительные сведения
    Семейство Windows обеспечивает доступ к объектам Window.
    В семейство Windows входит постоянный набор окон, которые всегда являются доступными в семействе, таких как окно проекта, окно свойств, а также набор окон, представляющих все открытые окна программ и окна конструктора. При открытии окна программы или окна конструктора в семейство Windows добавляется новый компонент. Закрытие окна программы или окна конструктора приводит к удалению компонента из семейства Windows. При закрытии постоянного окна среды разработчика соответствующий объект не удаляется из семейства, но окно делается невидимым.
    |

    

        Программирование: Языки - Технологии - Разработка