Создать объект
Самый простой способ создать объект — дважды щелкнуть элемент управления на панели инструментов. Однако, чтобы в полной мере воспользоваться всеми преимуществами всех объектов, доступных в Visual Basic и других приложениях, вы можете использовать возможности программирования Visual Basic для создания объектов во время выполнения.
1. Создайте ссылку на объект с объектной переменной.
2. Используйте модули классов для создания собственных объектов «с нуля».
3. Создайте свою собственную коллекцию, используя объекты коллекции.
Подробности о том, как получить доступ к объектам, представлены в других главах. Например, функции CreateObject и GetObject обсуждаются в главе 10 «Программирование с использованием компонентов».
Используйте переменные объекта
Помимо хранения значений, переменные могут ссылаться на объекты. Точно так же, как и присвоение значения переменной, вы можете присвоить переменной объект по тем же причинам:
1. Имена переменных, как правило, короче и их легче запомнить, чем содержащиеся в них значения (или, в данном случае, объекты, на которые они ссылаются).
2. При запуске кода переменные должны быть изменены, чтобы ссылаться на другие объекты.
3. Обращение к переменной, содержащей объект, более эффективно, чем многократное обращение к самому объекту.
Использование объектных переменных аналогично использованию обычных переменных, за исключением того, что существует дополнительный этап присвоения объекта переменной:
4. Сначала объявите переменные:
ДимвариаблеАскласс
5. Затем присвойте объект переменной:
Установитьпеременную=объект
Объявить переменные объекта
Метод объявления переменных объекта такой же, как и для объявления других переменных, с использованием Dim, ReDim, Static, PRivate и Public. Единственное отличие — это необязательное ключевое слово New и параметры класса, которые будут представлены позже в этой главе. Синтаксис:
{Dim|ReDim|Static|Private|Public}variableAs[New]class
Например, вы можете объявить объектную переменную, которая ссылается на форму в вашем приложении под названием frmMain:
DimFormVarAsNewfrmMain 'Объявляем тип как frmMain
' объектная переменная.
Вы также можете объявить объектную переменную, которая ссылается на любую форму вашего приложения:
DimanyFormAsForm 'Общие переменные формы.
Аналогичным образом вы можете объявить объектную переменную, которая может ссылаться на любое текстовое поле в вашем приложении:
DimanyTextAsTextBox 'может ссылаться на любое текстовое поле
' (но только текстовое поле).
Вы также можете объявить объектную переменную, которая может ссылаться на любой тип элемента управления:
DimanyControlAsControl 'Общие переменные управления.
Обратите внимание, что вы можете объявить переменную формы, которая ссылается на определенную форму в вашем приложении, но вы не можете объявить переменную управления, которая ссылается на определенный элемент управления. Вы можете объявить управляющую переменную, которая ссылается на определенный тип элемента управления (например, TextBox или ListBox), но не на конкретный элемент управления этого типа (например, txtEntry или List1). Однако переменным этого типа можно назначить определенные элементы управления. Например, форма со списком lstSample может быть записана следующим образом:
DimobjDemoAsListBox
SetobjDemo=lstSample
Переменная объекта назначения
Используйте оператор Set, чтобы присвоить объект объектной переменной:
Установитьпеременную=объект
Всякий раз, когда вы хотите, чтобы объектная переменная ссылалась на объект, вы можете использовать оператор Set.
Иногда вы можете использовать объектные переменные, особенно управляющие переменные, чтобы напрямую сократить вводимый код. Например, исходный код выглядит так:
IffrmAccountDisplay!txtAccountBalance.Text<0Then
frmAccountDisplay!txtAccountBalance.BackColor=0
frmAccountDisplay!txtAccountBalance.ForeColor=255
КонецЕсли
Если вы используете управляющие переменные, вашу программу можно значительно сократить:
Димбаластекстбокс
SetBal=frmAccountDisplay!txtAccountBalance
ЕслиБал.Текст<0Тогда
Bal.BackColor=0
Bal.ForeColor=255
КонецЕсли
Конкретные типы объектов и общие типы объектов
Определенная объектная переменная должна относиться к определенному типу объекта или класса. Определенная переменная формы может ссылаться только на одну форму в приложении (хотя на нее можно ссылаться в одном из многих экземпляров этой формы). Аналогично, определенная переменная управления может относиться только к определенному типу элемента управления в приложении, например TextBox или ListBox. Посмотрите пример, откройте новый проект и поместите текстовое поле в форму. Добавьте в форму следующий код:
PrivateSubForm_Click()
DimanyTextAsTextBox
SetanyText=Текст1
AnyText.Text=Привет
EndSub
Запустите приложение и нажмите на форму. Свойство Text текстового поля изменится на Hello.
Общие переменные объекта могут ссылаться на один из нескольких конкретных типов объектов. Например, переменная общей формы может ссылаться на любую форму в приложении; переменная общего управления может ссылаться на любой элемент управления в любой форме приложения; Посмотрите пример, откройте новый проект и разместите в форме несколько элементов управления Frame, Label и CommandButton в любом порядке. Добавьте в форму следующий код:
PrivateSubForm_Click()
Диманиконтроласконтрол
SetanyControl=Form1.Controls(3)
AnyControl.Caption=Привет!
EndSub
Запустите программу и нажмите на форму. Название третьего элемента управления, который вы только что разместили в форме, изменится на «Привет».
В Visual Basic есть четыре основных объекта:
Общие переменные объекта полезны, когда во время выполнения неизвестно, относится ли переменная к объекту определенного типа. Например, если вы хотите написать код, который работает в любой форме вашего приложения, вы должны использовать общие переменные формы.
Обратите внимание : поскольку в приложении может быть только одна форма MDI, нет необходимости использовать общий тип MDIForm. Всякий раз, когда вам нужно объявить переменную формы, которая ссылается на форму MDI, вы можете использовать определенный тип MDIForm (либо MDIForm1, либо любое имя, указанное вами в свойстве Name формы MDI) вместо общего типа MDIForm. Фактически, вам всегда следует использовать определенный тип MDIForm, поскольку Visual Basic может определить свойства и методы, ссылающиеся на определенный тип формы, перед запуском приложения.
Общий тип MDIForm предоставлен только для полноты картины; в будущих версиях Visual Basic будет полезно иметь несколько форм MDI в одном приложении.
форма как объект
Формы чаще всего используются для создания интерфейсов приложений, но они также часто являются объектами, вызываемыми другими модулями приложения. Формы тесно связаны с модулями классов. Основное различие между ними заключается в том, что формы являются визуальными объектами, а модули классов не имеют визуального интерфейса.
Добавляйте собственные методы и свойства
В форму можно добавлять пользовательские методы и свойства, к которым можно получить доступ из других модулей приложения. Чтобы создать новые методы для формы, добавьте процедуру, объявленную с Public.
'Метод настройки Form1.
PublicSubLateJobsCount()
.
'<операторы>
.
EndSub
Процедуру LateJobsCount можно вызвать из других модулей с помощью следующего оператора:
Form1.LateJobsCount
Создать новые свойства формы так же просто, как объявить общедоступную переменную в модуле формы:
PublicIDNumberAsInteger
Следующие два оператора можно использовать для установки и возврата значения IDNumber формы Form1 из других модулей:
Форма1.IDNumber=3
Текст1.Текст=Форма1.IDNumber
Вы также можете использовать процедуру Property для добавления в форму пользовательских свойств.
Подробности Глава 9, «Программирование с использованием объектов», содержит подробный материал о процедуре Property.
Обратите внимание, что вы можете вызывать переменные или пользовательские методы формы, не загружая форму, а также устанавливать пользовательские свойства формы. В результате вы можете запускать код формы, не загружая ее в память. Аналогично, ссылка на элемент управления без ссылки на его свойства или методы не приведет к загрузке формы.
Используйте новое ключевое слово
Используйте ключевое слово New, чтобы создать новый объект, который рассматривается как объект, определенный его классом. New можно использовать для создания экземпляров коллекций, форм и классов, определенных в модулях классов.
Используйте новое ключевое слово в форме
Формы, созданные во время разработки, являются классами. Новые экземпляры этого класса можно создавать с помощью ключевого слова New. Чтобы увидеть этот процесс в действии, нарисуйте на форме командную кнопку и несколько других элементов управления. В окне «Свойства» установите для свойства «Имя» формы значение «Образец». Добавьте следующий код в процедуру события Click командной кнопки:
DimxAsNewSample
x.Показать
Запустите приложение и несколько раз нажмите командную кнопку. Отодвиньте самую переднюю форму в сторону. Поскольку форма представляет собой класс с визуальным интерфейсом, видны дополнительные копии. Каждая форма имеет одинаковые элементы управления в тех же местах, где форма была разработана.
Обратите внимание: чтобы переменные формы и экземпляры загруженных форм всегда существовали, используйте статические или общедоступные переменные вместо локальных переменных.
Вы также можете использовать ключевое слово New с оператором Set. Попробуйте код в процедуре события Click командной кнопки:
Димфасформ1
Setf=НоваяФорма1
f.Caption=привет
е.Показать
Использование ключевого слова New с оператором Set ускорит выполнение, поэтому этот метод рекомендуется.
Используйте ключевое слово New с другими объектами.
Вы можете использовать ключевое слово New для создания коллекций и объектов из классов, определенных в модуле класса. Используйте следующий пример, чтобы проиллюстрировать этот рабочий процесс.
Этот пример иллюстрирует, как ключевое слово New создает экземпляр класса. Откройте новый проект и нарисуйте элемент управления CommandButton на форме Form1. Выберите команду «Добавить модуль класса» в меню «Проект», чтобы добавить модуль класса в проект. Установите для свойства Name модуля класса значение ShowMe.
Следующий код в Form1 создает новый экземпляр класса ShowMe и вызывает процедуру, содержащуюся в модуле класса.
PublicclsNewAsShowMe
PrivateSubCommand1_Click()
SetclsNew=NewShowMe
clsNew.ShowFrm
EndSub
Процедура ShowFrm в модуле класса создает новый экземпляр класса Form1, отображает форму, а затем сворачивает ее.
СубШоуФрм()
ДимфрмНьюАсФорм1
SetfrmNew=НоваяФорма1
frmNew.Show
frmNew.WindowState=1
EndSub
Чтобы применить этот пример, запустите приложение и несколько раз нажмите командную кнопку. Вы увидите значок свернутой формы на рабочем столе при создании каждого нового экземпляра класса ShowMe.
Дополнительную информацию об использовании New для создания объектов см. в главе 10 «Программирование с использованием компонентов».
Новые ограничения по ключевым словам
В следующей таблице объясняется, что нельзя сделать с ключевым словом New.
Освободите ссылку на объект
Каждый объект использует память и системные ресурсы. Хорошей практикой программирования является немедленное освобождение этих ресурсов, когда объект больше не используется.
Используйте Unload, чтобы выгрузить форму или элемент управления из памяти.
Используйте Nothing, чтобы освободить ресурсы, занятые объектными переменными. Используйте оператор Set, чтобы присвоить Nothing объектной переменной.
Дополнительные сведения см. в разделах «Событие выгрузки» и «Ничего» в «Справочном руководстве по языку Visual Basic 6.0».
Передать объект в процедуру
Объекты можно передавать процедурам в Visual Basic. В следующем примере кода предполагается, что форма имеет элемент управления CommandButton:
PrivateSubCommand1_Click()
'Вызовите функцию Demo и передайте ей форму.
ДемоФорма1
EndSub
PrivateSubDemo(xAsForm1)
'Отцентрируйте форму на экране.
x.Left=(Ширина.Ширина-x.Ширина)/2
EndSub
Вы можете передать объект параметру по ссылке, а затем установить параметр в новый объект внутри процедуры. Чтобы увидеть это в действии, откройте проект и вставьте вторую форму. Поместите коробку с изображением в каждую форму. Значения настроек атрибута, которые необходимо изменить, показаны в следующей таблице:
Процедура события Form1_Click вызывает процедуру GetPicture в Form2 и передает ей пустой блок изображения.
PrivateSubForm_Click()
Форма2.GetPicturePicture1
EndSub
Процесс GetPicture в Form2 присваивает свойство Picture поля изображения в Form2 пустому полю изображения в Form1.
PrivateobjXapictureBox
PublicSubGetPicture(xAsPictureBox)
'Назначаем переданную рамку изображения объектной переменной.
SetobjX=x
'Присвойте значение атрибута Picture полю изображения формы Form1.
objX.Picture=picture2.Picture
EndSub
Чтобы применить этот пример, запустите программу и нажмите Form1. Вы увидите, что значок формы Form2 появится в графическом поле формы Form1.
Подробности Вышеупомянутые темы предназначены для предоставления обзора объектов. Дополнительные сведения см. в главе 9 «Программирование с использованием объектов» и главе 10 «Программирование с использованием компонентов».
->