2010-04-21 76 views
2

ETA:我使用Visual Studio 2008快速版。.NET中的奇怪的WndProc錯誤。 VB.Net更具體地說

如果我重寫WndProc並以某種方式搞砸了,我通常會註釋掉代碼,直到它再次運行。

用的WndProc奇怪的是,雖然你可以剝奪它歸結爲:

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
    MyBase.WndProc((m)) 
End Sub 

,它仍然拋出的錯誤。

我必須刪除代碼並重新輸入以重置錯誤。

其他人都遇到過嗎?

ETA:

由Chris Haas回答下面。

我沒有意識到,但是這個問題只有在我使用反射器代碼時纔會發生。 Reflector錯誤地轉換爲vb.net,並在WndProc base的調用中插入額外的括號。

+1

是什麼錯誤? – Andrey 2010-04-21 15:49:02

+0

它的'錯誤創建窗口句柄'在:System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp) – Jules 2010-04-21 15:58:02

+0

它是如此的奇怪。我通過將所有代碼剪切並重新覆蓋來實現它。然後我將代碼一點一點地粘貼起來,並繼續測試以確保它沒問題。最終,我結束了所有的代碼,它的工作。然後我試着在那裏複製和粘貼整塊代碼......它不起作用! – Jules 2010-04-21 16:04:31

回答

4

當您將參數包裝在括號中時,您將覆蓋ByRef調用,而不是將其稱爲ByVal。見Argument Not Being Modified by Procedure Call - Underlying Variable

只需將代碼更改爲:

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
    MyBase.WndProc(m) 
End Sub 
+0

乾杯,看起來就是這樣。我開始的代碼是反射器,它錯誤地轉換爲vb.net,並在不應該在那裏時插入括號。謎團已揭開! – Jules 2010-04-21 18:16:54