簡體   English   中英

VB到C#-事件處理程序的自動命名與顯式接線

[英]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 因此,我的問題是:

  1. 根據最后一個示例,C#用於自動綁定事件處理程序的命名約定定義在什么位置/在哪里? 我擔心方法可能會運行兩次。 我看到VS沒有C#的下拉功能來創建空事件處理程序。
  2. 如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM