позволяет ли VB6 ссылаться на экземпляр формы как на синглет, просто называя его тип данных? или что происходит?



Я вижу код типа "Unload frmMain", где из того, что я могу сказать frmMain-это имя типа/модуля, и я не думаю, что это также может быть одновременно имя переменной типа" ObjFrmMain". Тем не менее, эта команда успешно побуждает рассматриваемую форму к выгрузке.



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



Делает ли VB6 аналогичные вещи с типами данных, отличными от производных от Форма?

648   2  

2 ответов:

Да, VB6 имеет странное поведение объекта. Это дает вам некоторые ярлыки для работы с объектами формы.

Load frmMain

...загрузит один экземпляр этой формы под этим именем переменной. На самом деле:

frmMain.lblSomeLabel.Caption = "some caption"

... загрузит этот экземпляр. Однако:

frmMain.SomeStringMember = "some value"

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

Однако вы можете создавать новые примеры:

Dim newForm As MyForm
Set newForm = New MyForm
newForm.Show vbModal

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

Также остерегайтесь странностей в ключевом слове New:

Dim newObject As New MyClass
Set newObject = Nothing
newObject.SomeStringProperty = "some value"

Это работает без " ссылки на объект не установлен ..." ошибка. Когда вы объявляете ссылочную переменную с помощью синтаксиса As New, вы можете уничтожить объект, задав ему значение Nothing, а затем снова ссылаться на эту переменную, и она создаст новый экземпляр.

На самом деле именно это и происходит с формами. Существует неявное:
Dim frmMain As New frmMain
Лично я предпочитаю не использовать синтаксис As New, потому что это сбивает с толку и опасно. Он также имеет штраф за производительность, против этого:
Dim newObject As MyClass
Set newObject = New MyClass

... но вы застряли с этим для форм.

То, что происходит при вызове Unload frmMain, заключается в том, что он выгружает окно (и все элементы управления), поэтому все данные в них исчезли, но объект frmMain все еще висит. Поэтому даже после его выгрузки вы все еще можете получить доступ к любым переменным-членам и свойствам. Однако, если что-либо ссылается на какой-либо элемент управления в форме, это вызовет неявное Load frmMain. Это является источником многих тонких ошибок программирования в VB6, особенно когда вы пытаетесь завершить работу.

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

Следующий комментарий в Visual Basic 6.0 и более ранних версиях для каждой формы автоматически создается специальный экземпляр по умолчанию, который позволяет использовать имя формы для доступа к этому экземпляру. взято с этой страницы MSDN: Работа с несколькими формами в Visual Basic .NET: обновление до .NET

Comments

    Ничего не найдено.