我的代码是否正确地从C#转换为Vb.Net

本文关键字:转换 Vb Net 代码 是否 正确地 我的 | 更新日期: 2023-09-27 18:27:02

我找到了一个创建类似向导的(下一个/上一个)表单的可能解决方案,在这个答案中:在C#中为Windows窗体创建向导

class WizardPages : TabControl
{
    protected override void WndProc(ref Message m)
    {
        // Hide tabs by trapping the TCM_ADJUSTRECT message
        if (m.Msg == 0x1328 && !DesignMode) m.Result = (IntPtr)1;
        else base.WndProc(ref m);
    }        
    protected override void OnKeyDown(KeyEventArgs ke)
    {
        // Block Ctrl+Tab and Ctrl+Shift+Tab hotkeys
        if (ke.Control && ke.KeyCode == Keys.Tab) 
            return;
        base.OnKeyDown(ke);
    }
}

该解决方案允许我在Designer中创建选项卡,并在运行时隐藏它们。我试着把它翻译成VB.NET,并使用了:

Imports System
Imports System.Windows.Forms
Public Class WizardPages
    Inherits TabControl
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If (m.Msg = 4904 And Not DesignMode) Then '4904 is Dec of 0x1328 Hex
            m.Result = IntPtr.Zero 'IntPtr1
        Else
            MyBase.WndProc(m)
        End If
    End Sub
End Class

我唯一没有翻译(但仍然有效)的部分是C#代码中的m.Result = (IntPtr)1;。正如你所看到的,我尝试了m.Result = IntPtr.Zero

现在我不知道如果我就这样离开会发生什么。

我的代码是否正确地从C#转换为Vb.Net

将您的答案与@Usman的答案结合起来,得到以下结果。为了将1作为IntPtr,我使用了应该有效的new IntPtr(1)语法。或者CType(1, IntPtr)也应该起作用。然而,我也没有进行测试。

进口系统导入System.Windows.Forms

Public Class WizardPages
  Inherits TabControl
  Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    If m.Msg = &H1328 AndAlso Not DesignMode Then
      m.Result = new IntPtr(1)
    Else
      MyBase.WndProc(m)
    End If
  End Sub
  Protected Overrides Sub OnKeyDown(ke As KeyEventArgs)
    ' Block Ctrl+Tab and Ctrl+Shift+Tab hotkeys
    If ke.Control AndAlso ke.KeyCode = Keys.Tab Then Return
    MyBase.OnKeyDown(ke)
  End Sub
End Class