2007-03-07
DFL框架分析(二) 事件订阅
关键字: DFL 事件 订阅 设计模式 观察者
DFL中的事件订阅(module dfl.event,dfl.control)
一.EventArgs类: 事件参数祖先,传递事件的参数组合,可以进行继承实现更多的参数.
二.Event 模版
1.接受两个模版参数,
2.重载了操作符:
opCatAssign ~ 增加.
opCall 调用
opApply foreach调用
三.例子
---------------------------------------------------------------------
控件本身:
1.声明可以订阅事件
2.事件处理函数
3.处理Window的事件消息,触发事件.
-------------------------------------------------------------------------------
使用控件过程:
4.发生事件要执行的函数.
5.订阅事件.
四.启示 observer模式的一个好例子.
在D的运行库Phobos中,std.signals 也实现了observer模式.
一.EventArgs类: 事件参数祖先,传递事件的参数组合,可以进行继承实现更多的参数.
二.Event 模版
1.接受两个模版参数,
2.重载了操作符:
opCatAssign ~ 增加.
opCall 调用
opApply foreach调用
三.例子
---------------------------------------------------------------------
控件本身:
1.声明可以订阅事件
Event!(Control, EventArgs) click;
2.事件处理函数
protected void onClick(EventArgs ea)
{
click(this, ea);
}
3.处理Window的事件消息,触发事件.
protected void wndProc(inout Message msg)
{
switch(msg.msg)
{
case WM_LBUTTONUP:
onClick(EventArgs.empty);
}
}
-------------------------------------------------------------------------------
使用控件过程:
4.发生事件要执行的函数.
private void bt_click(Object sender, EventArgs ea)
{}
5.订阅事件.
bt.click ~= &bt_click ;
四.启示 observer模式的一个好例子.
在D的运行库Phobos中,std.signals 也实现了observer模式.
评论
sleets
2007-06-29
呵呵,真的很不错
click ~= delegate void( Control sender, EventArgs ea ){
sender.text = "点我就变";
msgBox("Control ");
} ;
click ~= delegate void( Control sender, EventArgs ea ){
sender.text = "点我就变";
msgBox("Control ");
} ;
oldrev
2007-03-07
整个一 .net 嘛
发表评论
- 浏览: 114210 次

- 详细资料
搜索本博客
最新评论
-
ANSI和Unicode练习后记
要在dfl的listview控件里显示来自mysql的中文字符。 怎么出错了,提 ...
-- by wandernet -
D语言设计模式 Observer
好文!学习
-- by hqs7636 -
ANSI和Unicode练习后记
新年快乐!
-- by oldrev -
ANSI和Unicode练习后记
支持一个!新年快乐!
-- by DavidL -
D语言的IOCP(完成端口) ...
"iocp的使用例子(哪怕是C方式的)在dsource上都找不到一个,仅此一条i ...
-- by ahadf






评论排行榜