【问题标题】:Alt + Tab is not showing the forms when Form.Owner is set设置 Form.Owner 时,Alt + Tab 不显示表单
【发布时间】:2016-01-09 10:18:34
【问题描述】:

我有一个名为 MainForm 的应用程序 (VB.NET) 和其他子窗体,但没有使用 MDI 容器。子表单基于分配给 MainForm 与 Me.Owner = MainForm

当我按 Alt + Tab 在这些表单之间切换时,Windows 仅显示 MainForm,除非我删除 Me.Owner = Nothing 它再次按预期工作。

我在 Onload 功能上尝试了Call SetWindowLong,但运气不佳。我仍在寻找解决方案。

编辑

其实很容易复制,我创建的项目很简单。

Simple Application

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

禁用 Owner 属性再次正常工作。

请查看我的teamview recording。其实它是原始形式,没有任何改变。

@Royce 您的解决方案仍然无法正常工作,它从我这边抛出 Win32Exception。

【问题讨论】:

  • 只是为了澄清,我相信 op 的意思是,如果所有者设置在无模式对话。我可以确认确实如此,并在这里提出了类似的问题:stackoverflow.com/questions/54854317/…

标签: vb.net winforms


【解决方案1】:

尝试将ShowInTaskbar 属性更改为True

【讨论】:

  • 其实已经设置好了。在任务栏中,我还看到了所有表单。
【解决方案2】:

在我的机器 (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

【讨论】:

  • 感谢您的解决方案,它没有解决我的问题。我正在使用 Windows 8 64 位。我的客户正在使用 Windows 7、8 仍然面临这个问题。我添加了录音。
  • 对不起,它应该是“和”而不是“或”。它现在对你有用吗?此外,我尝试在 Windows 8 兼容模式下运行您的示例,但我仍然能够看到这两种形式,所以如果这不起作用,我完全不知道如何让它为您工作。我建议你在另一台电脑上试试你的例子,看看它是否在那里工作。
  • 是的,我尝试使用 Windows 10,它按预期工作。我不知道为什么它对我和客户不起作用。我尝试了你所有的解决方案。这可能是 Windows 错误吗?
  • 可能不会,但我无法确定,因为我无法重现您的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
相关资源
最近更新 更多