От vb6 к vb net


Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

Visual Basic

Visual Basic
Парадигма Процедурный, Объектно-ориентированный, Компонентно-ориентированный, Событийно-ориентированный
Первый появившийся 1991
Стабильная версия 6.0
Печать дисциплины Статическая типизация, Строгая типизация, Динамическая типизация
Расширение файла .bas, .cls, .frm, .vbp, .vbg
Портал: Visual Basic
Главная реализация
Microsoft Visual Studio
Под влиянием
QuickBasic, BASIC
Влияние
Visual Basic .NET, REALbasic, Gambas, Xojo, Basic4ppc

Microsoft Visual Basic — язык программирования и интегрированная среда разработки программного обеспечения. Разрабатывался компанией Microsoft. Visual Basic унаследовал стиль и отчасти синтаксис языка BASIC, имеющего немало диалектов. Visual Basic сочетает в себе процедуры и элементы объектно-ориентированных и компонентно-ориентированных языков программирования, а интегрированная среда разработки VB содержит в себе инструменты для визуального проектирования пользовательского интерфейса, редактор кода с возможностью IntelliSense и подсветкой синтаксиса и инструменты для отладки приложений.

Содержание

Достоинства и недостатки

Достоинства

  • Высокая скорость создания приложений с графическим интерфейсом для Microsoft Windows.
  • Простой синтаксис языка обеспечивает низкий порог вхождения.
  • Возможность компиляции как в машинный код, так и в P-код (по выбору программиста).
  • Безопасность типов обеспечивает защита от ошибок, связанных с применением указателей и доступом к памяти. Этот аспект делает Visual Basic приложения более стабильными, но также является объектом критики.
  • Возможность использования большинства WinAPI функций для расширения функциональных возможностей приложения. Данный вопрос наиболее полно исследован Дэном Эпплманом, написавшим книгу «Visual Basic Programmer’s Gu >Недостатки
  • Поддержка операционных систем только семейства Windows и Mac OS X (Исключение — VB1 for).
  • Отсутствие полноценного механизма наследования реализации объектов. Существующее в языке наследование позволяет наследовать только интерфейсы, но не их реализацию.
  • Практически все встроенные функции языка реализованы через библиотеку времени исполнения, которая, в свою очередь, производит много «дополнительной» работы по проверке и/или преобразованию типов, что замедляет скорость работы приложений.

Язык сильно привязан к своей среде разработки и к операционной системе Microsoft Windows, являясь исключительно инструментом написания Windows-приложений. Привязка к среде заключается в том, что существует большое количество средств, предназначенных для помощи и удобства программирования: встроенный отладчик, просмотр переменных и структур данных на лету, окно отладки, всплывающие подсказки при наборе текста программы. Все эти преимущества делают бесполезным и даже невозможным использование Visual Basic вне среды разработки, например в обычном текстовом редакторе

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

Элементы языка

Типы данных

Переменные объявляются следующим образом: Dim varName As typeName

Где varName — имя переменной, а typeName — ее тип. Тип переменной можно не указывать, тогда переменная объявляется как Variant.

Таблица основных типов

Наименование Размер типа Описание типа данных
Byte 1 байт Байт. Предназначен для хранения целых чисел от 0 до 255. Если переменной такого типа присвоить значение, выходящее за эти пределы, то Visual Basic сгенерирует ошибку времени выполнения.
Integer 2 байта Целое. Предназначен для хранения целых чисел в диапазоне −32768 до 32767. Суффикс для обозначения типа «%».
Long 4 байта Длинное целое. Предназначен для хранения целых чисел в диапазоне −2 147 483 648 до 2 147 483 647. Суффикс для обозначения типа «&».
Single 4 байта С плавающей точкой одинарной точности. Диапазон от -3,402823E38 до -1,401298E-45 для отрицательных значений; от 1,401298E-45 до 3,402823E38 для положительных значений. Суффикс для обозначения типа «!».
Double 8 байт С плавающей точкой двойной точности. Переменные этого типа позволяют хранить числа с точностью до 16 цифр и длиной до 300 символов. Диапазон значений варьируется от −1.80E+308 до 1.80E+308. Суффиксом является «#». Вычисления с ним являются приблизительными, так как используется бинарное представление числа согласно стандарта IEEE 754.
Decimal 16 байт Масштабируемое целое. Этот тип использует десятичное представление чисел. Вычисления с ним, также как с типом Currency являются точными. Диапазон значений от −7.92E+28 до 7.92E+28. Нельзя напрямую объявить переменную с типом Decimal. Он может использоваться только как подтип для Variant и переменную можно привести к данному типу с помощью функции кастования CDec.
Boolean 2 байта Булев тип данных может хранить только два значения: True либо False, истина или ложь. Истинное значение в VB соответствует целочисленной −1, а ложь равна 0, а при неявном приведении типа, любое численное значение отличное от нуля рассматривается как истина. Такое поведение позволяет использовать логические операторы AND, OR, NOT, XOR не только для булевой алгебры, но также и для битовых операций.
String 10 + 2*N байт Строка переменной длины. Предназначен для хранения строковой (символьной) информации. Сама строка хранится в кодировке Unicode, поэтому каждый символ кодируется 2-мя байтами. Если посмотреть тип изнутри, то используется дополнительно 4 байта для хранения указателя на строку, 4 байта для размера строки, а сама строка завершается нуль-символами (ещё 2 байта). Таким образом максимальный размер строки может достигать до 2 Гбайт. Суффикс типа «$».
String*N 2*N байт Строка постоянной длины. Также как и тип String хранит символьные данные, за исключением того, что размер данных фиксированный и указывается при объявлении переменной. Если значение строки слишком большое, то она усекается до необходимого размера. Если строка меньше чем требуется, то происходит выравнивание размера добавлением символа «пробела». Следует заметить, что фиксированные строки и массивы, а также структуры не могут быть больше 64 кб.
Date 8 байт Тип данных позволяет хранить значения времени и даты в промежутке от полуночи 1 января 100 года до полуночи 31 декабря 9999 года. Если переменной присвается только значение даты, то время равняется 00:00. Целочисленная единица представляет собой одни сутки. Это позволяет добавлять и вычитать даты используя только математические операторы, но для выполнения этих целей VB предоставляет специализированные функции работы с датами.
Object 4 байта Используется для хранения ссылки на объект. Присваивание переменной для этого типа происходит с помощью оператора Set. Сам тип является аналогом IDispatch, в нем хранится ссылка на интерфейс IDispatch. Для любого объекта нужно использовать IUnknown.
Currency 8 байт Денежный. Данный тип может иметь до 4 цифр после запятой, и до 14 — перед ней. Значение представляют собой числа в десятичной системе счисления, а не в двоичной, как это происходит для типов с плавающей запятой одинарной и двойной точности. Таким образом вычисления будут произведены точно. Диапазон значений от −922 337 203 685 477,5808 до 922 337 203 685 477,5807. Данный тип является предпочтительным для проведения финансовых расчетов. Суффикс «@».
Variant 16 байт / 22 байта+N байт / N-байт Переменная типа Variant может содержать данные любого типа, включая ссылки на объекты, пользовательские типы и массивы. Visual Basic автоматически производит необходимые преобразования данных. Подтип содержащий число требует 16 байт памяти, а для хранения строковых данных 22 байта + длина самой строки. Диапазон значений равен диапазону значений подтипа. Данный тип самый медленный по скорости выполнения, так как требуется время на распаковку и упаковку значений.

Массивы

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

Присвоение значений элементам массива:

Также можно присвоить значения элементам массива в строке объявления переменной:

От vb6 к vb net

Инф. системы
Модель города
Книги и статьи

ЭРА

mista.ru / Инф. технологии / Технология .Net / Впечатление от VB.Net

Написать этот текст меня сподвигла статья Виталия Гриненко «Моё первое впечатление о VB7» [1]. Это одна из немногих статей о .NET на сайте vbnet.ru, и резко негативная по отношению к новой технологии. Мне хотелось бы выразить свое, причем совсем не первое впечатление о продукте, который так резко «охаяли». Я прошу Виталия не воспринимать мою статью как выпад в отношении его лично или его профессионализма.

Статью В.Гриненко можно разделить на три части. Это впечатления об установке Visual Studio .NET, впечатления от интерфейса и впечатления от переноса простейшей программы из VB6 в VB.NET. Как мы видим, в целом все впечатления — негативные. Проблемы при установке, непривычный («сишный») интерфейс, какой-то лишний код появившийся при переносе, ну и конечно безрадостные перспективы. Попробуем разобраться.

Сначала о терминологии

В статье Виталия используются слова VSN, VN и даже VB-VN. На мой взгляд, всегда стоит придерживаться общепринятых сокращений:
VB Visual Basic (как некое семейство продуктов)
VS Visual Studio
VB6 Visual Basic версии 6, входит в состав Visual Studio 6
VB.NET Visual Basic .NET (иногда также применяют сокращение VB7)
VS.NET Visual Studio .NET

Далее, как мне кажется, основная ошибка в том чтобы при переходе к VB.NET рассматривать этот переход ТОЛЬКО в контексте VB. Этот контекст здесь занимает далеко не основное место (хотя у VB-программиста и возникает желание сделать его основным). Начинать надо с того что .NET — это новая платформа, т.е. новая среда исполнения приложений. Эту среду обеспечивает .NET Framework, который сейчас поставляется в виде отдельного инсталлятора, а скоро будет вообще входить в состав Windows (в частности, в готовящуюся к выпуску Windows NET Server).

На данный момент практически нет приложений, целиком написанных на .NET, но думаю что скоро они появятся (одна из первых ласточек — появление драйверов для Matrox Parhelia, интерфейс пользователя к которым написан на .NET — см. [5]). Вероятно, со временем большая часть стандартных приложений Windows будет переписана под .NET.

Новая среда исполнения предлагает свою библиотеку — своего рода API — Common Language Runtime (CLR). (Не берусь судить насколько она хороша или плоха, ибо нахожусь в процессе ее изучения.) Требования к компиляторам с языков программирования, с которыми нам нужно работать, заключаются в том чтобы они компилировали исходный код в Microsoft intermediate language (MSIL) и использовали CLR (если говорить точнее, каждый такой компилятор должен соответствовать Common Language Specification — CLS).

Получается, что на каком бы языке ты не писал, ты пользуешься одними и теми же библиотеками, составляющими CLR. Тем самым языки значительно сближаются: различия сводятся по сути лишь к набору абстракций, предлагамому языком, и синтаксису. Перенос программ между языками значительно упростится, переход от одного языка к другому для самого программиста — тоже. В настоящее время этот ряд языков составляют VB.NET, C#, C++, JScript и J# — все это от MS, плюс к тому — продукты сторонних производителей.

Таким образом, VB в .NET теперь выступает лишь в качестве одного из множества языков. В Microsoft его постарались сделать похожим на VB6 настолько, насколько это только возможно. Очевидно, это преследует цель облегчить как переход от VB6 к VB.NET для программистов, так и перенос написанного на VB6 кода. Кстати, под влиянием общественности MS сохранила в VB.NET некоторые особенности, от которых собирались избавится (например, в VB.NET сохранено полное вычисление условных выражений — многим не понравилось что в бета-версиях части логических выражений вычислялись как в C/C++ — по необходимости).

Установка Visual Studio .NET

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

Прежде чем запускать инсталлятор, убедитесь что ваша машина потянет этот продукт. Не скажу точно, но думаю что 600MHz-процессор и 256Мб памяти — это минимальные требования для комфортной работы. Приготовьте порядка 1.5-2Гб на винчестере под VS и MSDN. Не стоит ставить VS.NET на Windows 98 (не уверен что это вообще возможно, да и Windows 98 уже несколько «мала» для такой машины).

Весь процесс установки занимает один час. Сначала — Component Update с диска #5 — обновление ОС и приложений, установка .NET Framework. Советую все необходимые Service Pack’и поставить ручками до установки VS.NET. Сам процесс установки на моей памяти всегда проходил довольно гладко.

Не беспокойтесь за старый добрый VB6 — после установки VB.NET обе среды нормально работают как вместе так и отдельно.

Интерфейс VS.NET

Microsoft давно стремилась унифицировать интерфейс различных сред разработки в нечто единое. В VS6 к этому ближе всего подошла среда Visual InterDev. Теперь же, когда среда должна позволять редактировать в разных окнах код на разных языках, вообще не имеет смысла делать для них различные IDE. Неприятность заключается в том что среда разработки стала намного тяжелее. Кроме того она еще и довольно таки прожорлива по отношению к памяти (причем отдавать память она тоже не очень стремится, в результате чего работающая несколько дней MS Development Environment может забрать под себя всю доступную память).

Несмотря на некоторую задумчивость в работе, можно сказать что среда разработки стала удобнее. Скользящие окошечки быстро надоедают, но все это легко настраивается под себя, набор опций также весьма обширен. Работать с проектом в команде тоже стало гораздо приятнее — интеграция с Visual SourceSafe сделана лучше чем в VB6.

При запуске проекта действительно происходит компиляция — отладчик работает только с готовым кодом, и ему не важно на каком языке написан его исходник. Из средств отладки меня порадовало окошко Quick Watch — по сравнению с убогим окошком того же названия в VB6 — это настоящий прогресс.

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

VB.NET-приложение

Возвращаясь к статье Виталия — что же у нас получилось при переносе простейшего приложения? Авторский код (те семь строк что написал Виталий) на самом деле остался неизменным. В vb-файл добавилось два региона («Windows Form Designer generated code» и «Upgrade Support»), которые обычно закрыты и не видны при редактировании. Как нетрудно заметить, первый регион описывает создание контролов и задание их свойств (а также свойств самой формы). Дизайнер показывает этот самый код в графическом виде, и позволяет графически же его редактировать. То есть теперь нет frm-файлов — облик формы описывается в виде команд в одном файле с кодом.

Такой же подход принят, например, в библиотеке Swing для Java — там тоже облик формы описывается в виде кода. Чем это лучше? Да тем что вы теперь четко контролируете, что именно вы нарисовали, и можете все поправить ручками.

Что касается второго региона («Upgrade Support») — очевидно что он появился только из-за того что программа была перенесена из VB6. Если создать такое же приложение прямо в среде VB.NET, этого региона просто не будет.

Распространение .NET-программ

Чтобы ваша программа, написанная под .NET, работала на другой машине, вовсе не нужно тащить за ней VS.NET. Достаточно установить туда .NET Framework и компоненты, специфичные для вашей программы. Объем .NET Framework версии 1.0 — 21Мб (а вовсе не сотни мегабайт — по словам Виталия). Последний Service Pack для .NET Framework (это SP2) имеет объем 6.7Мб. При желании можно интегрировать .NET Framework в инсталлятор вашей программы.

Заключение

Переход на .NET очень напоминает мне (и не только мне, кстати — см. [4]) переход от DOS к Windows несколько лет назад. Нас ждут примерно те же самые проблемы и задачи:
— смена програмного окружения;
— смена концепций;
— смена среды разработки;
— изучение нового API большого объема;
— изучение нового языка.

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

Описание событий VB (Visual Basic)

Здесь размещены подробные описания всех событий всех основных элементов управления, встроенных в Visual Basic. Сюда не входят события подключаемых элементов управления, таких например, как Microsoft Common Controls и т.п. Многие события снабжены примерами их использования. Всё переводилось мной со стандартного Help’а VB5.


В Visual Basic структура обработчика событий имеет следующую схему:

[ Private | Public ] Sub Объект_ИмяСобытия ([arglist])

Внутри таких процедур и содержится основной код Visual Basic. Остальное находится в пользовательских функциях и процедурах.

Выберите интересующее вас событие:

Это событие имеет только форма.

Activate — вызывается в тот момент, когда форма становится активной (получает фокус). Однако, если перейти к другому приложению Windows, а затем вернуться к своему, то это событие не произойдёт. Оно срабатывает только при переключении между формами внутри программы.

Deactivate — Событие, обратное событию Activate. Вызывается при потере фокуса формы.

ComboBox — меняется текст в текстовой части элемента. Происходит только тогда, когда свойство Style установлено в 0 (Dropdown Combo) или 1 (Simple Combo) и юзер изменяет текст или вы меняете его в коде программы.

DirListBox — Меняется выбранная директория. Происходит когда юзер делает двойной клик на новой директории или когда меняется свойство Path в коде.

DriveListBox — Меняется выбранное устройство. Происходит когда юзер меняет устройство, выбрав его из списка, или когда меняется свойство Drive в коде.

HScrollBar и VScrollBar (горизонтальная и вертикальная прокрутки) — Подвинулся скрол. Происходит когда юзер передвинул и отпустил полоску прокрутки или меняется свойство Value в коде.

Label — Меняется содержимое метки. Происходит когда меняется свойство Caption в коде.

PictureBox — Меняется содержимое PictureBox. Происходит при смене свойства Picture. (а также при использовании LoadPicture, прим.eax)

TextBox — Меняется текст в текстовом поле. Происходит при смене текста юзером или при смене свойства Text в коде.

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

Для формы такое собитие выполняется при клике на свободном месте формы, или по отключённому элементу управления (т.е. когда его Enabled = False).

Вообще событие происходит и для правой кнопки мыши и для левой. Но для элементов CheckBox, CommandButton, Listbox, и OptionButton происходит только при нажатии левой кнопки мыши.

Для ComboBox или ListBox оно происходит и при клике мышой и также при смене текущего элемента клавишами курсора.

Происходит при нажатии на «ПРОБЕЛ» у элементов CommandButton, OptionButton, или CheckBox, когда те имею фокус.

При нажатии на ENTER при фокусе на элементе CommandButton (то бишь гашей кнопке) и когда установлено свойство Default.

Происходит при нажатии на ESC когда форма имеет Cancel кнопку — CommandButton с установленым свойством Cancel.

Также происходит при нажатии на горячую последовательность. Например, если кнопка имеет Caption — «&Go», то при нажатии Alt+G запуститься событие.

Также, событие Click может быть сгенерировано в следующих случаях в коде: Установка значения Value для OptionButton и CheckBox.

Происходит при двойном клике по объекту.

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

Для других элементов:

Двойной клик по объекту левой кнопкой.

Двойной клик по элементу в ComboBox, когда Style = 1. Или также в FileListBox, ListBox, DBCombo, или DBList.

Происходит при завершении операции перетаскивания (Drag&Drop). В обработку события передаются 3 аргумента — координаты курсора (X,Y), где был отпущен объект, и ссылка на объект (Source), который был перетащен.

Происходит когда объект перетаскивается над получателем, но кнопка ещё не отпущена. Имеет 4 параметра. Координаты курсора, ссылка на объект, и текущее состояние (State As Integer):

0 = Enter (вошёл) (источник вошёл в область объекта).
1 = Leave (покинул) (источник ушёл из этой области).
2 = Over (над) (произошёл сдвиг в пределах области).

Происходит только при работе с базами данных. Коркретно: при ошибке в доступе к данным при выполнении кода.

Имеет 2 параметра:

dataerr — номер произошедшей ошибки
response — номер, соответствующий выбранному в настройках (Settings):

Если vbDataErrContinue, то response = 0 (Продолжить)
Если vbDataErrDisplay, то response = 1 (Default) Показать сообщение об ошибке.

Происходит, когда объект получает фокус, или при нажатии кнопки Tab или кликом по объекту, а также при запуске метода SetFocus в программе. Форма получает фокус только тогда, когда все видимые элементы отключены (Enabled = False).

Это событие имеет только форма.

Обрабатывается первым и один раз. Visual Basic вызывает его при первом создании формы. Здесь обычно размещают код, для инициализации нужных переменны в программе.

Происходит когда у ListBox контрола свойство Style установлено в 1 (checkboxes) и выбран или сброшен флажок у какого-либо элемента (item) в контроле.

Передаётся один параметр:

index — номер элемента, который был выбран в ListBox.

Происходит когда юзер нажимает (KeyDown) или отпускает (KeyUp) клавишу, в то время как объект имеет фокус. Чтобы получить код клавиши, используйте событие KeyPress. Параметров нет.

Происходит когда юзер нажамает и отпускает клавишу на клавиатуре.

Событие имеет один параметр:

keyascii — код нажатой клавиши. Например, если нажать на клавишу «1» (основного ряда), то keyascii будет равен 49. Если нажать ESC, то 27, и и.д.

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

LinkClose: Происходит когда DDE соединение закрывается. Может произойти в любое время.

LinkError: Происходит при возникновении ошибки в ходе связи DDE.

LinkNotify: Происходит когда у источника меняются данные, на которые установлена ссылка DDE.

LinkOpen: Происходит при создании инициализации DDE связи с источником.

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

Это событие имеет только форма.

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

Это событие может выполняться несколько раз. Т.е. если вы выгрузите форму оператором Unload, а затем вновь загрузите оператором Load или методом Show, то это событие будет выполнено.

Происходит при потере объектом фокуса, или при нажатии Tab юзером, или при использовании метода SetFocus для другого объекта.

Происходят когда юзер нажимает (MouseDown) или отпускает (MouseUp) кнопку мыши.

Имеют 4 передаваемых параметра:

button — содержит integer — номер кнопки мыши. С помощью этого события можно опеределить какую кнопку нажал пользователь. Для этого используюся константы: vbLeftButton (левая), vbMiddleButton (средняя), vbRightButton (правая). Проверить можно примерно так:

If button = vbRightButton Then .

shift — содержит integer — указывающее на состояние клавиш Shift, Alt и Ctrl. Бит 0 — Shift, бит 1 — Ctrl, бит 2 — Alt. Для опредения факта нажатия клавиш Ctrl и Alt можно использовать такой код:

If (Shift And (vbCtrlMask Or vbAltMask)) = (vbCtrlMask Or vbAltMask) Then .

Т.е. мы проверяем содержит ли переменная Shift биты 1 и 2 (оператором And). Скобки везде обязательны. vbShiftMask, vbAltMask, vbCtrlMask — это обычные константы, содержащие маски битов:

vbShiftMask = 1 (нулевой бит) Bin: 00000001
vbCtrlMask = 2 (первый бит) Bin: 00000010
vbAltMask = 4 (второй бит) Bin: 00000100

x, y — координаты курсора мыши того места, где произошло событие MouseUp или MouseDown. Координаты всегда зависят от координытной системы, задаваемой свойствами ScaleHeight, ScaleWidth, ScaleLeft, ScaleTop объекта.

Происходит когда курсор мыши изменяет своё положение над объектом. Т.е. когда курсор стоит на месте, событие не происходит. При каждом сдвиге курсора — срабатывает.

Параметры те же, что и у MouseDown и MouseUp.


Происходит немедленно после того, как OLE контейнер сдвигается или меняет размеры пока объект активен.

left — координата левой грани OLE контейнера
top — координата верхней грани OLE контейнера
width — ширина OLE контейнера
height — высота OLE контейнера

Происходит когда компонент — источник «брошен» на компонент — цель, информируя объект о том, что либо завершён, либо отменён процесс перетаскивания.

Имеет один параметр:

effect — привожу оригинал: A long integer set by the source object identifying the action that has been performed, thus allowing the source to take appropriate action if the component was moved (such as the source deleting data if it is moved from one component to another). The possible values are listed in Settings.

А Settings может быть:

vbDropEffectNone = 0 — операция «бросания» (Drop) была отменена.
vbDropEffectCopy = 1 — показывать значок копирования данных.
vbDropEffectMove = 2 — «сбрасываемые» данные являются ссылкой на оригинальные данные.

Это событие происходит когда на объект сбрасываются OLE данные. Например, происходит при перетаскивании на объект файлов из проводника, или перетаскивании изображения из Internet Explorer и т.п.

Замечание: Это событие происходит только в том случае, когда свойство OLEDropMode установлено в 1 (Manual).

Имеет очень много параметров:

data — объект типа DataObject. Имеет 4 метода и одно свойство — коллекцию файлов, перетаскивамых на объект. Для получения данных можно использовать метод GetData. Чтобы узнать формат данных, перекинутых на объект можно использовать метод GetFormat.

effect Long — привожу оригинал — set by the target component identifying the action that has been performed (if any), thus allowing the source to take appropriate action if the component was moved (such as the source deleting the data). The possible values are listed in Settings.

button — то же, что и в событии MouseDown(Up).

shift — то же, что и в событии MouseDown(Up).

x,y — то же, что и в событии MouseDown(Up).

Пример. Обработаем перетащенные на форму файлы. Не забудьте установить свойство OLEDropMode в 1.

Private Sub Form_OLEDragDrop _
(Data As DataObject, Effect As Long , _
Button As Integer , Shift As Integer , _
X As Single , Y As Single )
‘ перетаскиваются файлы?
If Data.GetFormat(vbCFFiles) = True Then
Dim c As Long
‘ пройдёмся по всей коллекции
For c = 1 To Data.Files.Count
‘ покажем имя перетащенного файла
MsgBox «Был перетащен файл: » & Data.Files(c)
Next c
End If
End Sub

Происходит при перетаскивании над объектом. Парметры — комбинация парамтров событий OLEDragDrop и обычного DragOver.

Происходит после каждого события OLEDragOver. OLEGiveFeedback позволяет источнику обеспечивать визуальную «отдачу» пользователю, такое, как изменение курсора мыши (посмотрите на него при перетаскивании файлов в проводнике с нажатым Ctrl, — видите значок «+», вот это и есть та «отдача»?), которое будет говорить пользователю о том, что происходит.

Параметры — effect и

defaultcursors — boolean — разрешает или запрещает использование курсора по умолчанию. Если True — то используется курсор по умолчанию, если False, то использутся курсор, указанный пользователем в свойстве MousePointer объекта Screen.

Происходит тогда, когда начинается перетаскивание (т.е. когда перетаскиваемый объект (файл, например) появляется над объектом приёмником). Имеет 2 параметры:

data — то же что и у события OLEDragDrop.

allowedeffects — Long — содержит поддерживаемые источником эффекты. Возможные значения описаны в Setting’сах.

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

Разберём чуть подробнее:

Событие Paint полезно, если вы используете графические методы объекта (Line, PSet. ) в коде. С помощью этого события вы можете убедиться в том, что данные перерисовались, когда это необходимо.

Событие Paint вызывается при запуске метода Refresh.

Если AutoRedraw установлено в True, то перерисовка происходит автоматически, таким образом, это событие теряет свою необходимость.

Если свойство ClipControls установлено в False, то графические методы в процедуре Paint воздействуют только на видимую часть формы; иначе, графические методы перерисовывают всю открытую часть формы (т.е. ту, которая не перекрыта такими элементами, как Image, Label, Line, и Shape).

Используя метод Refresh в событии Resize вызывает перерисовку всего объекта каждый раз, когда происходит изменение его размеров (Resize).

Замечание: Используя событие Paint для определённых задач, может произойти каскадирование событий (Т.е. просто напросто произойдёт рекурсия, когда Paint будет вызывать сам себя, и произойдёт переполнение стека). Чтобы этого избежать, нужно придерживаться следующих правил:

· Избегать вызова события Paint при сдвиге или изменении размеров объекта.
· Внутри события Paint изменять свойства, которые могут вызвать событие Paint. Такие, например, как BackColor.
· Включать метод Refresh метод внутрь Paint.

Происходит при смене пути, установкой свойства FileName или Path в коде.

Замечание: Вы можете использовать это события, чтобы сообщить FileListBox’у о том, что путь у DirListBox изменился.

Происходит при изменении маски (такой, как «*.*») установкой свойств FileName или Pattern в коде.

Это событие имеет только форма.

Происходит перед закрытием формы или приложения. Если закрывается MDI форма, то это событие происходит сначала для формы контейнера, и лишь потом для дочерних форм.

Это событие происходит перед событием Unload.

В обработчик данного события передаётся два параметра:

cancel — integer — если в обработчике события присвоить переменной cancel значение True, то выгрузка формы будет отменена. Если оставить там False, то форма благополучно выгрузится.

unloadmode — константа. Содержит значение — почему происходит выгрузка формы. Может принимать:

vbFormControlMenu = 0 — юзер выбрал команду Close (Закрыть) в меню приложения (слева вверху в заголовке формы).

vbFormCode = 1 — произошёл вызов оператора Unload в коде программы.

vbAppWindows = 2 — Windows завершает работу.

vbAppTaskManager = 3 — закрытие приложения происходит через Ctr+Alt+Del.

vbFormMDIForm = 4 — дочерняя MDI форма закрывается, т.к. закрывается главная.

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

Private Sub Form_QueryUnload _
(Cancel As Integer , _
UnloadMode As Integer )
Dim rez As VbMsgBoxResult
rez = MsgBox(«Вы действительно» & _
» хотите выйти?», _
vbQuestion + vbYesNo)
If rez = vbNo Then Cancel = 1
End Sub

Происходит когда запись становится текущей записью.

Когда Data контрол загружен, первая запись в объекте RecordSet становится текущей, и вызывается это событие. Когда бы юзер не кликнул любую кнопку на контроле Data, передвигаясь с записи на запись, или вы используете одно из методов Move в коде (такие, как MoveFirst, MoveNext, FindFirst..), или любое другое свойство, которое может изменить текущую запись — происходит событие Reposition.

Событие Validate происходит перед этим событием.

Происходит когда объект первый раз появляется или когда меняется состояние окна (например, при свёртывании и развёртывании окна). А также при смене размеров окна.

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

Происходит тогда, когда сдвигается полоса прокрутки (ScrollBar).

Для DBGrid это событие происходит, когда двигается вертикальная или горизонтальная полоса прокрутки.

Для ComboBox это событие происходит при сдвиге скролбара в выпадающем списке.

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

Private Sub HScroll1_Scroll()
&nbsp&nbsp&nbsp&nbspForm1.Caption = HScroll1.Value
End Sub

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

Кстати, избегайте использования фукнции MsgBox в этом событии!

Это событие имеет только форма.

Происходит когда все ссылки на экземпляры форм, MDI форм, элементы управления, классы удалены из памяти (установкий переменной в Nothing).

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

Это событие имеется только у элемента управления Timer.


Оно происходит через определённый интервал времени, указанный в его свойтве Interval.

Timer невидим для пользователя, и полезен для внутренних процессов программы.

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

Например, с его помощью можно сделать часы. Для этого достаточно поместить на форму элемент Timer, установите его свойство Interval в 1000 (1 сек = 1000 мс), и вставить следующий код:

Private Sub Timer1_Timer()
&nbsp&nbsp&nbsp&nbspForm1.Caption = Time
End Sub

Функция Time возвращает текущее системное время. Таким образом, каждую секунду будет выполнять событие Timer, и следовательно изменение заголовка формы.

Примечание: количесво таймеров на форме не ограничего.

Это событие имеет только форма.

Происходит когда форма выгружается из памяти (оператором Unload, например, или нажатием на крестик). В дальнейшем она может быть загружена оператором Load.

При перезагрузке формы ВСЕ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ ИНИЦИАЛИЗИРУЮТСЯ ЗАНОВО, т.е. все значения, которые были в них — теряются.

Происходит когда меняются данные (при работе с БД).

Имеет параметр Code — integer — описывает, как объект был изменён (описано в настройках). Может принимать следующие константы:

vbOLEChanged = 0 — Данные объекта изменились
vbOLESaved = 1 — Данные объекта были сохранены приложением
vbOLEClosed = 2 — Файл, на который ссылается объект был закрыт
vbOLERenamed = 3 — Файл, на который ссылается объект был переименован

Это событие нужно для проверки введённых данных. Например, в TextBox. Это событие выполняется только тогда, когда свойство объекта CausesVal >

Рассмотрим пример, как можно проконтролировать данные, введённые в текстовое поле. Поместите на форму TextBox и вставьте код:

Private Sub Text1_Validate _
(Cancel As Boolean )
&nbsp&nbsp&nbsp&nbspIf Not (IsNumeric(Text1.Text)) Then
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspText1.ForeColor = vbRed
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMsgBox «Введите в TextBox числа»
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspCancel = True
&nbsp&nbsp&nbsp&nbspElse
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspText1.ForeColor = vbButtonText
&nbsp&nbsp&nbsp&nbspEnd If
End Sub

Этот код не примет введённый в TextBox текст, пока тот не будет являться числом. Если установить параметр Cancel в True, то фокус вернётся обратно TextBox.

Это событие происходит при потере фокуса у объекта.

Основы среды программирования Microsoft Visual Basic 6.0

В данном материале рассмотрены основы программирования на языке Visual Basic, а конкретней в среде программирования Microsoft Visual Basic 6.0. Данная среда программирования и язык Visual Basic является одним из самых легких языков для начинающих программистов. А почему? В этой статье мы с Вами и попробуем разобраться.

Теория по Visual Basic

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

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

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

Чтобы решить обе проблемы, компания Microsoft разработала язык Visual Basic, а точнее среду программирования Microsoft Visual Basic, которая объединила в себе язык программирования BASIC и возможности быстрого создания пользовательского интерфейса простыми способами. В отличие от многих других языков программирования, BASIC был специально разработан для обучения основам программирования начинающих пользователей.

Что касается визуальных возможностей среды Visual Basic, то здесь Вы можете создавать свой пользовательский интерфейс без написания отдельных команд. Иными словами, Вы создаете интерфейс, как будто Вы рисуете себе картинку, без всяких проблем.

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

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

Основы среды программирования

В Visual Basic все элементы интерфейса делятся на две группы: формы и объекты.

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

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

Разные элементы имеют разные свойства. Каждый раз, когда Вы рисуете форму или объект, Visual Basic назначает им свойства, установленные по умолчанию.

В отличие от таких языков программирования как C++, Visual Basic избавляет Вас от необходимости использовать коды для создания пользовательского интерфейса, но эти команды все же необходимы для того, чтобы Ваша программа заработала. В мире Visual Basic команды (коды) служат двум целям: делают пользовательский интерфейс рабочим, а также обрабатывают различные данные, с тем, чтобы вернуть пользователю полезный результат.

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

Слово Basic, в названии Microsoft Visual Basic 6.0., указывает лишь на то, что синтаксис программ и операторы ссылаются на язык высокого уровня Basic (Beginners Atlpurpose Symbolic Instruction Code). Но если Вы знаете обычный Basic, то очень скоро убедитесь, что Visual Basic заметно от него отличается.

Если Вас интересует вопрос что такое Visual Basic — компилятор или интерпретатор, можно смело сказать: «И тем, и другим». Его нельзя на сто процентов отнести ни к компиляторам, ни к интерпретаторам.

Основным признаком интерпретатора Visual Basic является то, что созданные с помощью него программы выполняются только в среде разработки. Программу можно запустить непосредственно из среды и если в ней есть ошибки, они сразу же распознаются. Все это наблюдается и в Visual Basic, где можно запустить приложение непосредственно в среде программирования. При этом Visual Basic использует технологию Threaded-p-Code, при которой каждая написанная строка кода преобразуется в промежуточный код — Threaded-p-Code. Не путайте это не машинный код, но такой код выполняется быстрее, чем при работе с обычным интерпретатором. Во-первых, Visual Basic сразу же проверяет синтаксис программы и выдает сообщение, если присутствует ошибка. Также можно самим искать эти ошибки.

При этом Visual Basic — не просто интерпретатор, так как это означало бы, что приложения выполняются только в среде Visual Basic. Эта среда программирования предоставляет возможность создавать и исполняемые ЕХЕ-файлы, поэтому она относится и к компиляторам.

Visual Basic нельзя назвать чистым компилятором, так как в отличие, например, от Visual C++, Visual Basic не создает исполняемый файл сразу же при запуске из среды разработки. Для создания такого файла необходимо сделать это явно (команда File\Make ***.EXE). Начиная с пятой версии, Visual Basic обладает так называемым «Native Compiler», т.е. компилятором, который может создавать машинный код. Таким образом, Visual Basic объединяет в себе возможности, как интерпретатора, так и компилятора. И это имеет больше преимуществ, чем недостатков.

Теперь давайте поближе познакомимся со средой программирования Microsoft Visual Basic. При открытие самой среды программирования у Вас появляется окно «Новый проект», в котором и нужно выбрать какой проект мы будим создавать, для начала мы создадим простой проект, а точнее стандартный, «Standard EXE» это — стандартное выполняемое приложение. В дальнейшем, когда Вы уже научитесь работать в этой среде можете пробовать создавать и другие проекты, например ActiveX DLL — динамическая библиотека ActiveX.

После того как Вы нажали создать (открыть) новый проект, у Вас появится сама среда программирования Visual Basic, а точнее форма, но пока в ней ничего нет, и она ничего делать не умеет. Для любопытства можете нажать команду меню run->start (запустить) или просто выбрать в быстром меню кнопку «старт», у Вас запустится программа, но как я уже сказал, она ничего не делает, это просто пустая форма. Закройте это окошко и давайте наполним нашу программу пользовательским интерфейсом и программным кодом.

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

Для начала мы с Вами сделаем простенькую программу.

Поместите на форму следующие объекты: 2 кнопки CommandButton (Кнопка управления) и одно текстовое поле TextBox (Текстовое поле). Они расположены слева и называются «Кнопки панели элементов управления». Теперь когда у Вас они расположены на форме, можете, как угодно их поместить, растянуть, и даже задать какие-нибудь свойства, которые расположены справа. Мы с Вами зададим всего лишь их название, для этого выделите кнопку Command1 (просто нажав на нее) и с права в окне свойств найдите поле Caption и задайте название этой кнопки (измените Command1 например на «Выполнить»). Теперь выделим Command2 и зададим ей название «Выход».
Теперь, когда у нас есть объекты на форме, давайте зададим им действия, которые они должны выполнять. Щелкните 2 раза по кнопки Command1 (или как у нас уже «Выполнить») и у Вас откроется окно кода где написано:

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

Здесь мы задали, что при нажатие этой кнопки в текстовом поле будет появляться эта надпись.
Можете закрыть по крестику окно кода, и щелкнуть 2 раза по кнопке Command2 (у нас «Выход»), появляется то же самое окно, но уже готовое, для того чтобы задать действие для второй кнопки пишем вот что:

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

Все можете запустить Вашу первую программу и попробовать, как она работает, но это конечно все только начало т.к. на Visual Basic можно написать такие серьезные программы которые не уступят таким программам, которые написаны, например, на языке C++.

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

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

Среда программирования VB .NET: Visual Studio .NET

Если вам доводилось работать с предыдущими версиями VB, интегрированная среда разработки (IDE) .NET — Visual Studio .NET — покажется отдаленно знакомой. Многое сохранилось с прежних времен — сама концепция ускоренной разработки приложений (RAD, Rapid Application Development); элементы, размещаемые на форме; запуск программы клавишей F5 и т. д.; но многое изменилось, притом в основном в лучшую сторону. Например, ужасный редактор меню, сохранившийся со времен VB1, был заменен системой редактирования меню «на месте», пользоваться которой — одно удовольствие (см. главу 8).

Кроме того, VB .NET, в отличие от прежних версий VB, не ограничивается приложениями, ориентированными на графический интерфейс, и позволяет строить приложения других типов. Например, к вашим услугам web-приложения, серверные приложения и даже консольные приложения, работающие в окне, похожем на окно DOS-сеанса. Все «визуальные» языки Microsoft наконец-то обрели единую среду разработки. Времена, когда в VC++, VJ++, Visual InterDev и Visual Basic использовались разные IDE, безвозвратно прошли (кстати говоря, пакет Visual InterDev был интегрирован в VS .NET). Другая приятная особенность новой среды — широкие возможности настройки. Теперь среду VS .NET можно настроить так, чтобы она была похожа на IDE от VB6 или любую другую IDE по вашему выбору.

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

Если вы еще не работали с Visual Basic, эту главу следует читать более подробно.

Приступаем к работе

Пользователи прежних версий VB обычно предпочитают, чтобы среда IDE по внешнему виду и поведению была как можно ближе к традиционной среде VB6. Для этого откройте на начальной странице VS ссылку My Profile и выберите строку Visual Basic Developer в списке Profile, как показано на рис. 2.1.

Рис. 2.1. Начальная страница Visual Studio

Вы можете настроить клавиатуру и раскладку окон и сохранить разные комбинации параметров в разных профилях. Чтобы сменить профиль, выполните команду Help > Start Page и откройте ссылку My Profile.

В VB .NET каждый проект является частью того, что Microsoft называет решением (solution). Любой код, созданный в VB .NET IDE, относится к некоторому решению. Решение можно рассматривать как хранилище всей информации, необходимой для компиляции программы и ее перевода в форму, пригодную для исполнения. Таким образом, решение состоит из одного или нескольких проектов; различных вспомогательных файлов (графических изображений, ресурсных файлов, метаданных, то есть данных, описывающих другие данные, и т. д.); документации в формате XML и практически всего, что приходит В голову. Программисты с опытом работы на VB5 или 6 могут рассматривать решение как аналог программной группы. На первых порах решения кажутся неудобными; откровенно говоря, при написании мелких программ они действительно слишком громоздки. Но постепенно вы привыкнете к решениям и убедитесь, что они заметно упрощают работу над крупными коммерческими проектами. Дело в том, что решение позволяет легко выбрать файлы, задействованные в решении конкретной проблемы.

Создание нового решения

Новое решение создается командой File > New. Вам предлагается выбрать один из двух вариантов: создать новый проект (New Project) или пустое решение (Blank Solution). Даже при выборе первого варианта IDE все равно создает решение. Различие между этими вариантами заключается в том, что при выборе определенного типа проекта VS .NET IDE создает несколько служебных файлов и включает их в решение (тип файлов зависит от выбранного типа проекта).

Как правило, работа над новой программой начинается с команды New Project. На экране появляется диалоговое окно (рис. 2.2; список проектов прокручен примерно до середины). В окне перечислены типы проектов, автоматически создаваемых в VB .NET, — на момент написания книги их было десять. Шаблоны проектов VB .NET работают практически .так же, как в VB6. В частности, они почти всегда содержат «скелет» программы, и в них обязательно присутствует служебная информация о файлах, входящих в решение.

Рис. 2.2 . Диалоговое окно New Project

После прокрутки списка в диалоговом окне New Project появляется значок Console Application (Консольное приложение), показанный на рис. 2.2. Обратите внимание: при выборе любого значка, кроме последнего — New Project in Existing Solution (Новый проект в существующем решении), — вам не придется подтверждать создание нового решения. Дело в том, что при создании нового проекта за пределами существующего решения IDE создает базовую структуру решения за вас. Большинство программистов .NET предпочитают создавать решения в отдельных каталогах, имена которых совпадают с именами решений. По умолчанию IDE поступает с новыми решениями именно таким образом.


Чтобы сосредоточить все внимание на новых возможностях языка VB .NET, не отвлекаясь на тонкости работы графических приложений в .NET, в первой части книги рассматриваются только консольные приложения. Они работают в текстовом режиме; с некоторым упрощением можно считать, что весь ввод/вывод осуществляется в окне DOS (данные читаются из стандартного входного потока и записываются в стандартный выходной поток).

В нашем примере решение было названо vb_ide_01, но вы можете использовать любое допустимое имя файла. При желании в него можно включить прописные буквы или пробелы. Регистр символов в файловой системе Windows игнорируется при выполнении операций, но сохраняется для удобства пользователя. При установке флажка Create Directory for Solution (Создать каталог для решения) IDE автоматически создает в заданном основном каталоге подкаталог, имя которого совпадает с именем решения. В нашем примере это привело к созданию каталога C:\vb net book\Chater 2\vb_ide_01. Примерный вид IDE показан на рис. 2.3.

Рис. 2.3. Visual Studio IDE в начале работы

При помощи команды View в главном меню всегда можн9 вызвать нужное окно на передний план (и передать ему фокус). Все окна IDE свободно перетаскиваются мышью. Кстати говоря, они не являются дочерними окнами многодокументного интерфейса MDI (Multiple Document Interface), которые должны находиться в границах родительского окна — любое окно можно переместить за пределы главного окна IDE.

Не забывайте о том, что в IDE существует режим контекстной справки. На рис. 2.4 показан примерный вид справки, вызванной клавишей F1 при нахождении фокуса в окне решения (Solution Explorer). Также поддерживается режим динамической справки (клавиши Ctrl+Fl), который автоматически отслеживает ваши действия и пытается вызвать соответствующий раздел справки. На рис. 2.5 показан список разделов динамической справки, полученный в начале работы над проектом. У динамической справки есть один серьезный недостаток — она интенсивно расходует ресурсы процессора. Когда вы освоитесь в IDE, отключите этот режим, чтобы повысить быстродействие.

Рис. 2.4. Контекстная справка

Бросается в глаза другая эффектная особенность IDE — если пристыкованное (docked) окно полностью перекрывает другое окно, это вызовет меньше проблем, чем в VB6, поскольку скрытые окна автоматически отображаются в виде корешков (tabs). Пример показан на рис. 2.6 — обратите внимание на корешки в позиции курсора. Чтобы вызвать скрытое окно, достаточно щелкнуть на корешке и перетащить его мышью. Чтобы изменить порядок окон (например, для экономии места), просто перетащите один корешок поверх другого. Подобное использование корешков выгодно отличает VS .NET от VB6 IDE, где в результате неосторожной стыковки окон становилось совершенно невозможно работать и для возвращения к нормальному состоянию приходилось править системный реестр. Также обратите внимание на корешок Start Page главного окна, предназначенный для вызова начальной страницы IDE.

Рис. 2.5. Динамическая справка

Рис. 2.6. Пристыкованные окна с корешками

Основные окна IDE

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

Рис. 2.7. Контекстное меню редактора

Как видите, в этом контекстном меню объединяются команды редактирования и отладки.

Кнопки панелей инструментов снабжены подсказками [Предусмотрена даже автоматическая нумерация строк программы! Режим нумерации включается в диалоговом окне, вызываемом командой Tools > Option > Text Editor.]. На некоторых кнопках имеются стрелки, показывающие, что при нажатии кнопки открывается меню. Например, вторая кнопка слева (Add New Item) открывает список элементов, которые можно включить в решение (рис. 2.8).

В VB .NET снова стали доступны чрезвычайно удобные команды блочного комментирования/снятия комментариев, впервые появившиеся в VB5. Теперь эти команды вызываются со стандартных панелей инструментов IDE, а не из меню Edit, откуда они таинственно исчезли в VB6.

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

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

Рис. 2.8. Вызов меню с панелей инструментов

Редактор обладает полным набором стандартных возможностей, поддерживаемых в редакторах такого рода (вырезание, вставка, поиск/замена и т. д.). Для работы с ними можно использовать стандартные комбинации клавиш Windows (Ctrl+X — вырезать, Ctrl+V — вставить и т. д.). Если вы предпочитаете работать с командами меню, к вашим услугам меню Edit и контекстное меню окна программы. Полный список сочетаний клавиш вызывается из меню Edit; кроме того, он приведен в разделе «Editing, shortcut keys» справочной системы. Например, комбинация Ctrl+I включает режим поиска с приращением.

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

В вашем распоряжении и очень удобное средство IntelliSense, выдающее информацию о методах заданного объекта или параметрах, передаваемых при вызове функции (рис. 2.9). Обычно IntelliSense автоматически вызывается при вводе символа «.».

Настройка большинства глобальных параметров редактора выполняется в диалоговом окне — выполните команду Tools > Options и выберите в списке строку Text Editor, как показано на рис. 2.10. По сравнению с VB6 диалоговое окно Options основательно изменилось, поэтому мы рекомендуем внимательно изучить его содержимое. Например, чтобы выбрать размер позиций табуляции, щелкните в строке Text Editor (см. рис. 2.10) и выберите нужное значение для всех языков или только для VB. Здесь же выбирается режим создания отступов: None (отступы отсутствуют), Block (курсор выравнивается по началу предыдущей строки) или Smart (автоматическое создание отступов в теле цикла, как того требует хороший стиль программирования). Кстати говоря, устанавливать размер позиций табуляции и форматировать отступы можно в готовом тексте, для чего используются комбинации клавиш Ctrl+K, Ctrl+F или- команда Edit > Advanced > Format Selection. Если в режиме Smart выделить фрагмент программы и нажать клавиши Shift+Tab, этот фрагмент будет переформатирован.

Рис. 2.9. Подсказка IntelliSense

Рис. 2.10. Диалоговое окно Options

Новый редактор поддерживает и такую удобную возможность, как свертка фрагментов программы и отображение на их месте заголовков. Обратите внимание на значки «+» рядом с некоторыми строками на рис. 2.11. Если щелкнуть на таком значке, в листинге открывается соответствующая область (region). Если задержать указатель мыши над многоточием (. ), на экране будет показан свернутый код. Для управления сверткой используется подменю Edit > Outlining.

Вы можете определять в программе собственные области; для этого достаточно имитировать синтаксис, показанный на рис. 2.11. Сворачиваемый блок (регион) начинается с команды «Region «имя_региона» и завершается командой #End Region.

Рис. 2.11. Свернутые области в редакторе

Редактор VS .NET обладает и другими интересными возможностями, незнакомыми даже опытным программистам VB. Мы познакомимся с ними в следующем разделе.

При изучении редактора IDE особенно полезная информация находится в разделе справки «Editing Code and Text». В частности, здесь описано несколько очень удобных средств перемещения по тексту.

Многоэлементный буфер обмена

Буфер обмена рассчитан не на один элемент, а на несколько сразу (аналогичные возможности существуют в Office 2000 и Office XP). Весь вырезанный или скопированный текст передается в многоэлементный буфер обмена, к которому можно обратиться с панели элементов. Чтобы просмотреть текущее содержимое буфера, щелкните на корешке Clipboard Ring на панели элементов. В буфере хранятся 15 последних скопированных или вырезанных фрагментов текста.

Комбинация клавиш Ctrl+Shift+V вставляет очередной элемент буфера в текущий документ.

Многократно нажимая клавиши Ctrl+Shift+V, вы перебираете содержимое буфера. При каждом нажатии Ctrl+Shift+V предыдущий вставленный фрагмент заменяется текущим элементом буфера.

Временное хранение фрагментов

Любой фрагмент программного кода можно сохранить для последующего использования на панели элементов (многие программисты используют для этой цели вкладку General, но вы можете создать новую вкладку — щелкните на панели правой кнопкой мыши и выберите команду Add Tab из контекстного меню). Данная возможность очень удобна, поскольку в программах часто встречаются повторяющиеся фрагаен ты, а вводить их каждый раз заново слишком долго. Чтобы сохранить фрагмент программы, выделитеего и перетащите мышью на панель элементов (рис. 2.12). Фрагменты остаются на панели до тех пор, пока не будут удалены при помощи контекстного меню. Чтобы воспользоваться сохраненным фрагментом, перетащите его мышью в нужную позицию окна программы. Существует и другой способ — выделите позицию вставки и дважды щелкните на сохраненном фрагменте.

Рис. 2.12. Фрагменты программы на панели элементов

Список задач и комментарии TODO, HACK и UNDONE

В Visual Studio теперь поддерживается список задач (task list), унаследованный из Visual InterDev и Visual J++. Идея состоит в том, что в программу включаются комментарии с описанием действий, которые предполагается выполнить в будущем; тип задачи определяется специальным ключевым словом, следующим после знака комментария. В настоящее время определены три встроенные категории задач — TODO, HACK и UNDONE. Комментарии с задачами выводятся в окне, вызываемом командой View > Other Windows > Task List (или комбинацией клавиш Ctrl+Alt+K). Пример показан на рис. 2.13.

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

  1. Выполните команду Tools > Options > Environment > Task List.
  2. Введите текст FOR_KEN (при этом становится доступной кнопка Add).
  3. Выберите приоритет.
  4. Нажмите кнопку Add и кнопку ОК.

В окне решения (Solution Explorer), показанном на рис. 2.14, выводится список файлов, входящих в решение. По умолчанию имя решения совпадает с именем первого созданного в нем проекта. На рисунке изображено решение vb_ide_01 с проектом vb_ide_01, содержащим файл с именем Modulel.vb.

Рис. 2.13. Список задач

Рис. 2.14. Окно решения и окно свойств для файла Module1.vb

В VB .NET всем файлам с кодом Visual Basic независимо от их типа присваивается расширение .vb — расширения .frm, .bas и .cls не используются. Впрочем, одна важная особенность осталась неизменной: файлы с расширением .vb, как и в VB6, содержат обычный текст (причем в бесплатно распространяемый пакет .NET SDK входит автономный компилятор VB для компиляции программ, написанных во внешнем текстовом редакторе).

Позже вы узнаёте, как в IDE конструируются формы и как среда определяет, какие части файла имеют визуальное представление, а какие не имеют. А пока достаточно запомнить, что все файлы VB .NET имеют расширение .vb.

В начале работы можно создать пустое решение без создания проекта — для этого следует выбрать опцию Visual Studio Solutions4Blank Solution в диалоговом окне New Project. Обычно это делается в тех случаях, когда вы не хотите, чтобы имя решения совпадало с именем одного из проектов.

Функции окна свойств в VS .NET (также показанного на рис. 2.14) уже не ограничиваются простым заданием свойств элементов управления. Содержимое окна зависит от того, что в настоящий момент выделено в IDE. Имя и тип выделенного элемента указаны в списке, находящемся в верхней части окна. Чтобы изменить значение свойства, щелкните в правой ячейке и начинайте вводить символы. В окне свойств действуют стандартные комбинации клавиш, используемые при редактировании в системе Windows.

indbooks

Читать онлайн книгу

VB.NET: Основные возможности и отличия от VB 6

Microsoft взяла за основу для разработки приложений в технологии. NET два языка – VB.NET и C#.NET. Если синтаксис языка C# является почти полной копией синтаксиса Java, то VB.NET унаследовал свой синтаксис от старого Visual Basic. Это сильно облегчило переход к новым технологиям тем, кто привык к «обычному» VB. Но если Visual Basic 6 всегда считался легким для освоения «игрушечным» языком, в котором серьезные возможности недоступны или сильно урезаны, то по отношению к VB.NET это совершенно неверно. Поскольку VB.NET реализует все межъязыковые соглашения. NET Framework, то по функциональности он, казалось бы, совершенно не должен отличаться от C#. На самом деле, это, к сожалению, не так. В следующем списке приведены новые возможности языка VB.NET.

? Структурированная обработка исключений.

? Полная поддержка объектно-ориентированного программирования.

? Полная интеграция с. NET Framework.

? Возможность программирования с новым типом объектно-ориентированных указателей на функции (delegates).

Преобразование Fixed заявления длины от VB6 к VB.Net

Я просто пытаюсь преобразовать одну из функции VB6 в VB.NET и ниже преобразованное заявление, где я столкнулся вопрос

на конкатенации строк я нужна строка фиксированной длины, таких, как это:

выход: так как четыре фиксированная длина строки 8 длины оставшихся 4-х символов должны быть заполнены с нулевым, как показано ниже

строки фиксированной длины просто не имеют никакого смысла в .NET больше. Microsoft пыталась обеспечить подобный класс для облегчения обновления, но истина заключается в том, что вы должны изменить свой код в зависимости от использования:

Что строка фиксированной длины делать в коде VB6? Было ли это без причины? Затем используйте обычный String в .NET.

Было ли это для Interop с C API? Затем с помощью сортировочных установить размер для массива в вызове C API.

Просто забыть о фиксированной длине, и использовать обычные строки vb.net. Они вернутся штраф независимо называет этот код, в том числе Interop.

Так, только подушечка ваших строк, и вы до гонок.

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


Это выглядит довольно хорошо для меня:

Обратите внимание, как я установить это, что вы только определить длину строки в одном месте. (Поэтому я использую LEN (m_string) для определения длины С тех пор в коде.

Кроме того, для отладки и в этом примере, вместо vbcharNull (который вы должны использовать), я использовал X для тестирования.

Теперь в вашем коде?

Просто используйте это:

Я отмечаю в своем коде, что у вас есть пять, прежде чем FOUR — но если это то, что вы хотите, то никаких проблем

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

Так просто вставьте этот код в ваш модуль или даже новый отдельный класс.

Как уже отмечалось, изменение закомментирована линии «X» для полукокса обратно vbCharNull.

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

так что я использовал «*», но вы можете использовать пространство, или все, что вы хотите.

Описание событий VB (Visual Basic)

Здесь размещены подробные описания всех событий всех основных элементов управления, встроенных в Visual Basic. Сюда не входят события подключаемых элементов управления, таких например, как Microsoft Common Controls и т.п. Многие события снабжены примерами их использования. Всё переводилось мной со стандартного Help’а VB5.

В Visual Basic структура обработчика событий имеет следующую схему:

[ Private | Public ] Sub Объект_ИмяСобытия ([arglist])

Внутри таких процедур и содержится основной код Visual Basic. Остальное находится в пользовательских функциях и процедурах.

Выберите интересующее вас событие:

Это событие имеет только форма.

Activate — вызывается в тот момент, когда форма становится активной (получает фокус). Однако, если перейти к другому приложению Windows, а затем вернуться к своему, то это событие не произойдёт. Оно срабатывает только при переключении между формами внутри программы.

Deactivate — Событие, обратное событию Activate. Вызывается при потере фокуса формы.

ComboBox — меняется текст в текстовой части элемента. Происходит только тогда, когда свойство Style установлено в 0 (Dropdown Combo) или 1 (Simple Combo) и юзер изменяет текст или вы меняете его в коде программы.

DirListBox — Меняется выбранная директория. Происходит когда юзер делает двойной клик на новой директории или когда меняется свойство Path в коде.

DriveListBox — Меняется выбранное устройство. Происходит когда юзер меняет устройство, выбрав его из списка, или когда меняется свойство Drive в коде.

HScrollBar и VScrollBar (горизонтальная и вертикальная прокрутки) — Подвинулся скрол. Происходит когда юзер передвинул и отпустил полоску прокрутки или меняется свойство Value в коде.

Label — Меняется содержимое метки. Происходит когда меняется свойство Caption в коде.

PictureBox — Меняется содержимое PictureBox. Происходит при смене свойства Picture. (а также при использовании LoadPicture, прим.eax)

TextBox — Меняется текст в текстовом поле. Происходит при смене текста юзером или при смене свойства Text в коде.

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

Для формы такое собитие выполняется при клике на свободном месте формы, или по отключённому элементу управления (т.е. когда его Enabled = False).

Вообще событие происходит и для правой кнопки мыши и для левой. Но для элементов CheckBox, CommandButton, Listbox, и OptionButton происходит только при нажатии левой кнопки мыши.

Для ComboBox или ListBox оно происходит и при клике мышой и также при смене текущего элемента клавишами курсора.

Происходит при нажатии на «ПРОБЕЛ» у элементов CommandButton, OptionButton, или CheckBox, когда те имею фокус.

При нажатии на ENTER при фокусе на элементе CommandButton (то бишь гашей кнопке) и когда установлено свойство Default.

Происходит при нажатии на ESC когда форма имеет Cancel кнопку — CommandButton с установленым свойством Cancel.

Также происходит при нажатии на горячую последовательность. Например, если кнопка имеет Caption — «&Go», то при нажатии Alt+G запуститься событие.

Также, событие Click может быть сгенерировано в следующих случаях в коде: Установка значения Value для OptionButton и CheckBox.

Происходит при двойном клике по объекту.

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

Для других элементов:

Двойной клик по объекту левой кнопкой.

Двойной клик по элементу в ComboBox, когда Style = 1. Или также в FileListBox, ListBox, DBCombo, или DBList.

Происходит при завершении операции перетаскивания (Drag&Drop). В обработку события передаются 3 аргумента — координаты курсора (X,Y), где был отпущен объект, и ссылка на объект (Source), который был перетащен.

Происходит когда объект перетаскивается над получателем, но кнопка ещё не отпущена. Имеет 4 параметра. Координаты курсора, ссылка на объект, и текущее состояние (State As Integer):

0 = Enter (вошёл) (источник вошёл в область объекта).
1 = Leave (покинул) (источник ушёл из этой области).
2 = Over (над) (произошёл сдвиг в пределах области).

Происходит только при работе с базами данных. Коркретно: при ошибке в доступе к данным при выполнении кода.

Имеет 2 параметра:

dataerr — номер произошедшей ошибки
response — номер, соответствующий выбранному в настройках (Settings):

Если vbDataErrContinue, то response = 0 (Продолжить)
Если vbDataErrDisplay, то response = 1 (Default) Показать сообщение об ошибке.

Происходит, когда объект получает фокус, или при нажатии кнопки Tab или кликом по объекту, а также при запуске метода SetFocus в программе. Форма получает фокус только тогда, когда все видимые элементы отключены (Enabled = False).

Это событие имеет только форма.

Обрабатывается первым и один раз. Visual Basic вызывает его при первом создании формы. Здесь обычно размещают код, для инициализации нужных переменны в программе.

Происходит когда у ListBox контрола свойство Style установлено в 1 (checkboxes) и выбран или сброшен флажок у какого-либо элемента (item) в контроле.

Передаётся один параметр:

index — номер элемента, который был выбран в ListBox.

Происходит когда юзер нажимает (KeyDown) или отпускает (KeyUp) клавишу, в то время как объект имеет фокус. Чтобы получить код клавиши, используйте событие KeyPress. Параметров нет.

Происходит когда юзер нажамает и отпускает клавишу на клавиатуре.

Событие имеет один параметр:

keyascii — код нажатой клавиши. Например, если нажать на клавишу «1» (основного ряда), то keyascii будет равен 49. Если нажать ESC, то 27, и и.д.

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

LinkClose: Происходит когда DDE соединение закрывается. Может произойти в любое время.

LinkError: Происходит при возникновении ошибки в ходе связи DDE.

LinkNotify: Происходит когда у источника меняются данные, на которые установлена ссылка DDE.

LinkOpen: Происходит при создании инициализации DDE связи с источником.

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

Это событие имеет только форма.


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

Это событие может выполняться несколько раз. Т.е. если вы выгрузите форму оператором Unload, а затем вновь загрузите оператором Load или методом Show, то это событие будет выполнено.

Происходит при потере объектом фокуса, или при нажатии Tab юзером, или при использовании метода SetFocus для другого объекта.

Происходят когда юзер нажимает (MouseDown) или отпускает (MouseUp) кнопку мыши.

Имеют 4 передаваемых параметра:

button — содержит integer — номер кнопки мыши. С помощью этого события можно опеределить какую кнопку нажал пользователь. Для этого используюся константы: vbLeftButton (левая), vbMiddleButton (средняя), vbRightButton (правая). Проверить можно примерно так:

If button = vbRightButton Then .

shift — содержит integer — указывающее на состояние клавиш Shift, Alt и Ctrl. Бит 0 — Shift, бит 1 — Ctrl, бит 2 — Alt. Для опредения факта нажатия клавиш Ctrl и Alt можно использовать такой код:

If (Shift And (vbCtrlMask Or vbAltMask)) = (vbCtrlMask Or vbAltMask) Then .

Т.е. мы проверяем содержит ли переменная Shift биты 1 и 2 (оператором And). Скобки везде обязательны. vbShiftMask, vbAltMask, vbCtrlMask — это обычные константы, содержащие маски битов:

vbShiftMask = 1 (нулевой бит) Bin: 00000001
vbCtrlMask = 2 (первый бит) Bin: 00000010
vbAltMask = 4 (второй бит) Bin: 00000100

x, y — координаты курсора мыши того места, где произошло событие MouseUp или MouseDown. Координаты всегда зависят от координытной системы, задаваемой свойствами ScaleHeight, ScaleWidth, ScaleLeft, ScaleTop объекта.

Происходит когда курсор мыши изменяет своё положение над объектом. Т.е. когда курсор стоит на месте, событие не происходит. При каждом сдвиге курсора — срабатывает.

Параметры те же, что и у MouseDown и MouseUp.

Происходит немедленно после того, как OLE контейнер сдвигается или меняет размеры пока объект активен.

left — координата левой грани OLE контейнера
top — координата верхней грани OLE контейнера
width — ширина OLE контейнера
height — высота OLE контейнера

Происходит когда компонент — источник «брошен» на компонент — цель, информируя объект о том, что либо завершён, либо отменён процесс перетаскивания.

Имеет один параметр:

effect — привожу оригинал: A long integer set by the source object identifying the action that has been performed, thus allowing the source to take appropriate action if the component was moved (such as the source deleting data if it is moved from one component to another). The possible values are listed in Settings.

А Settings может быть:

vbDropEffectNone = 0 — операция «бросания» (Drop) была отменена.
vbDropEffectCopy = 1 — показывать значок копирования данных.
vbDropEffectMove = 2 — «сбрасываемые» данные являются ссылкой на оригинальные данные.

Это событие происходит когда на объект сбрасываются OLE данные. Например, происходит при перетаскивании на объект файлов из проводника, или перетаскивании изображения из Internet Explorer и т.п.

Замечание: Это событие происходит только в том случае, когда свойство OLEDropMode установлено в 1 (Manual).

Имеет очень много параметров:

data — объект типа DataObject. Имеет 4 метода и одно свойство — коллекцию файлов, перетаскивамых на объект. Для получения данных можно использовать метод GetData. Чтобы узнать формат данных, перекинутых на объект можно использовать метод GetFormat.

effect Long — привожу оригинал — set by the target component identifying the action that has been performed (if any), thus allowing the source to take appropriate action if the component was moved (such as the source deleting the data). The possible values are listed in Settings.

button — то же, что и в событии MouseDown(Up).

shift — то же, что и в событии MouseDown(Up).

x,y — то же, что и в событии MouseDown(Up).

Пример. Обработаем перетащенные на форму файлы. Не забудьте установить свойство OLEDropMode в 1.

Private Sub Form_OLEDragDrop _
(Data As DataObject, Effect As Long , _
Button As Integer , Shift As Integer , _
X As Single , Y As Single )
‘ перетаскиваются файлы?
If Data.GetFormat(vbCFFiles) = True Then
Dim c As Long
‘ пройдёмся по всей коллекции
For c = 1 To Data.Files.Count
‘ покажем имя перетащенного файла
MsgBox «Был перетащен файл: » & Data.Files(c)
Next c
End If
End Sub

Происходит при перетаскивании над объектом. Парметры — комбинация парамтров событий OLEDragDrop и обычного DragOver.

Происходит после каждого события OLEDragOver. OLEGiveFeedback позволяет источнику обеспечивать визуальную «отдачу» пользователю, такое, как изменение курсора мыши (посмотрите на него при перетаскивании файлов в проводнике с нажатым Ctrl, — видите значок «+», вот это и есть та «отдача»?), которое будет говорить пользователю о том, что происходит.

Параметры — effect и

defaultcursors — boolean — разрешает или запрещает использование курсора по умолчанию. Если True — то используется курсор по умолчанию, если False, то использутся курсор, указанный пользователем в свойстве MousePointer объекта Screen.

Происходит тогда, когда начинается перетаскивание (т.е. когда перетаскиваемый объект (файл, например) появляется над объектом приёмником). Имеет 2 параметры:

data — то же что и у события OLEDragDrop.

allowedeffects — Long — содержит поддерживаемые источником эффекты. Возможные значения описаны в Setting’сах.

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

Разберём чуть подробнее:

Событие Paint полезно, если вы используете графические методы объекта (Line, PSet. ) в коде. С помощью этого события вы можете убедиться в том, что данные перерисовались, когда это необходимо.

Событие Paint вызывается при запуске метода Refresh.

Если AutoRedraw установлено в True, то перерисовка происходит автоматически, таким образом, это событие теряет свою необходимость.

Если свойство ClipControls установлено в False, то графические методы в процедуре Paint воздействуют только на видимую часть формы; иначе, графические методы перерисовывают всю открытую часть формы (т.е. ту, которая не перекрыта такими элементами, как Image, Label, Line, и Shape).

Используя метод Refresh в событии Resize вызывает перерисовку всего объекта каждый раз, когда происходит изменение его размеров (Resize).

Замечание: Используя событие Paint для определённых задач, может произойти каскадирование событий (Т.е. просто напросто произойдёт рекурсия, когда Paint будет вызывать сам себя, и произойдёт переполнение стека). Чтобы этого избежать, нужно придерживаться следующих правил:

· Избегать вызова события Paint при сдвиге или изменении размеров объекта.
· Внутри события Paint изменять свойства, которые могут вызвать событие Paint. Такие, например, как BackColor.
· Включать метод Refresh метод внутрь Paint.

Происходит при смене пути, установкой свойства FileName или Path в коде.

Замечание: Вы можете использовать это события, чтобы сообщить FileListBox’у о том, что путь у DirListBox изменился.

Происходит при изменении маски (такой, как «*.*») установкой свойств FileName или Pattern в коде.

Это событие имеет только форма.

Происходит перед закрытием формы или приложения. Если закрывается MDI форма, то это событие происходит сначала для формы контейнера, и лишь потом для дочерних форм.

Это событие происходит перед событием Unload.

В обработчик данного события передаётся два параметра:

cancel — integer — если в обработчике события присвоить переменной cancel значение True, то выгрузка формы будет отменена. Если оставить там False, то форма благополучно выгрузится.

unloadmode — константа. Содержит значение — почему происходит выгрузка формы. Может принимать:

vbFormControlMenu = 0 — юзер выбрал команду Close (Закрыть) в меню приложения (слева вверху в заголовке формы).

vbFormCode = 1 — произошёл вызов оператора Unload в коде программы.

vbAppWindows = 2 — Windows завершает работу.

vbAppTaskManager = 3 — закрытие приложения происходит через Ctr+Alt+Del.

vbFormMDIForm = 4 — дочерняя MDI форма закрывается, т.к. закрывается главная.

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

Private Sub Form_QueryUnload _
(Cancel As Integer , _
UnloadMode As Integer )
Dim rez As VbMsgBoxResult
rez = MsgBox(«Вы действительно» & _
» хотите выйти?», _
vbQuestion + vbYesNo)
If rez = vbNo Then Cancel = 1
End Sub

Происходит когда запись становится текущей записью.

Когда Data контрол загружен, первая запись в объекте RecordSet становится текущей, и вызывается это событие. Когда бы юзер не кликнул любую кнопку на контроле Data, передвигаясь с записи на запись, или вы используете одно из методов Move в коде (такие, как MoveFirst, MoveNext, FindFirst..), или любое другое свойство, которое может изменить текущую запись — происходит событие Reposition.

Событие Validate происходит перед этим событием.


Происходит когда объект первый раз появляется или когда меняется состояние окна (например, при свёртывании и развёртывании окна). А также при смене размеров окна.

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

Происходит тогда, когда сдвигается полоса прокрутки (ScrollBar).

Для DBGrid это событие происходит, когда двигается вертикальная или горизонтальная полоса прокрутки.

Для ComboBox это событие происходит при сдвиге скролбара в выпадающем списке.

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

Private Sub HScroll1_Scroll()
&nbsp&nbsp&nbsp&nbspForm1.Caption = HScroll1.Value
End Sub

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

Кстати, избегайте использования фукнции MsgBox в этом событии!

Это событие имеет только форма.

Происходит когда все ссылки на экземпляры форм, MDI форм, элементы управления, классы удалены из памяти (установкий переменной в Nothing).

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

Это событие имеется только у элемента управления Timer.

Оно происходит через определённый интервал времени, указанный в его свойтве Interval.

Timer невидим для пользователя, и полезен для внутренних процессов программы.

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

Например, с его помощью можно сделать часы. Для этого достаточно поместить на форму элемент Timer, установите его свойство Interval в 1000 (1 сек = 1000 мс), и вставить следующий код:

Private Sub Timer1_Timer()
&nbsp&nbsp&nbsp&nbspForm1.Caption = Time
End Sub

Функция Time возвращает текущее системное время. Таким образом, каждую секунду будет выполнять событие Timer, и следовательно изменение заголовка формы.

Примечание: количесво таймеров на форме не ограничего.

Это событие имеет только форма.

Происходит когда форма выгружается из памяти (оператором Unload, например, или нажатием на крестик). В дальнейшем она может быть загружена оператором Load.

При перезагрузке формы ВСЕ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ ИНИЦИАЛИЗИРУЮТСЯ ЗАНОВО, т.е. все значения, которые были в них — теряются.

Происходит когда меняются данные (при работе с БД).

Имеет параметр Code — integer — описывает, как объект был изменён (описано в настройках). Может принимать следующие константы:

vbOLEChanged = 0 — Данные объекта изменились
vbOLESaved = 1 — Данные объекта были сохранены приложением
vbOLEClosed = 2 — Файл, на который ссылается объект был закрыт
vbOLERenamed = 3 — Файл, на который ссылается объект был переименован

Это событие нужно для проверки введённых данных. Например, в TextBox. Это событие выполняется только тогда, когда свойство объекта CausesVal >

Рассмотрим пример, как можно проконтролировать данные, введённые в текстовое поле. Поместите на форму TextBox и вставьте код:

Private Sub Text1_Validate _
(Cancel As Boolean )
&nbsp&nbsp&nbsp&nbspIf Not (IsNumeric(Text1.Text)) Then
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspText1.ForeColor = vbRed
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspMsgBox «Введите в TextBox числа»
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspCancel = True
&nbsp&nbsp&nbsp&nbspElse
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspText1.ForeColor = vbButtonText
&nbsp&nbsp&nbsp&nbspEnd If
End Sub

Этот код не примет введённый в TextBox текст, пока тот не будет являться числом. Если установить параметр Cancel в True, то фокус вернётся обратно TextBox.

Это событие происходит при потере фокуса у объекта.

Хочу всё знать. Язык Visual Basic

В 80-е годы популярность BASIC пошла на спад. Новые языки программирования избавились от сложного синтаксиса, при этом их возможности возросли. И только Microsoft продолжал гнуть свою линию, выпустив сначала еще один бестселлер QBasic, а потом и героя сегодняшнего текста — Visual Basic.

Краткая справка

Первые версии Visual Basic не снискали успеха среди разработчиков. Графический интерфейс, а потом и подсветка синтаксиса являлись едва ли не единственным отличием от QBasic. Microsoft начала вносить значительные перемены лишь с версии 3.0. В комплектации Professional разработчики получили возможность работать с базой данных Access, графические возможности позволяли работать с языком даже не программистам. Кроме того, повысилось быстродействие и упростилась установка ПО.

В 1995 году свет увидел Windows 95, вместе с которым захватывать мировое господство отправился Visual Basic 4.0. Здесь появился полноценный компилятор, возможность создавать 32 и 16-разрядные приложения, увеличилась скорость работы. В 1998 году вышла последняя версия традиционного Visual Basic. Далее компания Microsoft изменила концепцию, пустив развитие языка по двум направлениям: VB на платформе .NET и адаптированные версии для решения локальных задач (VBA, VBScript, eVB).

Visual Basic в наши дни

VB — инструмент для быстрого создания Windows-приложений. После смены концепции язык обрел:

  • поддержку ООП с конструкторами, деструкторами и наследованием;
  • свободную многопоточность;
  • компиляцию в байт-код, исполняемую при помощи CLR;
  • структурную обработку исключений;

Но главное удобство — платформа .NET. Это означает, что теперь разработчики имеют доступ к огромному количеству библиотек платформы для работы с БД, графикой, формами, безопасностью и вебом.

Другим популярным наследником является Visual Basic for Applications (VBA). Это урезанный VB 6.0 для обработки макросов, создания скриптов, который упрощает работу внутри ОС.

В AutoCAD, CorelDraw, SolidWorks и, конечно же, Microsoft Office вы можете экспортировать данные, структурировать информацию, подключать БД. Даже на бытовом уровне вам пригодится умение создавать автозаполняемые формы, вытягивать информацию в один клик из Excel. В работе, не обязательно связанной с программированием, VBA упростит создание технических документов, чертежей и планов.

Литература

Обучение языку лучше начинать с VBA. Во-первых, он проще, во-вторых, целевые продукты вам прекрасно известны, в-третьих, ограничения позволят вам сконцентрироваться на языке. Считается, что для изучения VBA вам понадобится 30 часов. Фактически — не более 15. Можете взять за основу одну из следующих книг:

Программировать на Visual Basic .NET сложнее, но и интереснее. Времени и справочных ресурсов потребуется больше:

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

Заключение

Современный Visual Basic слабо напоминает язык, изобретенный более 50 лет назад. Он сохранил простоту, но оброс большим количеством функций и возможностей. А так как Microsoft продолжает работать над платформой .NET, то на ближайшие лет 10 он останется полезным инструментом для любого программиста.

В 1964 году на свет появился язык BASIC. Он разрабатывался для учебных целей, чтобы студенты вузов с помощью простых алгоритмов изучать программирование. BASIC стал настоящим прорывом в образовании, а в реальной жизни программисты соревновались в создании диалектов. Среди очарованных языком гиков оказался Билл Гейтс. В 13 лет он написал на нем свою первую программу, в 20 — зарабатывал деньги реализацией версии Altair BASIC, разработанной им совместно с Полом Алленом.

В 80-е годы популярность BASIC пошла на спад. Новые языки программирования избавились от сложного синтаксиса, при этом их возможности возросли. И только Microsoft продолжал гнуть свою линию, выпустив сначала еще один бестселлер QBasic, а потом и героя сегодняшнего текста — Visual Basic.

Краткая справка

Первые версии Visual Basic не снискали успеха среди разработчиков. Графический интерфейс, а потом и подсветка синтаксиса являлись едва ли не единственным отличием от QBasic. Microsoft начала вносить значительные перемены лишь с версии 3.0. В комплектации Professional разработчики получили возможность работать с базой данных Access, графические возможности позволяли работать с языком даже не программистам. Кроме того, повысилось быстродействие и упростилась установка ПО.

В 1995 году свет увидел Windows 95, вместе с которым захватывать мировое господство отправился Visual Basic 4.0. Здесь появился полноценный компилятор, возможность создавать 32 и 16-разрядные приложения, увеличилась скорость работы. В 1998 году вышла последняя версия традиционного Visual Basic. Далее компания Microsoft изменила концепцию, пустив развитие языка по двум направлениям: VB на платформе .NET и адаптированные версии для решения локальных задач (VBA, VBScript, eVB).

Visual Basic в наши дни

VB — инструмент для быстрого создания Windows-приложений. После смены концепции язык обрел:

  • поддержку ООП с конструкторами, деструкторами и наследованием;
  • свободную многопоточность;
  • компиляцию в байт-код, исполняемую при помощи CLR;
  • структурную обработку исключений;

Но главное удобство — платформа .NET. Это означает, что теперь разработчики имеют доступ к огромному количеству библиотек платформы для работы с БД, графикой, формами, безопасностью и вебом.

Другим популярным наследником является Visual Basic for Applications (VBA). Это урезанный VB 6.0 для обработки макросов, создания скриптов, который упрощает работу внутри ОС.

В AutoCAD, CorelDraw, SolidWorks и, конечно же, Microsoft Office вы можете экспортировать данные, структурировать информацию, подключать БД. Даже на бытовом уровне вам пригодится умение создавать автозаполняемые формы, вытягивать информацию в один клик из Excel. В работе, не обязательно связанной с программированием, VBA упростит создание технических документов, чертежей и планов.

Литература

Обучение языку лучше начинать с VBA. Во-первых, он проще, во-вторых, целевые продукты вам прекрасно известны, в-третьих, ограничения позволят вам сконцентрироваться на языке. Считается, что для изучения VBA вам понадобится 30 часов. Фактически — не более 15. Можете взять за основу одну из следующих книг:

Программировать на Visual Basic .NET сложнее, но и интереснее. Времени и справочных ресурсов потребуется больше:

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

Заключение

Современный Visual Basic слабо напоминает язык, изобретенный более 50 лет назад. Он сохранил простоту, но оброс большим количеством функций и возможностей. А так как Microsoft продолжает работать над платформой .NET, то на ближайшие лет 10 он останется полезным инструментом для любого программиста.

Переход от VB6 к vb.net вопросу

Я использовал инструмент обновления визуальной студии для обновления. В приведенном выше коде

Теперь, если я пытаюсь сделать это Dim а = Len (метки) это дает мне 230 , но он должен предполагать, чтобы дать мне 644 .В VB6 его 644.

Пожалуйста, скажите мне, где я ошибаюсь. Любая помощь будет отличной

Создан 04 янв. 16 2020-01-04 13:48:02 user4667380

Я вижу вашу точку зрения. Чтобы облегчить отладку проблемы, вы могли бы предоставить [mcve], где структура в VB.NET имеет разную длину, чем соответствующий тип в VB6? Ваш пример слишком длинный, чтобы проверить все вычисления вручную . – Heinzi 04 янв. 16 2020-01-04 13:58:16

Если вы обновляетесь до .NET, и это не используется с некоторым API, вы можете укусить пулю и использовать классы и коллекции классов и .NET. – Plutonix 04 янв. 16 2020-01-04 14:17:00

Dont забудьте также, что в vb6 длинный тип эквивалентен типу Integer в vb.net. Посмотрите здесь — http://www.thescarms.com/VBasic/VB6vsVBNet.aspx – David Wilson 04 янв. 16 2020-01-04 15:17:26

@DavidWilson: Мастер преобразует это правильно. Сравните (VB6) венгерские префиксы в примере кода с типом (.NET). – Heinzi 05 янв. 16 2020-01-05 13:51:40

Илон Маск рекомендует:  JavaScript error! Как исправить ошибку в JavaScript коде
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL