[英]VB to C# - auto naming of event handlers vs explicit wiring
很抱歉,如果這是重復的; 我已經廣泛搜索了基本解釋。
TL; DR-我已經知道如何連接事件,我的問題與支持信息和事件處理程序命名約定有關 ,我找不到答案。 我已經在這里 , 這里 , 這里 , 這里和這里閱讀了 ,我認為信息過載使我感到困惑,或者我忽略了顯而易見的信息。
我有一個龐大的Web窗體(VB)解決方案,需要從某些Web Forms Server Control項目開始轉換為C#。 在每個內部,VB使用Handles
單詞來連接事件處理程序:
Public Class Accordion
Inherits CompositeControl
Private Sub Accordion_Init(sender As Object, e As System.EventArgs) Handles Me.Init
End Sub
Private Sub AccordionPanelHolder_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Private Sub AccordionPanelHolder_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
End Sub
End Class
使用任何類型的代碼轉換器時,根據我的研究,C#方法意味着手動連接事件處理程序(為簡潔起見,代碼已縮短):
public Accordion()
{
PreRender += AccordionPanelHolder_PreRender;
Load += AccordionPanelHolder_Load;
Init += Accordion_Init;
}
private void AccordionPanelHolder_PreRender(object sender, System.EventArgs e)
{
// ...
}
我對上述內容感到滿意,但是,如果我在VS中創建新的Web表單,則默認代碼就是這樣:
public partial class TestPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// to do
}
}
該頁面中沒有事件邏輯處理程序邏輯。 我看到AutoEventWireUp="True"
,通常我將其設為False
。 因此,我的問題是:
AutoEventWireUp="False"
,我是否必須手動連接每個事件(我希望如此,這是一件好事[我認為...])? 當AutoEventWireUp
為true時,將尋找以下方法:
- Page_PreInit
- Page_Init
- Page_InitComplete
- Page_PreLoad
- 的Page_Load
- Page_LoadComplete
- Page_DataBind
- Page_SaveStateComplete
- Page_PreRender
- Page_PreRenderComplete
- 激發Page_Unload
- Page_Error事件
- Page_AbortTransaction
- Page_CommitTransaction
因此,方法必須使用這個確切的名稱。
如果將AutoEventWireUp
設置為false,則必須手動添加任何此類事件的處理程序。
您可以在這里查看更多信息。
不能完全確定這是否是正確的答案,但您應該將其視為從需要的時候開始關聯事件。 如果這是從創建類開始的,則可以在構造函數中或在asp.net中的Page_Load委托中添加鈎子。
像這樣
void Page_Load(object sender, EventArgs e)
{
PreRender += AccordionPanelHolder_PreRender;
Load += AccordionPanelHolder_Load;
Init += Accordion_Init;
}
但是很久以前,我正在使用Web Forms,所以也許有些事情我忘記了,但這與我在常規C#應用程序中的處理方式類似。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.