java委托 事件_委托和事件的关系

首先要知道,委托是一种数据类型,委托的概念就是事件的引用,事件就是依靠委托创建的一种有有限制的委托变量,他是为了解决委托在一些情况下的问题而出现的。。

用例子来看:

在Form1类里

private void Form1_Load(object sender, EventArgs e)

{

ucButton1.tripleClick = TripleClick;

ucButton1.tripleClick = TripleClick3;

ucButton1.tripleClick = TripleClick2;

}

private void TripleClick()

{

MessageBox.Show("再在我在Form1中,执行三连击事件!");

}

private void TripleClick2()

{

MessageBox.Show("222222222222222222222222222!");

}

private void TripleClick3()

{

MessageBox.Show("3333333333333333333333333333!");

}

private void button1_Click(object sender, EventArgs e)

{

//通过委托来实现事件的功能的问题有:

// 1,可以在类的内部来触发,也可以在类的外部触发。因为委托变量必须是是public类型的。

//2 委托变量的赋值方式可以使用=,这样就有可能把之前的委托指向覆盖。

//ucButton1.tripleClick();

}

private void button2_Click(object sender, EventArgs e)

{

//2 委托变量的赋值方式可以使用=,这样就有可能把之前的委托指向覆盖。

ucButton1.tripleClick = TripleClick2;

// ucButton1.tripleClick();

}

在自定义控件 UCButton中 :

public delegate void TripleClickDelegate();

public partial class UCButton : UserControl

{

public TripleClickDelegate tripleClick;

//如果把tripleClick设置为private,那么的确在外部不能触发了,但是也不能在外部赋值了。

public UCButton()

{

InitializeComponent();

}

int count = 0;

private void btnTriple_Click(object sender, EventArgs e)

{

count++;

if (count >= 3)

{

if (tripleClick != null)

{

//当用户三连击后触发指定的方法

tripleClick();

}

count = 0;

}

}

而如果使用事件来写的话这两个问题就可以解决

首先事件不能使用=赋值只能在-=或+=左边 其次 事件只能在内部调用在外面只能赋值。。。

Form1类:

private void Form2_Load(object sender, EventArgs e)

{

ucTtripleClickEvent1.tripleClick += new MyTripleClick(Click2);

ucTtripleClickEvent1.tripleClick+= Click1;

}

void Click1()

{

MessageBox.Show("通过事件实现三连击!");

}

void Click2()

{

MessageBox.Show("22222三连击!");

}

三连击控件类:

public delegate void MyTripleClick();

public partial class UCTtripleClickEvent : UserControl

{

public UCTtripleClickEvent()

{

InitializeComponent();

}

//有了委托类型以后就可以定义事件了

public event MyTripleClick tripleClick;

int count = 0;

private void button1_Click(object sender, EventArgs e)

{

count++;

if (count >= 3)

{

//用事件来实现,用之前要定义事件类型,要定义事件必须有委托,否则无法使用。

tripleClick();

count = 0;

}

}

}

你可能感兴趣的:(java委托,事件)