全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1333
推到 Plurk!
推到 Facebook!

ASP.net User control and Event in Delphi

 
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-11 18:26:15 IP:61.141.xxx.xxx 未訂閱
一个用户控件,要有事件,是得使用这个用户控件的页面里能触发那个事件,知道用户控件干了什么。    基本上,和普通的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;
这样就可以触发事件了。 發表人 - pcplayer99 於 2005/05/11 18:29:36
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-13 16:55:53 IP:219.134.xxx.xxx 未訂閱
另外,如果想在设计期把User Control拖到页面上,要注意:    设计期拖到页面上的UserControl, Delphi并没有在pas里声明它。因此,还是要在页面里声明它:
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;    
设计期已经把控件拖过来了,不用再做 Page.LoadControl 来生成这个控件了。只需要在Page_Load里把这个控件的事件和页面里的指定方法绑定就行了。
系統時間:2024-05-19 19:47:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!