休息一下.随便说说. Delphi的ONXXXXX事件是不是害了不少人?

CACACACACA 2009-04-18 03:18:29
加精
刚开始用DELPHI的时候, 是不是大多数人都在ONXXXXX事件中写代码? (我也是)

一直想说说这个问题. 感觉是从一开始就进入了"误区". 这种习惯感觉很不好!

有些非可视的组件,尤其像TDataSet的子孙们根本就不应该在属性编辑器中有OnXXXX事件. public出来就OK了.

或者TDataSet的子孙根本不应该能直接拖到TForm 或 TDataModule 上.

还有像TButton.Click. 应该能像C#这样 Click += XXXX.Click会更好.

以上只是本人的一点看法.

希望大家说说一些认为值得"推敲"的东西.









...全文
2386 218 打赏 收藏 转发到动态 举报
写回复
用AI写文章
218 条回复
切换为时间正序
请发表友善的回复…
发表回复
-失魂落魄- 2009-11-26
  • 打赏
  • 举报
回复
新人 学习了```
wangxinqn 2009-11-23
  • 打赏
  • 举报
回复
明明可视化编程你非要自己代码实现,不知道说你什么好?你怎么不去用汇编写程序
qiuqiuye 2009-11-16
  • 打赏
  • 举报
回复
讨论的很热烈啊
sandok 2009-10-23
  • 打赏
  • 举报
回复
受教了
RAISEEXCEPTION 2009-07-20
  • 打赏
  • 举报
回复
晕,结了的贴子怎么还在?!
kwer 2009-07-20
  • 打赏
  • 举报
回复
不知道好还是不好,做不到的地方可以变通绕过去
正如204楼所说,只有经验丰富的人才不被问题所困。
CACACACACA 2009-07-18
  • 打赏
  • 举报
回复
FORM作为一个中介者的角色,有着中介者模式的本身的短处, 知道的,处理的很多, 所以复杂性也高.

所以把相应的XXX事件归类或适当的包装 或许会更好一些.
CACACACACA 2009-07-18
  • 打赏
  • 举报
回复
贴子有段时间了.现在回过头再看看,感觉还是有不少收获.

对于 click += xxx , 我最初只是考虑在语法上,并没有从设计的角度来想.

但最终还是和设计的问题联系到一起了. 很多人都提出了自己的看法. 对于我来说获益不少.

唯一感觉失望的是没有关于数据集的XXX事件的问题.


关语言上的一些差异,是无法避免的, 最终还是靠人来怎么运用. C++没有接口, 没有代理等. 一样能写出结构清晰的代码.


newfang 2009-07-17
  • 打赏
  • 举报
回复
坐在井底看星星……
newzhq1984 2009-07-17
  • 打赏
  • 举报
回复
TNotifyEvent = procedure(Sender: TObject) of object; 定义了一个类函数
以OnClick举例:定义了一个属性 property OnClick: TNotifyEvent read FOnClick write FOnClick stored IsOnClickStored;
FOnClick:TNotifyEvent 类函数
监听消息:procedure WMLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP;
当响应这个消息的时候执行 procedure Click; dynamic;
当执行Click事件的时候,会改变set进去属性FOnClick 而FOnClick 是一个类函数,FOnClick := 你定义的类函数(例如button1click)
这样就执行你的写在button1click内的代码。 而sender 为什么是发送者 也是在Click中FOnClick(Self)传进去Self的 传什么都行 你可以定义自己的类函数来处理事件
一个简单的OnClick不是简单的过程 也不是不简单的过程 Delphi的优势就是快速上手 从外到内看你怎么学 看你怎么玩
飞狼兄 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 210 楼 zjny520 的回复:]
mark
[/Quote]
!!!
tfner123 2009-07-13
  • 打赏
  • 举报
回复
Sender是在做什么用的啊??Lz!
tfner123 2009-07-13
  • 打赏
  • 举报
回复
Sender是在做什么用的啊??Lz!
zjny520 2009-07-13
  • 打赏
  • 举报
回复
mark
林石公 2009-07-13
  • 打赏
  • 举报
回复
以某种语言的特点来判断另一种语言,总是会发现许多不,嗯,咋说,不好?不尽如人意(已意?)的地方。或许,这个地方正是它的优势,只是因为不习惯而认为这是劣势呢??
milunhailili 2009-07-11
  • 打赏
  • 举报
回复
这帖要顶一下留任纪念.
Delphi是一个易学难精的东西,所以导致虽然很多人说自己会Delphi,可是真正算得上精通的,也没多少.
xinguilee 2009-05-13
  • 打赏
  • 举报
回复
添磚加瓦。我也來蓋一樓
niniu 2009-05-12
  • 打赏
  • 举报
回复
为什么不用 ActionList,delphi 提供了这么好的解决方案不去用。
CACACACACA 2009-05-11
  • 打赏
  • 举报
回复
[Quote=引用 198 楼 sz_haitao 的回复:]
Delphi组件的事件机制 相当于 有限制的面向方面
这个限制就在于插入(注入)的位置是组件设计者根据他的经验而设好的,
其他人使用时只能在这些预设的插入点里选,不能超过它们而自定一些新的插入点
[/Quote]

赞同! 就个人来说, 不得不写些helper类. (同是也说明VCL设计的非常棒! 大多数通过WINDOWPROC可以
改变/拦截TControl子类的一些行为. 而不用去派生一个子类)


to:
"这是可以扩充的,通过组件的派生类或者Class Helper来扩充。 "

对于非界面控件来说是可以. 但对于像TButton, TEdit等界面控件来说, 派生出新类反而是件麻烦的事.
IBetter 2009-05-11
  • 打赏
  • 举报
回复
有意思啊!这只是习惯问题,Delphi的口号就是:RAD;
如果你不习惯,你也有其它方式可以实现.没必要说的这么厉害吧?
害谁了呢?
加载更多回复(198)

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧