读书人

困惑:控件继承有关问题

发布时间: 2012-07-31 12:33:46 作者: rapoo

困惑:控件继承问题求高手指教
第三方控件 TIPEdit 没有onkeydown onkeypress 事件
现我想继承TIPEdit控件开发出有上述俩事件的功能,本来认为是只要继承TWinControl的控件这俩个事件是有的,只要把它published就可以了,原来不是那么回事。

TIPEdit 父类:
TIPEdit = class(TCustomControl);

现想法还是继承TIPEdit 来实现,请问该怎么做? 需要截获上述的消息吗?大侠们 帮帮忙

[解决办法]
TCustomControl就是继承自TWinControl!把OnKeyDown和OnKeyPress事件published出来就行了吧?

type
TMyIPEdit = class(TIPEdit)
published
...//复制TIPEdit的published部分
property OnKeyDown;
property OnKeyPress;
end;

甚至都可以不写组件,直接给事件动态赋值就行了!
type
TIPEditCracker = class(TIPEdit);

TIPEditCracker(IPEdit1).OnKeyDown := DoKeyDown;//自定义的DoKeyDown函数以响应事件

[解决办法]
检查原始类的这两个方法
procedure KeyPress(var Key: Char); override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
分别缺少这两句,或者这两句未被执行
inherited KeyPress(Key); //或者inherited;
inherited KeyDown(Key, Shift); //或者inherited;

如果缺少就在代码最前面(即在begin之后)分别加上这两句,如果有但是未执行就得检查程序逻辑了.
然后published那两个事件即可
[解决办法]
TIPEdit = class(TCustomControl)
published
property OnKeyDown;
property OnKeyPress;
end;
[解决办法]
你要TIPEdit的功能就得从他那继承下来啊。
TMyIPEdit = class(TIPEdit);
[解决办法]
拦截消息,直接publish出来
[解决办法]
找本书努力研究研究吧

读书人网 >.NET

热点推荐