Как вызвать подчиненную форму перед основной формой для vb.net

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

Вот мой код для этого: Application.myapp

<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MySubMain>true</MySubMain>
  <MainForm>MainForm</MainForm>
  <SingleInstance>false</SingleInstance>
  <ShutdownMode>0</ShutdownMode>
  <EnableVisualStyles>true</EnableVisualStyles>
  <AuthenticationMode>0</AuthenticationMode>
  <SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

Program.vb (где мой метод подчиненной формы) Форма лицензии на импорт

Module Program
    Public Sub Main()

        Application.EnableVisualStyles()
        Application.SetCompatibleTextRenderingDefault(False)
        Application.Run(New Licenseform.Licenseform)

    End Sub
End Module

Когда я попытался собрать приложение, я получил следующую ошибку: enter image description here

Однако, если я отключу подформу, установив файл приложения

<mySubMain>false</MySubMain>

Строится успешно. Есть идеи, что не так и как мне это устранить?

2
0
264
1

Ответы 1

Нет необходимости отключать Application Framework и писать свой собственный метод Main. Просто обработайте событие Startup приложения, к которому вы можете получить доступ, нажав кнопку «Просмотр событий приложения» на странице «Приложение» свойств проекта. Здесь вы можете отобразить модальный диалог так же, как и в любом другом месте. Если вы установите e.Cancel на True, то приложение выйдет, даже не создав форму запуска.

В качестве примера я только что создал новый проект WinForms и добавил вторую форму. В эту форму я добавил два Buttons, а затем добавил этот код:

Public Class Form2

    Private Sub okButton_Click(sender As Object, e As EventArgs) Handles okButton.Click
        DialogResult = DialogResult.OK
    End Sub

    Private Sub cancelButton_Click(sender As Object, e As EventArgs) Handles cancelButton.Click
        DialogResult = DialogResult.Cancel
    End Sub

End Class

Затем я использовал кнопку в свойствах проекта, о которых упоминал ранее, и добавил этот код:

Imports Microsoft.VisualBasic.ApplicationServices

Namespace My

    ' The following events are available for MyApplication:
    ' Startup: Raised when the application starts, before the startup form is created.
    ' Shutdown: Raised after all application forms are closed.  This event is not raised if the application terminates abnormally.
    ' UnhandledException: Raised if the application encounters an unhandled exception.
    ' StartupNextInstance: Raised when launching a single-instance application and the application is already active. 
    ' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
    Partial Friend Class MyApplication

        Private Sub MyApplication_Startup(sender As Object, e As StartupEventArgs) Handles Me.Startup
            Dim dialogue As New Form2

            e.Cancel = (dialogue.ShowDialog() = DialogResult.Cancel)
        End Sub

    End Class

End Namespace

Когда я запускал проект, сначала отображался Form2, хотя Form1 был формой запуска. Если я нажимал кнопку «ОК», то Form2 закрывался, а Form1 открывался нормально. Если я нажал кнопку «Отмена», приложение закрылось без отображения Form1.

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

Thomas Koh 10.09.2018 11:16

В Windows Forms нет такой вещи, как подчиненная форма. Есть просто формы. Если вы хотите отобразить форму до создания формы запуска, сделайте, как я сказал. Не создавайте свой собственный метод Main и не отключайте Application Framework в свойствах проекта.

jmcilhinney 10.09.2018 11:26

Другие вопросы по теме