在我的应用程序中,我有主表单和子表单.我想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)
这是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)
或者只是在设计表单时在"属性"窗口中设置属性.
归档时间: |
|
查看次数: |
1678 次 |
最近记录: |