【问题标题】:How to minimize form from taskbar?如何最小化任务栏的表单?
【发布时间】:2011-03-03 12:17:03
【问题描述】:

我已经开发了 winform 应用程序并且我设置了 formborderstyle=none。这就是为什么当我运行应用程序时,我无法通过任务栏将其最小化。有没有人知道解决方案?

我尝试了以下代码.. 将其添加到我的表单中。

    const int WS_CLIPCHILDREN = 0x2000000;
    const int WS_MINIMIZEBOX = 0x20000;
    const int WS_MAXIMIZEBOX = 0x10000;
    const int WS_SYSMENU = 0x80000;
    const int CS_DBLCLKS = 0x8;
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.Style = WS_CLIPCHILDREN | WS_MINIMIZEBOX | WS_SYSMENU;
            cp.ClassStyle = CS_DBLCLKS;
            return cp;
        }
    }

我现在可以从任务栏最小化应用程序。但问题是它正在为我的应用程序创建两个实例,一个是我需要的,另一个是不必要的。

有没有人知道这个问题的解决方案.. 或者有没有人有其他可行的解决方案?

【问题讨论】:

  • 您已覆盖 CreateParams 以包含的每个样式标志都已被 .NET Framework 公开。绝对没有理由一开始就必须使用这样的代码。我也不明白“从任务栏最小化表单”是什么意思。打开应用程序后,单击任务栏中的图标,它将最小化。很简单,不需要代码。 Windows 本机支持这一点。除此之外,我可以保证您显示的代码将不会创建您的应用程序的两个实例。还有其他问题,但您没有向我们提供足够的信息。
  • 问题是当你设置 formborderstyle=none 然后在运行时你不能从任务栏最小化应用程序......你自己试试吧..
  • 并且这两个实例的问题只是因为上面的代码,我可以保证,因为当我运行应用程序来评论上面的代码时它工作正常。伙计们请帮助..
  • 是的,你是对的。我错过了您说您正在禁用表单边框的部分。您想要最小化没有边框的表单似乎不合逻辑。不会改变我无法重现您描述的行为的事实。当用户单击任务栏中的图标时,表单不只是决定实例化自己的另一个实例。您有一些代码负责执行此操作。把它拿出来,你的问题就解决了。

标签: c# winforms


【解决方案1】:

无边框表单应该始终是用户不希望最小化的表单。可发现性原则在这里开始应用:大多数用户不知道您可以通过单击窗口的任务栏图标来最小化窗口。他们希望能够通过点击大红色 x 旁边的 按钮来实现。

正确的解决方案是为表单选择不同的边框样式,包括标题栏和最小化框。 Windows 将自动按预期运行。当您遵循平台的标准约定时,事情会容易得多,不仅对您作为程序员,对您的用户也是如此。它还修复了创建或恢复表单时令人讨厌的闪烁效果,我可以在几秒钟内看到标准标题栏。

当然,无论如何你都不可避免地想要这样做,所以尽管我的判断力更好,我还是会尝试提供一个解决方案。第一个问题是我无法重现您描述的行为(Windows Server 2008 R2、.NET 4.0)。将显示的代码准确添加到新的 WinForms 项目中,并将表单的 FormBorderStyle 属性设置为“无”,我无法让两个窗口显示出来。单击任务栏图标会使表单最小化,再次单击它会恢复它。

但是有一种方法可以简化您的代码。而且您可能应该使用现有的样式标志对您添加的样式标志进行 OR-ing,而不是替换现有的标志。用这个替换你的代码:

const int WS_MINIMIZEBOX = 0x20000;
const int CS_DBLCLKS = 0x8;
protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.Style |= WS_MINIMIZEBOX;
        cp.ClassStyle |= CS_DBLCLKS;
        return cp;
    }
}

如果这不能解决您的问题(我对此表示怀疑),那么正如我所怀疑的那样,您的代码中还有其他问题,您没有向我们展示。仅仅因为您可以注释掉几行代码并且您的程序按预期工作并不必然暗示问题出在这些代码行中。它们可能是完全正确的,但会干扰您在其他地方使用过的技巧。

【讨论】:

  • 感谢 Code Gray !!!您的代码对我来说很好......应用程序的两个实例没有问题。真的帮了我很多!!!
  • 我在 net framework 3.5 和 borderstyle=none 上遇到了同样的问题。我打算反映它,但决定先进行网络搜索。这效果很好。
猜你喜欢
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多