Reputation: 2702
I found a possible solution for creating a Wizard-like (next/previous) Form, in this answer: Creating Wizards for Windows Forms in C#
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);
}
}
The solution allows me to create Tabs in Designer, and hide them at Runtime. I tried to translate this to VB.NET, and worked with:
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
The only part that I didn't translate (but still works) is the m.Result = (IntPtr)1;
from the C# code. As you can see, I tried with m.Result = IntPtr.Zero
For the moment I don't know what will happen if I leave it like that.
Upvotes: 0
Views: 200
Reputation: 5235
Combining your answer with @Usman's yields the following. To get 1 as an IntPtr, I used the new IntPtr(1)
syntax which should work. Alternatively CType(1, IntPtr)
should also work. I have not tested either, however.
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 = &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
Upvotes: 2