2012-11-12 75 views
4

下面的方法是返回一個錯誤:「事件的init無法找到」和System.Web.UI.Page子Page_Init方法:初始化事件無法找到

Visual Studio 2010中,框架3.5

得到錯誤
Public Class_default 
    Inherits System.Web.UI.Page 

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 

End Sub 
+1

該類是否從'System.Web.UI.Page'繼承? –

+0

不,它不 – Susan

+0

然後你有答案。 'MyBase'解決你的基類(如果你沒有一個基類,它就是'Object')。如果該基類沒有這個事件,你會得到這個編譯器錯誤。 http://msdn.microsoft.com/en-us/library/0hds5k93(v=vs.100).aspx –

回答

4

我不是VB.NET專家(我寫在C#),但我可以說,這個問題的原因是,你需要重寫OnInit的方法,而不是Page_Init。

所以,你需要使用下面的代碼:

Public Class _Default 
    Inherits System.Web.UI.Page 

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

    End Sub 

    Protected Friend Overrides Sub OnInit(ByVal e As EventArgs) 
     MyBase.OnInit(e) 
    End Sub 
End Class 
+0

。沒有必要添加覆蓋。 –

1

我覺得美心是正確的,但是你也可以通過執行添加事件處理程序:

AddHandler Me.Init, AddressOf Page_Init 

,我認爲這是正確的,對不起,我的VB很生鏽。

1

好,

我假設你正在使用您的標記AutoEventWireup="true"但你也打上了Handles關鍵字的處理程序。

AutoEventWireup將不起作用,它無法直接訪問您的類的私人成員。

設置AutoEventWireup="false"並保存它的needless performance penalty,處理程序仍然應該啓動,因爲它明確地爲HandlesPage.Init事件。

由於您明確處理事件,因此您也可以自由更改事件處理程序的名稱並刪除醜陋的_

0

大部分Crystal Reports代碼可能出現在Page_Load事件中。如果您將其移至Page_Init,您會發現它可以正常工作。

相關問題