关于事件顺序的。。另开一贴。。希望高手指点。。快疯了。。分不够加。。谢谢帮忙。。

duguguiyu1984 2005-01-06 09:24:04
其实是类似于动态创建控件的问题。。
public class A
Inherits Control '重载的是control控件。。
Implements INamingContainer
private bool as Boolean
Protected Overrides Sub CreateChildControls()
if bool then
'根据值创建控件。
end if
End Sub

Protected Sub btn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn.Click
'这是控件上一个按钮的单击事件
bool=false
End Sub

我的目的是想根据单击的结果来动态创建控件。。
但是CreateChildControls()在btn_Click之前执行。。
我想把CreateChildControls()中的内容放在preRender中执行但添加的控件不响应事件。。
其他方法也想了一些还是无法解决
期待指点 谢谢。。。
...全文
178 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
duguguiyu1984 2005-01-10
  • 打赏
  • 举报
回复
ding
duguguiyu1984 2005-01-09
  • 打赏
  • 举报
回复
up
duguguiyu1984 2005-01-08
  • 打赏
  • 举报
回复
up
LoveCherry 2005-01-08
  • 打赏
  • 举报
回复
up
duguguiyu1984 2005-01-08
  • 打赏
  • 举报
回复
沉的好快顶。。。。
duguguiyu1984 2005-01-08
  • 打赏
  • 举报
回复
顶一下。。。
duguguiyu1984 2005-01-06
  • 打赏
  • 举报
回复
谢谢楼上了 繁体看的好累。。好像不是想要的 继续顶。。。
问下 有人有 ASP.NET服务器控件与组件开发 电子版吗。。。
li_hui_hui 2005-01-06
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/library/cht/default.asp?url=/library/CHT/cpguide/html/cpconbubblingcommandevent.asp

反昇事件
ASP.NET 網頁架構提供稱為事件反昇的技術,允許子控制項在其 Containment 階層架構中向上傳播事件。事件反昇讓事件能夠從控制項階層架構中較便利的位置被引發,並且允許將事件處理常式附加至原始控制項,以及公開反昇的事件的控制項。

事件反昇被資料繫結控制項 (Repeater、DataList 和 DataGrid) 用來將子控制項 (在項目樣板內) 引發的命令事件公開為最上層事件。雖然 .NET Framework 中的 ASP.NET 伺服器控制項針對命令事件 (其事件資料類別衍生自 CommandEventArgs 的事件) 來使用事件反昇,伺服器控制項上定義的任何事件都可以被反昇。

控制項可以透過兩個繼承自基底類別 System.Web.UI.Control 的方法來參與事件反昇。這些方法為 OnBubbleEvent 和 RaiseBubbleEvent。下列程式碼示範這些方法的簽名碼 (Signature)。

[C#]
protected virtual bool OnBubbleEvent(
object source,
EventArgs args
);
protected void RaiseBubbleEvent(
object source,
EventArgs args
);
[Visual Basic]
Overridable Protected Function OnBubbleEvent( _
ByVal source As Object, _
ByVal args As EventArgs _
) As Boolean
Protected Sub RaiseBubbleEvent( _
ByVal source As Object, _
ByVal args As EventArgs _
)
RaiseBubbleEvent 的實作由 Control 提供,並且不能被覆寫。RaiseBubbleEvent 循階層架構將事件資料向上傳送至控制項的父代 (Parent)。若要處理或引發反昇的事件,控制項必須覆寫 OnBubbleEvent 方法。

控制項若有事件反昇給它,要做下列三件事的其中之一。

它不做任何事,此時事件會自動反昇上它的父代。
它做某種處理,並繼續反昇事件。若要達成這點,控制項必須覆寫 OnBubbleEvent,並從 OnBubbleEvent 叫用 RaiseBubbleEvent。下列程式片段 (取自樣板化的資料繫結控制項範例) 會在檢查事件引數的型別之後的反昇事件。
[C#]
protected override bool OnBubbleEvent(object source, EventArgs e) {
if (e is CommandEventArgs) {
// Adds information about an Item to the
// CommandEvent.
TemplatedListCommandEventArgs args =
new TemplatedListCommandEventArgs(this, source, (CommandEventArgs)e);
RaiseBubbleEvent(this, args);
return true;
}
return false;
}
[Visual Basic]
Protected Overrides Function OnBubbleEvent(source As Object, e As EventArgs) As Boolean
If TypeOf e Is CommandEventArgs Then
' Adds information about an Item to the
' CommandEvent.
Dim args As New TemplatedListCommandEventArgs(Me, source, CType(e, CommandEventArgs))
RaiseBubbleEvent(Me, args)
Return True
End If
Return False
End Function
它會停止事件的反昇,並引發和 (或) 處理事件。事件的引發牽涉叫用分派事件至接聽項 (Listener) 的方法。若要引發反昇事件,控制項必須覆寫 OnBubbleEvent 來叫用引發反昇事件的 OnEventName 方法。引發反昇事件的控制項通常將反昇的事件公開為最上層事件。下列程式片段 (取自樣板化的資料繫結控制項範例) 會引發反昇的事件。
[C#]
protected override bool OnBubbleEvent(object source, EventArgs e) {
bool handled = false;

if (e is TemplatedListCommandEventArgs) {
TemplatedListCommandEventArgs ce = (TemplatedListCommandEventArgs)e;

OnItemCommand(ce);
handled = true;
}
return handled;
}
[Visual Basic]
Protected Overrides Function OnBubbleEvent(source As Object, e As EventArgs) As Boolean
Dim handled As Boolean = False

If TypeOf e Is TemplatedListCommandEventArgs Then
Dim ce As TemplatedListCommandEventArgs = CType(e, TemplatedListCommandEventArgs)

OnItemCommand(ce)
handled = True
End If
Return handled
End Function
如需示範事件反昇的範例,請參閱事件反昇控制項範例和樣板化的資料繫結控制項範例。

注意 雖然啟用事件反昇 OnBubbleEvent 的方法遵循引發事件方法的標準 .NET Framework 命名模式,但卻沒有名為 BubbleEvent 的事件。反昇的事件在停止事件反昇的控制項中被公開為的最上層事件。例如,DataList 控制項將其樣板中控制項的 Command 事件公開為 ItemCommand 事件。也要注意 .NET Framework 中 OnEventName 事件的標準簽章具有一個引數 (protected void OnEventName (EventArgs e))。然而,OnBubbleEvent 具有兩個引數,因為事件源自控制項之外;第二個引數提供來源。
討論到目前為止示範了控制項可以如何回應反昇至其事件。下面的章節將示範如何撰寫定義反昇事件的控制項。

定義反昇的事件
如果您要您的控制項啟用其所定義事件的事件反昇,控制項必項從引發事件的 OnEventName 方法中叫用 RaiseBubbleEvent。控制項裡面不需進行額外工作。下列程式片段示範定義啟用反昇的 Command 事件的控制項。

[C#]
protected virtual void OnCommand(CommandEventArgs e) {
CommandEventHandler handler = (CommandEventHandler)Events[EventCommand];
if (handler != null)
handler(this,e);

// The Command event is bubbled up the control hierarchy.
RaiseBubbleEvent(this, e);
}
[Visual Basic]
Protected Overridable Sub OnCommand(e As CommandEventArgs)
Dim handler As CommandEventHandler = CType(Events(EventCommand), CommandEventHandler)
If Not (handler Is Nothing) Then
handler(Me, e)
End If
' The Command event is bubbled up the control hierarchy.
RaiseBubbleEvent(Me, e)
End Sub
注意 事件反昇並不限於命令事件。您可以使用這裡說明的機制來反昇任何事件。
duguguiyu1984 2005-01-06
  • 打赏
  • 举报
回复
帮忙粘下这两个网页好吗??看不了。。急啊。。。

http://msdn.microsoft.com/library/cht/default.asp?url=/library/CHT/cpguide/html/cpconbubblingcommandevent.asp

ms-help://MS.NETFrameworkSDKv1.1.CHS/cpguidenf/html/cpconbubblingcommandevent.htm
duguguiyu1984 2005-01-06
  • 打赏
  • 举报
回复
to:welshem(天堂客)
我在CreateChildControls用的是一大堆类建立的控件无法改成HtmlTextWriter可以输出的内容怎么办呢???
welshem 2005-01-06
  • 打赏
  • 举报
回复
你不要用复合控件的方法生成自定义控件,
直接继承于Control/WebControl
用 protected override void Render(HtmlTextWriter writer)生成界面
duguguiyu1984 2005-01-06
  • 打赏
  • 举报
回复
能不能帮忙粘一下。。。。我校园网没用代理。上不了外国网。。。好可怜。。
不过已经很谢谢帮忙。。
HongBJ2005 2005-01-06
  • 打赏
  • 举报
回复
up
孟子E章 2005-01-06
  • 打赏
  • 举报
回复
看看这个,不知道能否有用

http://msdn.microsoft.com/library/cht/default.asp?url=/library/CHT/cpguide/html/cpconbubblingcommandevent.asp

ms-help://MS.NETFrameworkSDKv1.1.CHS/cpguidenf/html/cpconbubblingcommandevent.htm

62,039

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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