2017-02-16 79 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