如何最小化任务栏中的表单?

时间:2011-03-03 12:17:04

标签: c# winforms

我开发了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;
        }
    }

我现在能够最小化任务栏中的应用程序。但问题是它创建了我的应用程序的两个内容,我需要一个,另一个是不必要的。

有没有人知道这方面的解决方案..还是有人有其他解决方案可行吗?

1 个答案:

答案 0 :(得分:14)

无边界形式应始终是用户不应该最小化的形式。可发现性原则开始适用于此:大多数用户不知道您可以通过单击其任务栏图标来最小化窗口。他们希望能够通过点击红色 旁边的 x 按钮来实现这一目标。 解决方案是为表单选择不同的边框样式,包括标题栏和最小化框。 Windows将自动按预期运行。当您遵循平台的标准惯例时,事情会变得更加容易,不仅是作为程序员,也是为了您的用户 它还修复了创建或恢复表单时令人讨厌的闪烁效果,我可以看到标准标题栏几秒钟。

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

但是有一种简化代码的方法。而且您应该使用现有样式标志对要添加的样式标志进行OR运算,而不是替换现有标志。用以下代码替换您的代码:

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;
    }
}

如果这不能解决您的问题(而且我对此会持怀疑态度),那么正如我所怀疑的那样,您的代码中还有其他错误,而您没有向我们展示。仅仅因为你可以注释掉几行代码而你的程序按预期工作就不会必然暗示问题在于那些代码行。它们可以完全正确,但会干扰您在其他地方使用过的黑客攻击。