首页 > 解决方案 > VB.NET Form.Show 因未知原因关闭应用程序

问题描述

VB.NET Framework 4.7.2 Visual Studio Community 2019 V16.11.2

我有一个 WinForms 应用程序,并且在大多数情况下,我从一个显示数据表加载的表单开始。这在应用程序事件模块中处理:

Private Sub MyApplication_Startup(sender As Object, e As StartupEventArgs) Handles Me.Startup
            If String.IsNullOrEmpty(My.Settings.TheCompany) Then
                MainForm = FormConnection
            Else
                MainForm = FormDataLoad
            End If
        End Sub

当数据表全部加载时,FormDataLoad 有一个关闭按钮,该按钮由加载所有数据表的过程启用:

        With FormDataLoad
            .ButtonClose.Visible = True
        End With

当按下按钮时,它会调用另一个表单,该表单根据已加载的数据表显示各种图表等:

Private Sub ButtonClose_Click(sender As Object, e As EventArgs) Handles ButtonClose.Click
        Me.Close()
    End Sub
    Private Sub FormDataLoad_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
        With FormOverview
            .Show()
        End With
    End Sub

当 FormOverview 加载时,它的标签、图表等都被初始化和绘制,但是神秘地,表单关闭并且应用程序结束。引发应用程序关闭事件:

' Shutdown: Raised after all application forms are closed.  This event is not raised if the application terminates abnormally.
        Private Sub MyApplication_Shutdown(sender As Object, e As EventArgs) Handles Me.Shutdown
            MessageBox.Show("Closing the application for some unknown reason")
        End Sub

当显示此消息框时,表示应用程序已关闭,但不是由于任何未处理的异常。项目中没有任何代码可以调用 FormOverview.close 所以我不知道发生了什么。

表单加载代码在这里:

Private Sub FormOverview_Load(sender As Object, e As EventArgs) Handles Me.Load
    With Me

        'Set the form caption and back colour and font
        .Text = "Retail Management Hero Data Visualisation Overview"
        .BackColor = Color.GhostWhite
        .Font = U.BasicFontSmall

        'Add event handler for the DAL
        AddHandler D.ConnectionOpened, AddressOf Connected

        'Form level variables for the KPJs
        Dim ITO As String = ""
        Dim ATV As String = ""
        Dim CRR As String = ""
        Dim GMROI As String = ""
        Dim OOS As String = ""
        Dim StocksSales As String = ""

        With KPIData.Rows(0)
            Me.Text = My.Settings.TheCompany & " " & Me.Text
            ITO = .Item("ITO").ToString
            CRR = .Item("CRR").ToString
            ATV = "€" & .Item("ATV").ToString
            GMROI = "€" & .Item("GMROI").ToString
            OOS = .Item("OOSRatio").ToString
            StocksSales = .Item("StocksToSales").ToString
        End With

        For Each CTL As Control In .Controls
            If TypeOf CTL Is Label Then
                With CTL
                    If .Name.Contains("Value") Then
                        .Font = U.BasicFontSuperLarge
                        .BackColor = Color.Yellow
                    Else
                        .BackColor = U.Spurs
                        .ForeColor = Color.GhostWhite
                    End If

                End With

            End If
        Next

        With .LabelReportDate
            .Text = "Reports As Of " & ReportDate
        End With

        With .LabelATVValue
            .Text = U.DecimalToSuperSubFormat(ATV, True)
        End With

        With .LabelGMROIValue
            .Text = U.DecimalToSuperSubFormat(GMROI, True)
        End With

        With .LabelCRRValue
            .Text = U.DecimalToSuperSubFormat(CRR, True) & "%"
        End With

        With .LabelITOValue
            .Text = U.DecimalToSuperSubFormat(ITO, True)
        End With

        With .LabelOOSValue
            .Text = U.DecimalToSuperSubFormat(OOS, True) & "%"
        End With

        With .LabelStocksSalesValue
            .Text = U.DecimalToSuperSubFormat(StocksSales, True) & "%"
        End With

        'Extract the names of the X and Y axes
        Dim Xname As String = ""
        Dim Yname As String = ""

        With WineData
            Xname = .Columns("Department").ColumnName
            Yname = .Columns("Day").ColumnName
        End With

        'Draw the charts
        DrawColumnChart(WineData, .ChartWine, "Wine sales", Xname, Yname, 250, False)
        DrawColumnChart(OtherData, .ChartNonWine, "Other sales", Xname, Yname, 25, False)

        'Centre on the screen
        .CenterToScreen()
    End With
End Sub

所以,应该发生的是这个表格显示中心屏幕,图表等都正确显示。如果有人有任何想法,我将不胜感激。

德莫特

标签: vb.netforms

解决方案


我发现了导致问题的原因。
在项目的属性中,在Application选项卡中,有组合选择器, Shutdown mode.

我选择的选项是When startup form closes- 通过将其更改为When last form closes问题消失了。

像许多问题一样,当你看得太久时,你只能只见树木不见森林。


推荐阅读