2017-02-16 9 views
1

私は、データベース内の何かが変更されたときにユーザーに通知するWinformsアプリケーションを持っています。そのためには、うまく動作するSql-Dependencysを使用します。 依存関係が発生すると、私はいくつかのボタンを含むフォームを表示できるので、ユーザーは自分が何をしたいかを決めることができます。 1つのボタンの後に私はダイアログを表示したいが、最初のダイアログは常に即座に閉じられる。 これまでに見つかった唯一の修正は、基本フォームを復元して起動することですが、それは私が探している解決策ではありません。コードの場合 は私がやっている次のとおりです。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 HeadsUpはこのここから取られている)データベースに変更したときに呼び出されます

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

関連する問題