Windows窗体模式窗体在基本窗体未激活时立即关闭

时间:2017-02-16 07:37:28

标签: vb.net winforms

我有一个Winforms应用程序,它应该在数据库中的某些内容发生更改时通知用户。为此,我使用Sql-Dependencys,它工作正常。 当Dependency触发时,我能够显示带有一些按钮的表单,以便用户可以决定他想做什么。 在一个按钮后我想显示一个Dialog,但第一个Dialog总是立即关闭。 我发现的唯一修复方法是恢复基本形式并激活它,但这不是我想要的解决方案。 对于我正在执行以下操作的代码:

当数据库中的某些内容发生变化时,会调用此方法

Private Sub NutzerBenachrichtigen(Aenderung As Aenderung)
    If InvokeRequired Then
        Me.BeginInvoke(New MethodInvoker(Sub()
                                             ErzeugeBenachrichtigung(Aenderung)
                                         End Sub))
    Else
        ErzeugeBenachrichtigung(Aenderung)
    End If
End Sub

此方法显示第一个表单(HeadsUp取自此处:https://github.com/glm9637/MaterialWinforms/blob/master/MaterialWinforms/Controls/HeadsUp.cs

    Private Sub ErzeugeBenachrichtigung(ByVal Aenderung As Aenderung)
    If Aenderung.istAktuellerBenutzer Then
        Dim objHeadsUp As New HeadsUp()
        objHeadsUp.Titel = "Neue Aenderung"
        If Aenderung.EventTyp.ToLower = "alter" Then
            objHeadsUp.Text = String.Format("Du hast etwas an {0} {1} {2} geändert. {3}Willst du etwas dazu schreiben?", _
                                   If(Aenderung.BetroffenesObjekt.EntitaetTyp.Name = New EntitaetTyp.Trigger().Name, "dem", "der"), _
                                   Aenderung.BetroffenesObjekt.EntitaetTyp.Name, Aenderung.BetroffenesObjekt.Name, vbNewLine)
        Else
            objHeadsUp.Text = String.Format("Du hast {0} {1} {2} erstellt. {3}Willst du etwas dazu schreiben?", _
                                  If(Aenderung.BetroffenesObjekt.EntitaetTyp.Name = New EntitaetTyp.Trigger().Name, "den", "die"), _
                                  Aenderung.BetroffenesObjekt.EntitaetTyp.Name, Aenderung.BetroffenesObjekt.Name, vbNewLine)
        End If
        objHeadsUp.Tag = Aenderung.BetroffenesObjekt
        Dim objButtonSchliessen = New MaterialFlatButton
        objButtonSchliessen.Tag = objHeadsUp
        objButtonSchliessen.Text = "Schliessen"
        AddHandler objButtonSchliessen.Click, AddressOf SchliesseHeadsUp
        objHeadsUp.Buttons.Add(objButtonSchliessen)
        Dim objButtonHistorie = New MaterialFlatButton
        objButtonHistorie.Tag = objHeadsUp
        objButtonHistorie.Text = "Historieneintrag"
        AddHandler objButtonHistorie.Click, AddressOf HistorienEintragHinzufuegen
        objHeadsUp.Buttons.Add(objButtonSchliessen)
        Dim objButtonDokumentation = New MaterialFlatButton
        objButtonDokumentation.Tag = objHeadsUp
        objButtonDokumentation.Text = "Dokumentation"
        AddHandler objButtonDokumentation.Click, AddressOf DokumentationBearbeiten
        objHeadsUp.Buttons.Add(objButtonSchliessen)
        objHeadsUp.Buttons.Add(objButtonHistorie)
        objHeadsUp.Buttons.Add(objButtonDokumentation)
        objHeadsUp.Show()

    ElseIf Aenderung.EventTyp = "CLOSE_MESSAGE" Then
        Dim objHeadsUp As New HeadsUp()
        objHeadsUp.Titel = "Achtung"
        objHeadsUp.Text = "Die Anwendung muss für eine Aktualisierung geschlossen werden."
        Dim objButtonSchliessen = New MaterialFlatButton
        objButtonSchliessen.Tag = objHeadsUp
        objButtonSchliessen.Text = "Anwendung Schliessen"
        AddHandler objButtonSchliessen.Click, AddressOf AnwendungSchliessen
        objHeadsUp.Buttons.Add(objButtonSchliessen)
        objHeadsUp.Show()
    Else
        If mtc_UebersichtTabControl.SelectedTab.Text = "Aenderung" Then
            mAenderungenUebersicht.Aktualisieren()
        End If
    End If
End Sub

最后当" Historieneintrag"按下按钮此方法被调用:

Private Sub HistorienEintragHinzufuegen(sender As Object, e As EventArgs)
    Dim blnNachDialogVerstecken As Boolean = False
    Dim objFlatButton As MaterialFlatButton = sender
    Dim HeadsUp As HeadsUp = objFlatButton.Tag
    Dim Objekt As Entitaet = HeadsUp.Tag
    Dim objOldLocation As System.Drawing.Point = Location
    HeadsUp.Close()
    Dim objDialogContent As New HistorienEintrag()
    ''Hacky: Ansonsten wird der Dialog sofort geschlossen
    If WindowState = FormWindowState.Minimized Or Not Visible Then
        Location = New System.Drawing.Point(-Width * 2, -Height - 2)
        Me.Show()
        blnNachDialogVerstecken = True
    End If
    Activate()

    If MaterialDialog.Show("Neuer Historien Eintrag", objDialogContent, MaterialWinforms.Controls.MaterialDialog.Buttons.OKCancel, MaterialDialog.Icon.Info) = DialogResult.OK Then
        Objekt.HistorieSpeichern(objDialogContent.Ergebniss)
    End If

    If blnNachDialogVerstecken Then
        Me.Hide()
        Location = objOldLocation
    End If

End Sub

在这里是第一个模态表单,因此如果我不进行显示和激活部分,则MessageBox.Show("")或任何其他表单立即关闭。 我在这做错了什么?

1 个答案:

答案 0 :(得分:0)

项目> (项目)属性>申请>关机模式

从启动表单关闭时到最后一个表单关闭时的更改