簡體   English   中英

將VB.NET Web窗體轉換為C#並連接事件

[英]Converting VB.NET Web Form to C# and wiring up events

在我的VB.NET網頁中,我有此標准事件。 注意事件聲明中的“句柄”子句。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub

在我的C#網絡應用中,我有以下內容:

protected void Page_Load(object sender, System.EventArgs e)
{

由於C#沒有等效的“句柄”,並且從我所看到的來看,事件處理程序使用委托+ =語法進行了連接,因此我一直在尋找它,但無法在aspx頁面aspx.cs中找到它。文件或aspx.designer.cs文件。

在VB中,我將在“代碼編輯器”窗口的頂部有兩個下拉列表,並且可以選擇Web窗體上的任何對象或Web窗體本身,然后查看該對象的可能事件。 選擇事件將帶我進入事件處理程序,或者如果事件不存在,它將為我創建存根。

我知道C#(在VB中也是如此)的“屬性”窗口具有一個“事件”選項卡,其中顯示了所選對象GUI對象的事件列表,但是“頁面”並未顯示為可以選擇的對象。

  1. C#在哪里定義事件與處理程序的連接?

  2. 如何為Page事件處理程序例程生成存根? 我知道默認情況下會出現該句柄,但是如果刪除了該句柄或者我想添加Page_initialize代碼怎么辦? 是否有一種簡單的方法來獲取存根,還是需要進入對象瀏覽器獲取語法?

C#在哪里定義事件與處理程序的連接?

Page_Load是一個自動掛接的特殊事件。 這是保留名稱。 因此,您無需為連接此事件做任何事情。 只需在后面的代碼中聲明即可。

在C#Web窗體中,后面的標記代碼上的@Page指令AutoEventWireup屬性默認為true,而不是VB的false。 要查看@Page指令及其所有相關屬性,請在解決方案資源管理器中右鍵單擊您的網頁,然后選擇“查看標記”

使用AutoEventWireup = true時,運行時將自動連接它在代碼中找到的與Page_ EventName命名約定形式匹配的事件處理程序。 但是,您可以關閉此功能,並使用標准C#+ =分配手動連接頁面事件處理程序。 如果使用AutoEventWireup = true,則不僅方法名稱必須匹配,而且顯然還必須具有適當的方法簽名,以便在運行時自動連接。

請參見此KB,以獲取有關AutoEventWireup的良好討論: http : //support.microsoft.com/kb/324151

關於您的第二個問題,在C#中無法像在VB中那樣為頁面事件生成“存根”。 正如其他人指出的那樣,包括您自己在內-C#中具有類似的功能,可通過屬性窗口生成控制對象事件存根。 但是,對於頁面事件,您必須知道事件名稱和適當的簽名並自己編寫代碼。

namespace MyNamespace
{
    public class Myclass : System.Web.UI.Page
    {
        override protected void OnInit(EventArgs e)
        {
            this.Load += new System.EventHandler(this.Page_Load);
        }

        private void Page_Load(object sender, EventArgs e)
        {
        }
    }
}

參考: https : //support.microsoft.com/zh-cn/help/324151/how-to-use-the-autoeventwireup-attribute-in-an-asp-net-web-form-b​​y-usi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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