2017-02-16 95 views
1

我有一个Winforms应用程序,它应该在数据库中的某些内容发生更改时通知用户。为此我使用Sql-Dependencys,它工作正常。 当依赖关系触发时,我可以用一些按钮显示表单,以便用户可以决定他想要做什么。 一个按钮后,我想显示一个对话框,但第一个对话框总是立即关闭。 我至今发现的唯一修复方法是恢复基础表单并激活它,但那不是我正在寻找的解决方案。 的代码我做如下:Windows窗体模式窗体在基本窗体不活动时立即关闭

:当东西在数据库

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 

此方法显示的第一种形式(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(“”)或任何其他形式立即关闭,如果我不做展示和激活部分。 我在这里做错了什么?

+0

为什么HeadsUp.Close声明

变化? –

+0

,因为我不需要再显示它 – glm9637

+0

我想我很困惑你的代码/问题..nvm –

回答

0

项目>(项目)属性>应用程序>关断模式,从启动窗体关闭时最后一个窗体关闭

+0

但我的应用程序不会关闭,只有对话框。 – glm9637