Ваш метод вызова должен использовать вашу первую опцию
'Careful about declaring this in a sub, because when that sub ends, the form might get closed.
'It might be best to declare this as an instance var (aka form-level var)
Private DetailsForm As frmOrder
'this could go in an event handler, or anywhere
DetailsForm = New frmOrder(oOrder)
DetailsForm.Show()
Вам нужно будет добавить конструктор к вашему DetailsForm
:
Private _oOrder as OrderType
Public Sub New(oOrder As OrderType)
'Best to save it to a private instance var and process it during Form_Load
_oOrder = oOrder
End Sub
Затем, когда ваш Form_Load()
будет запущен, он может использовать ваш личный экземпляр var для заполнения ваших TextBox
заданий, как вы хотите.
Второй, но менее красноречивый подход заключается в добавлении открытого свойства в форму, и после вызова .Show()
вы можете присвоить значение DetailsForm.OrderObject = oOrder
, а затем обработать переданный объект.
Конструкторский подход лучше, потому что он может быть «проверен компилятором»
Я пробовал решение Кшиштофа (см. Выше) - но на некоторых машинах при использовании этого подхода оно неправильно определяло, когда они не установили Sql Express.
Похоже, это было вызвано неправильной обработкой значения реестра REG_MULTI_SZ InstalledInstances?
Когда я проверял, нужно ли мне останавливать / перезапускать службу Sql Server Express в установщике, я решил просто проверить это вместо этого - так что вот моя альтернатива, где я просто проверяю службу:
<Property Id="SQLEXPRESSINSTALLED" >
<RegistrySearch Id="IsSqlExpressServiceInstalled" Root="HKLM" Key="SYSTEM\CurrentControlSet\services\MSSQL$SQLEXPRESS" Name="Description" Type="raw" Win64="no"/>
</Property>
<Condition Message="Express Not Installed">SQLEXPRESSINSTALLED</Condition>
<Condition Message="Express Installed">NOT SQLEXPRESSINSTALLED</Condition>
Немного хитрости, но кажется, что она работает достаточно хорошо для наших клиентов (использовали условия в компонентах, а не пример условий запуска, показанный выше)
Хорошо, я нашел методом проб и ошибок опцию, которая работает:
<Property Id="SQLSERVER">
<RegistrySearch Id="SQLServer" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft Sql Server" Type="raw" Name="InstalledInstances"/>
</Property>
Я определяю поиск реестра и затем проверяю его значение:
<Condition Message="You don't have SQL Server installed.">
<![CDATA[SQLSERVER >< SQLEXPRESS]]>
</Condition>