Avatar billede ncp Nybegynder
22. marts 2005 - 12:45 Der er 11 kommentarer

Form lukker af sig selv

Hi, har følgende Sub Main:

    Public Sub Main(ByVal args As String())

        Dim f_login As New f_login

        f_login.ShowLoginDialog()
        f_login.Dispose()

TryLoadLocation:

        LoadLocation()

        If intLocationId = 0 Then  'No Location were loaded!
            Dim f_OptionsLocation As New f_options_location
            f_OptionsLocation.SelectLocation(f_options_location.SelectLocationMode.MustSelect)
            f_OptionsLocation.Dispose()
            GoTo TryLoadLocation
        End If

        'MsgBox("-")
        Application.Run(New f_menu)

    End Sub

Hvis jeg kører mit program viser den min loginform som den skal, mens jeg kun lige ser et glimt af menuformen før den forsvinder og programmet afsluttes - hvis jeg fjerner ' foran Msgbox("-") så virker det fint (bort set fra at der er en dum MsgBox self :)

Hvordan fixer jeg det ?
Avatar billede burningice Nybegynder
22. marts 2005 - 19:22 #1
det var da en noget underlig kode du har. Troede at goto sidst blev set tilbage i batscripts, og sidenhen blevet udryddet.

Application.Run burde også ligge ude i en Shared Sub Main
Avatar billede ncp Nybegynder
22. marts 2005 - 20:49 #2
Okay, hvis jeg laver skriver en Shared Sub Main siger den, at Methods in a Module cannot be declared 'Shared'.

Skal måske sige at jeg kommer fra VB6, så er langt fra inde i .NET - må jeg evt. spørge hvordan du ville have lavet det ?
Avatar billede ncp Nybegynder
23. marts 2005 - 11:18 #3
Har ændte min kode så den ser sådan her ud:

    Public Shared Sub Main(ByVal args As String())

        Dim f_login As New f_login

        objSqlConn.ConnectionString = "xxx"
        objSqlConn.Open()

        f_login.ShowLoginDialog()
        f_login.Dispose()

        Do While intLocationId = 0

            LoadLocation()

            If intLocationId = 0 Then  'No Location were loaded!
                Dim f_OptionsLocation As New f_options_location
                f_OptionsLocation.SelectLocation(f_options_location.SelectLocationMode.MustSelect)
                f_OptionsLocation.Dispose()
            End If

        Loop

        MsgBox("say ehat")
        Application.Run(New f_menu)

        objSqlConn.Close()

    End Sub
Men det virker stadig kun, hvis der vises en MsgBox - why ???
Avatar billede burningice Nybegynder
23. marts 2005 - 13:00 #4
hvordan compiler du din exe-fil?
Avatar billede burningice Nybegynder
23. marts 2005 - 13:04 #5
hmm... well.. lader til at være rimelig store forskelle på c# og vb.net på dette punkt. Har lige prøvet at lave en windows-applikation i vs til vb.net, og den giver mig følgende kode:

Public Class Form1
    Inherits System.Windows.Forms.Form

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer. 
    'Do not modify it using the code editor.
    Friend WithEvents Button1 As System.Windows.Forms.Button
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button
        Me.SuspendLayout()
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(192, 64)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(64, 40)
        Me.Button1.TabIndex = 0
        Me.Button1.Text = "Button1"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(292, 273)
        Me.Controls.Add(Me.Button1)
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.ResumeLayout(False)

    End Sub

End Class
Avatar billede ncp Nybegynder
23. marts 2005 - 18:12 #6
Den kode har jeg også, men det er jo bare noget Visual Studio selv genererer når du designer dine forme - men jeg har et class, c_main, hvor Sub Main er i. Mit project er sat til at starte med Sub Main
Avatar billede ncp Nybegynder
23. marts 2005 - 18:14 #7
Jeg compiler med VB.NETs indbygget compiler, det er en Windows Application
Avatar billede burningice Nybegynder
23. marts 2005 - 19:17 #8
men som du kan se er der ingen steder i koden hvor at Application.Run direkte bliver kaldt.
Avatar billede ncp Nybegynder
23. marts 2005 - 19:34 #9
Nej, men det er jo fordi du har sat din Form1 som Startup Object (det er standard ved den første form) - Mit problem er, at jeg skal gennemløbe noget kode, før den første form vises...
Avatar billede burningice Nybegynder
23. marts 2005 - 20:00 #10
hm... så er spørgsmålet om det kan lade sig gøre i vb.net. Din fremgangsmåde er den der bruges i C#, men grundet kompabilitet med vb6 er der mange ting der virker noget bizarre i vb.net :/
Avatar billede ncp Nybegynder
23. marts 2005 - 22:01 #11
heh, det jo det...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester