在我的应用程序中,我有主表单和子表单。我想为子表单设置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
答案 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
或者只是在设计表单时在“属性”窗口中设置属性。