2011-03-03 25 views
4

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

我试过下面的代码..在我的表单中添加它。

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

你已经覆盖'CreateParams'包括各种风格的标志已经由.NET Framework暴露。绝对没有理由必须首先使用这样的代码。我也不明白你的意思是“从任务栏最小化表单”。当应用程序打开时,点击任务栏中的图标,它会最小化。很简单,不需要代码。 Windows本身就支持这一点。除此之外,我可以保证你所显示的代码不会*创建你的应用程序的两个实例。还有其他的错误,但是你没有给我们足够的信息。 – 2011-03-03 12:22:34

+2

事情是当你设置formborderstyle = none然后在运行时,你不能最小化应用程序从任务栏...自己尝试.. – 2011-03-03 12:24:52

+0

,并且这两个实例问题只是由于上面的代码,我可以保证,因为当我运行应用程序注释上面的代码,它工作正常。伙计plz帮助.. – 2011-03-03 12:26:49

回答

12

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

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

但有一种方法可以简化您的代码。你可能应该使用现有的样式标志来对正在添加的样式标志进行或运算,而不是替换现有的标志。这种替换代码:

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

如果不解决您的问题(我很怀疑它会),那么我怀疑,还有别的错误在你的代码,你有没有显示我们。只是因为你可以注释掉几行代码,并且程序按预期工作,不会必然意味着问题在于这些代码行。他们可能是完全正确的,但会干扰您在别处使用的黑客行为。

+0

感谢代码灰色!你的代码对我来说工作正常......应用程序的两个实例没有问题。它真的帮了我很多! – 2011-03-03 13:10:20

+0

令人惊讶的是,我本可以发布*该解决方案仍然坐在我的Mac前面。我启动了我的电脑,看是否可以重现您在问题中使用代码描述的行为。很高兴听到它解决了你的问题,但。 – 2011-03-03 13:12:01

+0

我有与网络框架3.5和边框=无相同的问题。我打算反映一下,但是首先决定进行网络搜索。这很好。 – nate 2012-04-10 14:41:29

相关问题