.Net中的奇怪WndProc错误。VB.Net更具体

Jul*_*les 2 .net c# vb.net wndproc

预计到达时间:我使用Visual Studio 2008 Express Edition。

如果我重写WndProc并以某种方式搞乱了,我通常会通过注释掉代码直到它再次起作用来回溯。

WndProc的奇怪之处在于您可以将其简化为:

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    MyBase.WndProc((m))
End Sub
Run Code Online (Sandbox Code Playgroud)

仍然会引发错误。

我必须删除代码并重新输入以重置错误。

还有其他人经历过吗?

预计到达时间:

克里斯·哈斯(Chris Haas)在下面回答。

我还没有意识到,但是只有当我使用了反射器的代码时,才会出现此问题。Reflector错误地转换为vb.net,并在对WndProc base的调用中插入了多余的括号。

Chr*_*aas 5

将参数包装在括号中时,您将覆盖该ByRef调用,而不是调用它ByVal。请参见参数未被过程调用修改-基础变量

只需将代码更改为:

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    MyBase.WndProc(m)
End Sub
Run Code Online (Sandbox Code Playgroud)