如果使用ShowDialog()而不是Show(),则不会捕获表单对话框事件

时间:2016-08-01 12:20:11

标签: c# .net wpf dialog

我创建了一个FormManager类,它显示了一个名为MyFormView的自定义表单。 FormManager订阅MyFormView抛出的事件。

这里是在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对话框并订阅UserControl事件:

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 null

Show() ShowDialog()之间的区别是什么使 FormManager 不订阅来自的事件myFormview ?这可以解决吗?

1 个答案:

答案 0 :(得分: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();

实际上,Arie是在评论中提供解决方案的人,但没有发布。所以我为ppl做了可能有同样问题。