我有一个名为MainForm的应用程序(VB.NET)和其他子窗体,而不使用MDI Container。子表单基于使用Me.Owner = MainForm
分配给MainForm当我按下Alt + Tab时,为了在这些表格之间切换,Windows只显示MainForm,除非我删除Me.Owner = Nothing它再次按预期工作。
我在Onload函数上尝试了Call SetWindowLong
但没有运气。我仍在寻找解决方案。
修改
实际上它很容易复制,我创建了非常简单的项目。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Form2 As New Form2
Form2.Owner = Me ' Alt+Tab only Show Form1, not showing Form2.
Form2.Show()
End Sub
禁用所有者属性再次正常工作。
请检查我的teamview recording。实际上它是原始形式,没有任何改变。
@Royce你的解决方案仍然无法正常工作,它从我这边抛出Win32Exception。
答案 0 :(得分:0)
尝试将ShowInTaskbar属性更改为True
。
答案 1 :(得分:0)
在我的机器上运行您的示例(Windows 10),两个窗口都显示在我的Alt-Tab菜单中(screenshot)。
在原始程序中,请确保任一窗口的FormBorderStyle
属性未设置为两个ToolWindow
选项之一且ShowInTaskbar
为True。
否则,您可以尝试通过执行与此类似的操作来更改第二个表单的CreateParams以排除WS_EX_TOOLWINDOW扩展样式位:
Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams
cp.ExStyle = cp.ExStyle And (Not &H80)
Return cp
End Get
End Property