欢迎光临
我们一直在努力

利用自定义事件实现不同窗体间的通讯 — C#篇-.NET教程,C#语言

建站超值云服务器,限时71元/月

c# 中的“事件”是当对象满足一定条件,发生某些事情时,类向该类的客户提供通知的一种方法。使用事件,拥有该事件的对象不必知道需要通知谁,一旦满足了某个条件,将自动调用该事件,正确通知每个需要通知的对象。通过使用事件,提高了程序的模块化程度。

要在程序中使用自定义事件,需按以下步骤进行:

1、声明事件

要在类内声明事件,首先必须声明该事件的委托类型:

public delegate void selectionchangedeventhandler(object sender,

selectionchangedeventargs e);

说明:由于本示例程序需在事件中传递数据,因此定义了eventargs的派生类selectionchangedeventargs。

public class selectionchangedeventargs : eventargs

{

private string m_selection;

//本属性用于传递事件数据

public string selection

{

get { return m_selection; }

}

public selectionchangedeventargs(string selection)

{

m_selection = selection;

}

}

委托类型定义传递给处理该事件的方法的一组参数。多个事件可共享相同的委托类型,因此仅当尚未声明任何合适的委托类型时才需要执行该步骤。

接下来,声明事件本身:

public event selectionchangedeventhandler selectionchanged;

2、调用事件

如果没有任何客户将委托与该事件挂钩,该字段将为空;否则该字段引用应在调用该事件时调用的委托。因此,调用事件时通常先检查是否为空,然后再调用事件。

public class form2 : system.windows.forms.form

{

… …

public event selectionchangedeventhandler selectionchanged;

… …

private void combobox1_selectedindexchanged(object sender, system.eventargs e)

{

if (selectionchanged != null)

{

selectionchangedeventargs e = new selectionchangedeventargs(combobox1.text);

selectionchanged(this, e);

}

}

}

3、与事件挂钩

为了开始接收事件调用,客户代码先创建事件类型的委托,该委托引用应从事件调用的方法。然后它使用 += 将该委托写到事件可能连接到的其他任何委托上。

public class form1 : system.windows.forms.form

{

… …

private form2 m_frm2;

… …

public form1()

{

… …

m_frm2 = new form2();

//与事件挂钩

m_frm2.selectionchanged += new selectionchangedeventhandler(frm2_selectionchanged);

}

… …

private void button1_click(object sender, system.eventargs e)

{

m_frm2.showdialog();

}

private void frm2_selectionchanged(object sender, selectionchangedeventargs e)

{

//获取事件传递过来的数据

textbox1.text = e.selection;

}

}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 利用自定义事件实现不同窗体间的通讯 — C#篇-.NET教程,C#语言
分享到: 更多 (0)