当ShowinTaskBar为false时,窗口消失

Sou*_*uad 2 .net vb.net

在我的应用程序中,我有主表单和子表单.我想ShowIntaskBar为子窗体设置为false,但问题是当我通过菜单打开它时,它会显示并消失,然后当我再次打开它时,它会变得可见.所以我不想打开它两次才能看到它.如何解决这个问题?

子表单代码:

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        Me.ShowInTaskbar = False


    End Sub
Run Code Online (Sandbox Code Playgroud)

父(主)表单代码:

 Private Sub ?????????????ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ?????????????ToolStripMenuItem.Click
        Form1.ShowDialog()


    End Sub
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 7

这是Winforms中的一个错误.ShowInTaskbar属性非常重要,只能在创建本机窗口时指定.在引擎盖下,它是一个传递给CreateWindowEx() winapi函数的样式标志,必须在第一个参数中使用WS_EX_APPWINDOW样式才能显示任务栏按钮.

问题是,当Load事件触发时,该调用已经完成.CreateWindowEx()调用使得Load事件被触发.所以Winforms必须做一些非常重要的事情,它必须破坏本机窗口并再次重新创建它,现在使用第一个参数的不同值.这通常很好,但有时会出错.在您的情况下,它与ShowDialog()调用的交互非常糟糕.这可确保在对话框窗口关闭或隐藏时自动关闭对话框.它关闭,作为ShowInTaskbar分配的副作用.但当然是出于错误的原因.

您必须确保在Load事件触发之前设置该属性.您可以使用表单的构造函数来完成此操作.固定:

Public Sub New()
    InitializeComponent()
    Me.ShowInTaskbar = False
End Sub
Run Code Online (Sandbox Code Playgroud)

或者只是在设计表单时在"属性"窗口中设置属性.