110,566
社区成员
发帖
与我相关
我的任务
分享
//窗口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();
}
void f_ChangeColor(string str)
{
this.Text = str; //this 如何指向我需求的那个label
}
}
public delegate void changeLable(string str);
public event changeLable change;
窗体1执行 窗体2定义的 change
form2.change += new changeLable(form2_change);
至于之后,无论你是需要通过 event 还是 function 都可以执行后续的操作
change += new changeLable(doSomthing);
//or
private void button1_Click(object sender, EventArgs e)
{
doSomething();
}
public event changeLable change;
这句话一定要写吗?
不写的话无法在其他窗体调用:
form2.change +=new changeLable(change);
public Form1()
{
InitializeComponent();
Form2 form2 = new Form2();
form2.change +=new changeLable(change);
change("窗体1调用窗体2的委托");
form2.Show();
}
private void change(string str)
{
this.Text = str;
}
public delegate void changeLable(string str);
public partial class Form2 : Form
{
public event changeLable change;
public Form2()
{
InitializeComponent();
change += new changeLable(Form2_change);
}
void Form2_change(string str)
{
this.label1.Text = str;
}
}
//如果
public delegate void Change(string str);
public event Change change;
//调用change 需要有个事件的实例
//如果
public delegate void Change(string str);
//调用change 需要有方法的实例
Change change = new Change(DoSomeThing);
[/quote]事件在外部只能注册或者取消 ,调用只能是事件类自己调用。
//如果
public delegate void Change(string str);
public event Change change;
//调用change 需要有个事件的实例
//如果
public delegate void Change(string str);
//调用change 需要有方法的实例
Change change = new Change(DoSomeThing);
[/quote]
是的,其实两者都是在做同一件事情,都是指向一个匹配的可执行方法delegate double MathAction(double num);
并不能在其他类访问到 MathAction[/quote]声明public 是可以的。
//如果
public delegate void Change(string str);
public event Change change;
//调用change 需要有个事件的实例
//如果
public delegate void Change(string str);
//调用change 需要有方法的实例
Change change = new Change(DoSomeThing);
delegate double MathAction(double num);
并不能在其他类访问到 MathAction//窗口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的话delegate double MathAction(double num);
class DelegateTest
{
static double Double(double input)
{
return input * 2;
}
static void Main()
{
MathAction ma = Double;
double multByTwo = ma(4.5);
Console.WriteLine("multByTwo: {0}", multByTwo);
MathAction ma2 = delegate(double input)
{
return input * input;
};
double square = ma2(5);
Console.WriteLine("square: {0}", square);
MathAction ma3 = s => s * s * s;
double cube = ma3(4.375);
Console.WriteLine("cube: {0}", cube);
}
}
public event Change change; //这里定义指向 event
public event Change change;
难道一定要在事件中才能完成吗?如:
private void button1_Click(object sender, EventArgs e)
{
change("123");//执行委托实例
}
//窗口2声明委托
public delegate void Change(string str);
public partial class Form2 : Form
{
public event Change change;
public Form2()
{
InitializeComponent();
change("123");//执行委托实例
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Form2 f = new Form2();
f.change += new Change(f_ChangeColor);
f.Show();
}
void f_ChangeColor(string str)
{
this.Text = str;
}
}