繁体   English   中英

如何从任务栏最小化表单?

[英]How to minimize form from taskbar?

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

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

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

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

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

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

但是有一种方法可以简化您的代码。 并且您可能应该将要添加的样式标志与现有样式标志进行 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;
    }
}

如果这不能解决您的问题(我怀疑它会解决),那么正如我怀疑的那样,您的代码中还有其他错误,您没有向我们展示 仅仅因为您可以注释掉几行代码并且您的程序按预期工作并不一定意味着问题出在这些代码行中。 它们可以是完全正确的,但会干扰您在其他地方使用的 hack。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM