【问题标题】:when ShowinTaskBar is false, the window disappears当 ShowinTaskBar 为 false 时,窗口消失
【发布时间】:2017-02-14 18:23:34
【问题描述】:

在我的应用程序中,我有主窗体和子窗体。我想将子窗体的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

【问题讨论】:

    标签: .net vb.net


    【解决方案1】:

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

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

    您必须确保在触发 Load 事件之前设置该属性。您可以通过使用表单的构造函数来做到这一点。修复:

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

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

    【讨论】:

    • 所以没有办法有条件地做到这一点?我也遇到了这个问题。涉及 ShowDialog,但我在最小化/正常时切换 ShowInTaskbar。
    猜你喜欢
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多