项目上的情况是这样的:
主窗体的值会实时变化,而子窗体的值要随父窗体的变化而变化。
思路:
主窗体是主动,子窗体被动,由主窗体的改变的事件去调用子窗体的动作函数来改变子窗体。
1.子窗体写执行动作的方法
2.子窗体声明一个委托(在命名空间中,而不在类中)。
3.父窗体实例化子窗体的委托,并想办法将子窗体的执行方法名给委托对象。(父窗体的委托对象就可以知道是哪个执行方法啦)
4.父窗体在主动改变的事件中调用委托对象,并传入值,相当于调用了子窗体的方法,实现子窗体的改变。
步骤1、2是构建发布者;步骤3、4是构建订阅者。
A.子窗体先写方法和声明委托
子窗体写执行动作的方法
子窗体声明一个委托(在命名空间中,而不在类中)。
public delegate void DelegateMethod(string x);
public void ChangeTime(string x)
{
this.Invoke(new Action(() =>
{
label1.Text = x;
}));
}
第一个代码只是声明了委托(直接在namespace下)而没有实例化,也没有指出是哪个方法的委托。第二个代码是具体的执行方法。
B.主窗体实例化委托,并指定子窗口内的方法,并调用执行。
实例化一个委托对象
DelegateMethod s;
为了指定s对应的方法,在子窗体生成的时候,指定方法