【问题标题】:Strange TaskBar Behaviour with MDI WinForm AppMDI WinForm 应用程序的奇怪任务栏行为
【发布时间】:2012-03-30 10:22:27
【问题描述】:

所有,我已经完成了 MDI WinForm 应用程序的一半,并且已经开始在几台不同的机器上测试我们迄今为止所拥有的东西,我在所有机器上都发现了以下错误(运行 Windows 7/Vista)。该错误与 TaskBar 和其中应用程序的可见活动状态有关。使用图像会更容易:

A.我将鼠标悬停在准备启动的任务栏上。

B.我点击应用程序,它启动没有问题并显示在任务栏中 - 到目前为止一切都很好。

C.等待大约 3 秒钟,图标会逐渐消失到不活动状态,这样当我点击它时,它会启动我的应用程序的另一个实例,而不是恢复我刚刚打开的那个!?一旦我点击表单并最小化然后恢复表单,这个问题就消失了!?

这很奇怪,我不知道如何解决它。这也体现在使用 .exe 文件启动应用程序时,在您单击应用程序主窗体之前,任务栏根本不会显示。我真的很难过。如果有人对这里可能发生的事情有任何想法,那将不胜感激?感谢您的宝贵时间。

注意。我已将问题缩小到在其他开放表单后面启动的表单。我在Shown 事件等形式中使用了相关选项this.TopLevel = true;,但似乎没有任何效果......

【问题讨论】:

    标签: c# winforms mdi taskbar mdiparent


    【解决方案1】:

    我看到了一个类似的问题,即应用程序在首次启动时不会获得焦点,并且在您单击它以激活主窗体之前不会显示在 Windows 7 任务栏中。

    我一直无法找到真正的原因,但是将表单的 Text 属性的设置从 OnLoad 覆盖移动到构造函数使问题消失了。很奇怪,我仍然不知道为什么会这样。

    不确定这是否适用于您,但我很想知道您是否也在构造函数之外设置 Text。

    【讨论】:

    • 感谢您的帖子。我仍在开发中,并希望有人会有一套解决方案,这将是一个已知问题。情况可能并非如此!当我放慢开发速度时,我将开始一些详细的测试,其中将包含您上面的建议。感谢您的宝贵时间,我会及时通知您....
    • 我在 LOAd 事件中做的一个是加载 MDI 孩子,我会测试这个的意义并让你知道......
    【解决方案2】:

    全部,

    通过添加解决了这个问题

    this.Activate();
    

    在主窗体(MDI 父窗体)Shown 事件的 finally 块中。

    感谢您的时间和帮助。

    【讨论】:

    • 嗯,这是一种解决方法,而不是解决方案。你需要担心这一点,当你必须编写这样的代码时,还有其他事情可能会出错。首先对 Windows + L 键(锁定工作站)进行大量测试,并确保您的 UI 不会死锁。如果这是原因,请使用 .NET 中对启动画面的内置支持。
    • @HansPassant 感谢您的建议。我不确定现阶段可能出现什么问题。我现在已经开发了许多 MDI 应用程序,但从未遇到过这种行为。我会注意上述建议。如果“Windows + L”没有引起任何问题,是否可以安全地假设我已经走出困境?我正在使用自己的 Splash-Screen,但我之前使用过该方法,没有任何副作用。再次感谢您的评论,非常感谢...
    • “我正在使用我自己的启动画面”是我的猜测。这是一个非常强烈的暗示,表明你正在解决一个真正的问题。
    • 我开发了一个启动屏幕,它可以与其他应用程序一起正常工作,因此没有迹象表明这是导致此问题的原因。我会删除它,看看会发生什么......
    • @HansPassant 只是为了让您知道(如果您有兴趣)。我从上面删除了Activte() 关键字,期望问题会再次出现,但它没有!?我已经在其他机器上检查过这个(在我输入 Activate() 关键字之前有问题),这些现在也可以工作了!?我已经删除了启动画面,它没有任何区别(这个测试现在显然是多余的)。在我看来,背后的代码(图形内容)可能包含一个错误,该错误通过包含 Activate() 关键字来修复(永久)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    相关资源
    最近更新 更多