2012-07-08 49 views
1

在我的VB.NET網頁中,我有這個標準事件。請注意事件聲明中的「句柄」子句。將VB.NET Web窗體轉換爲C#並接線事件

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

在我的C#的web應用程序,我有這樣的:

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_initialize代碼?有沒有簡單的方法來獲得存根或我需要去對象瀏覽器的語法?

+1

1. ['PagesSection.AutoEventWireup'](http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.autoeventwireup.aspx )2. [手動](http://stackoverflow.com/questions/1936322/how-to-add-an-event-handler-for-events-from-button-in-c-sharp-from-source-view ) – 2012-07-08 19:26:25

+0

Re:1:有趣。我喜歡明確。回覆:2,我理解這種控制表單的方法,但是如何將這種方法用於表單?例如,是否沒有簡單的方法將預渲染事件處理程序引入到我的表單中?您的評論是目前爲止的最佳答案。 – ChadD 2012-07-08 19:36:56

回答

1

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

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

用於AutoEventWireup商量好了看到這個KB:http://support.microsoft.com/kb/324151

關於你的第二個問題,在C#中有沒有辦法來生成頁面事件「存根」好像有在VB。正如其他人已經注意到的那樣,包括你自己 - 在C#中有類似的功能來通過屬性窗口生成控件對象事件存根。但是,對於頁面事件,您必須知道事件名稱和適當的簽名並自行編碼。

+1

非常清楚和完整的答案,謝謝!我對C#端缺乏工具功能感到有點失望。 – ChadD 2012-07-09 00:58:28

1

哪裏C#定義事件的掛接到處理程序?

Page_Load是自動掛鉤的特殊事件。這是一個保留名稱。所以沒有什麼事情你需要做的事情,以掛鉤。只需在後面的代碼中聲明它。