中国开发网: 论坛: Delphi/BCB: 贴子 135762
pcplayer: Delphi2005 asp.net 用户控件的事件
一个用户控件,要有事件,是得使用这个用户控件的页面里能触发那个事件,知道用户控件干了什么。

基本上,和普通的DLEPHI的控件要做一个事件的方法差不多。

首先,做一个用户控件,并定义一个事件类型:

TTestEvent=procedure (S:string) of object; //自己定义的事件类型
TWebUserControl2 = class(System.Web.UI.UserControl)
{$REGION 'Designer Managed Code'}
strict private
procedure InitializeComponent;
procedure Button1_Click(sender: System.Object; e: System.EventArgs);
{$ENDREGION}
strict private
FTestEvent:TTestEvent;
procedure Page_Load(sender: System.Object; e: System.EventArgs);
strict protected
Button1: System.Web.UI.WebControls.Button;
procedure OnInit(e: System.EventArgs); override;
private
{ Private Declarations }
public
{ Public Declarations}
published
property OnTestEvent:TTestEvent read FTestEvent write FTestEvent; //自己定义的事件
end;


在用户控件里实现这个事件,当用户控件内的BUTTON CLICK时:
procedure TWebUserControl2.Button1_Click(sender: System.Object; e: System.EventArgs);
begin
if assigned(FTestEvent) then FTestEvent('2');
end;

以上是用户控件里的代码。然后,在页面里:

首先声明一个PlaceHolder和一个用户控件。因为用户控件要动态生成,要放到合适的地方,就是PlaceHolder里。声明在这里:
strict protected //用户控件也声明在这里
LinkButton1: System.Web.UI.WebControls.LinkButton;
LinkButton2: System.Web.UI.WebControls.LinkButton;
Label1: System.Web.UI.WebControls.Label;
ATestControl:TestEvent.TWebUserControl2;
PlaceHolder1: System.Web.UI.WebControls.PlaceHolder;

在页面里声明一个方法,参数和那个事件完全一样:
procedure DoTestEvent(S:string);

另外一个方法,就是动态生成这个用户控件:
procedure ShowUserControl;

实现代码:
procedure TWebForm1.ShowUserControl;
begin
ATestControl:=TestEvent.TWebUserControl2(Page.LoadControl('TestEvent.ascx'));
ATestControl.OnTestEvent:=DoTestEvent; //---把这个方法指到控件的事件。和普通DELPHI一样。
PlaceHolder1.Controls.Add(ATestControl);
end;

触发事件的方法的实现:
procedure TWebForm1.DoTestEvent(S: string);
begin
Label1.Text:=S;
end;

这里需要注意的是,ShowUserControl 要放到:
procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
begin
// TODO: Put user code to initialize the page here
if not IsPostBack then
begin

end;
ShowUserControl; //一定是放到这里,不是放到 not IsPostBack 里。也就是每次都要生成它!
end;

这样就可以触发事件了。

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录