2016-08-01 46 views
-1

我沒有捕獲窗體對話框事件我創建了一個FormManager類,它顯示一個名爲MyFormView的自定義窗體。 FormManager訂閱MyFormView引發的事件。如果使用ShowDialog()而不是Show()

這裏的代碼方面,在MyFormView觸發事件:

public delegate void MyFormClickEventHandler(string name); 
public event MyFormClickEventHandler myFormEventHandler; 

private void MyFormClick(object sender, RoutedEventArgs e) 
{ 
    if (this.myFormEventHandler != null) 
    { 
     this.myFormEventHandler(this.Name.Text); 
    } 
} 

FormManager創建MyFormView對話框並訂閱到用戶控件的事件:

public delegate void MyFormEventHandler(string info); 
public static event MyFormEventHandler MyFormEvent; 

myFormView = new Window 
{ 
    Title = "my form!", 
    Height = 300, 
    Width = 980, 
    Content = new MyFormView() 
}; 
((MyFormView)myFormView.Content).myFormEventHandler += this.GetDataFromForm; 

這裏顯示我用的對話框:

myFormView.Show(); 

代碼工作正常,事件在用戶控件內被觸發(MyFormView)並在實際事件處理程序中捕獲(GetDataFromForm)。

的問題是,如果我改變了這一個最後確定的線:

myFormView.ShowDialog(); 

這裏的問題是,事件沒有得到,因爲在MyFormClick myFormEventHandler解僱是

是什麼展()的ShowDialog之間的差異()使FormManager以不從myFormview訂閱事件?這能解決嗎?

+1

從[mcve]開始(http://stackoverflow.com/help/mcve)。嘗試你的代碼要比猜測你在這裏沒有顯示的代碼中可能做錯了什麼更容易。 – Sinatr

+0

感謝評論@Sinatr。你覺得缺少什麼或沒有很好解釋?我會很高興地添加你的建議:) – juagicre

+0

你如何提升事件,如何訂閱,是否有衝突的事情:更多的訂閱者,'try/catch {}'(空catch塊)等等?猜測很簡單,但它並不真正有用。 – Sinatr

回答

0

問題是我在訂閱事件前顯示了對話框。

只使用Show()它不是問題,但使用ShowDialog()它從不訂閱事件。

下面的代碼:

myFormView = new Window 
{ 
    Title = "my form!", 
    Height = 300, 
    Width = 980, 
    Content = new MyFormView() 
}; 

((MyFormView)myFormView.Content).myFormEventHandler += this.GetDataFromForm; 

myFormView.Show(); 

//or myFormViewShowDialog(); 

其實阿里是給了註釋中的解決方案,但沒有張貼的一個。所以我這樣做可能會有同樣的問題。

相關問題