怎么新建的控件事件总是不能调用啊!(100分)

  • 主题发起人 诸葛不才
  • 开始时间

诸葛不才

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大哥们,小弟在创建一个新类时,将母类的Click事件重载,并增加了一句
ShowMessage('Ok'),为什么不能响应这句啊!!!
还有我新不重载, 新建一个类
定义为:
private:
TNotifyEvent FOnClick;
protected:
virtual void __fastcall FClick(TObject* Sender); 创建事件名称
public:

published:
__property TNotifyEvent OnClick = {read = FOnClick,write = FOnClick}

__fastcall TClickButton::TButton(TComponent *Owner) //构造函数
:TButton(Ower)
{
OnClick = FClick; //初始化OnClick事件指向Click;

}


void __fastcall TClickButton::FClick(TObject* Sender)
{
ShowMessage("OK");
if (FOnClick)
FOnClick(this);
}
//以上是C++ Builder所做



以上是我仿一个Delphi的程序而做,为什么不行啊?或哪位大哥有事似的BCB源程序啊
 
加句inherited看看
 
你的控件从哪个类别继承而来的?要达到什么目的?增加一个OnClick 事件吗?一般只要
published 父类的 OnClick 属性或重载父类的Click方法就行了。
另你在构造函数将 OnClick 设为 FClick,而在 FClick 中又调用 OnClick ,不是间接地
递归调用自己吗?好象还没有终止递归的条件,将造成栈溢出。
既然 OnClick Published 了,就是为了设计时可以指定它的事件处理过程,那在构造函数
中指定它不是变得没用了吗?可能是因为你给的代码不够完整吧。
 
在delphi中如下﹐非常簡單﹕

unit Button1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TButton1 = class(TButton)
public
procedure Click; override;
end;
implementation
procedure TButton1.Click;
begin
inherited;
showmessage(' OK ');
end;

注意的是繼承的是事件調用的過程﹐而不是事件本身。

你的大致意思是對的﹐你的意思是創建一個新事件﹐并把原來的單擊的過程指針賦給事件指針﹐并ShowMessage,
但你忘了你的新事件由誰來觸發??? 你沒有用 procedure WM_...(var message:...) message WM_CLI....
來觸發你的事件﹐

為什么不直接﹐繼承已有的Click事件﹐而重載它的事件指向的過程呢? 不是簡便多了.

 
bbkijy,我就是看到一个THeaderList的源程序才让OnClick = FClick,也不会递归啊,对了
BCB中好像没有inherited,这可怎么办啊,如果新建事件,像Click之类好像不要去触发吧
 
BCB 中模拟 inherited(假设从 TButton 继承):
void __fastcall TClickButton::FClick(TObject* Sender)
{
TButton::Click(Sender); //调用基类原虚拟方法
ShowMessage("OK");
}

 
对不起,弄错了,请大家不要理会我上面关于inherited的说法。
 
在D里怎样从面板的组件中重载事件啊?帮忙
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
595
import
I
顶部