当ShowinTaskBar为false时,窗口消失

时间:2013-12-07 15:18:12

标签: .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

父(主)表单代码:

 Private Sub إضافةبائعجديدToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles إضافةبائعجديدToolStripMenuItem.Click
        Form1.ShowDialog()


    End Sub

1 个答案:

答案 0 :(得分:7)

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

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

您必须确保在 Load事件触发之前将属性设置为。您可以使用表单的构造函数来完成此操作。修正:

Public Sub New()
    InitializeComponent()
    Me.ShowInTaskbar = False
End Sub

或者只是在设计表单时在“属性”窗口中设置属性。