//窗口2声明委托 public delegate void Change(string str); public partial class Form2 : Form { //定义一个指向委托的事件,只能通过事件触发吗? public event Change change; public Form3() { InitializeComponent(); //该处会报错 “並未將物件參考設定為物件的執行個體 ” change("123"); } }
//窗口1执行窗口2的委托 public partial class Form3 : Form { public Form2() { InitializeComponent();
Form3 f = new Form3(); f.change += new Change(f_ChangeColor); f.Show(); }
//窗口2声明委托 public delegate void Change(string str); public partial class Form2 : Form { //定义一个指向委托的事件,只能通过事件触发吗? public Form3() { InitializeComponent(); //该处会报错 “並未將物件參考設定為物件的執行個體 ” Change change = new Change(DoSomeThing); change("123"); } }
//窗口2声明委托 public delegate void Change(string str); public partial class Form2 : Form { //定义一个指向委托的事件,只能通过事件触发吗? public Form3() { InitializeComponent(); //该处会报错 “並未將物件參考設定為物件的執行個體 ” Change change = new Change(DoSomeThing); change("123"); } }
private void DoSomeThing(string str) { }
你这样用委托就对了,简单的说就是你要实例化委托,如果你不用event的话
哦, 了解了, 我思想太僵化了。 不知这样理解是否正确:
//如果 public delegate void Change(string str); public event Change change; //调用change 需要有个事件的实例
//如果 public delegate void Change(string str); //调用change 需要有方法的实例 Change change = new Change(DoSomeThing);
是的,其实两者都是在做同一件事情,都是指向一个匹配的可执行方法 [解决办法]
//窗口2声明委托 public delegate void Change(string str); public partial class Form2 : Form { //定义一个指向委托的事件,只能通过事件触发吗? public Form3() { InitializeComponent();