WPF委托事件调用

28 阅读1分钟

MainWindow 主窗体

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
`
public partial class MainWindow : Window
{
    private Form3 f3; // 保存 Form3 的引用
    public MainWindow()
    {
        InitializeComponent();

        // 创建 Form3 实例并订阅 ChangeEvent 事件
        f3 = new Form3();
        f3.ChangeEvent += ShowMessagebox;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Form2 f2 = new Form2(f3);
        f2.ShowDialog();
    }
    private void ShowMessagebox()
    {
        Read_Click(null, null);
    }

    private void Read_Click(object? sender, RoutedEventArgs? e)
    {
        MessageBox.Show("读取所有配置成功!");
    }
}
`

`Form2

public partial class Form2 : Window
{
    private Form3 f3; // 保存 Form3 的引用
    public Form2(Form3 form3)
    {
        InitializeComponent();
        f3 = form3;
    }
    
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        f3.ShowDialog();
    }
}`

`Form3

public partial class Form3 : Window
{
    public delegate void ChangeHandler();  //1. 首先在子窗口定义委托
    public event ChangeHandler ChangeEvent;//2. 此事件定义在Class内

    public Form3()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("登录成功!");
        if (ChangeEvent != null) ChangeEvent();
        else MessageBox.Show("Null");
    }
}
`