1、主窗体
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace DelegateSubFormToMainFormMessage
{
//声明委托
public delegate void ShowCounter(string Counter);
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
SubForm subForm = new SubForm();
//委托变量关联方法
subForm.messageSender = this.Receiver;
subForm.Show();
}
//根据委托创建方法
public void Receiver(string Counter)
{
this.MainFormLabel.Content = Counter;
}
}
}
2、子窗体
在子窗体里面我们创建了委托变量,因为该委托变量是public的,且是子窗体SubForm类的成员变量,因此在主窗体的构造函数当中实例化子窗体后,是可以访问到该委托变量的,而且在主窗体当中还将该委托变量与Receiver方法进行了关系,所以在SubForm子窗体当中调用委托变量的时候是可以间接调用到MainForm主窗体当中与委托变量相关联的Receiver方法(附带参数)的。Receiver方法通过委托传递过来的参数进而改变所在窗体中的MainFormLabel控件的值。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace DelegateSubFormToMainFormMessage
{
/// <summary>
/// Interaction logic for SubForm.xaml
/// </summary>
public partial class SubForm : Window
{
public SubForm()
{
InitializeComponent();
}
//创建委托变量
public ShowCounter messageSender;
//计数
public int counter = 0;
private void ClickMe(object sender, RoutedEventArgs e)
{
counter++;
//调用委托变量 传递消息参数
if (messageSender!=null)
{
messageSender(counter.ToString());
}
}
}
}