【问题标题】:How to minimize and maximize winform from taskbar?如何最小化和最大化任务栏的winform?
【发布时间】:2014-11-19 21:31:53
【问题描述】:

我有一个 Winforms 应用程序,我可以通过单击窗口右上角的相应按钮来最小化它;然后我可以通过单击此应用程序的任务栏图标来最大化它。

我的问题是,如果窗口最大化,当我再次点击任务栏图标时它应该最小化,而目前没有发生。

我怎样才能使这种行为发生?我不想使用 NotifyIcon 或系统托盘。

【问题讨论】:

  • 什么?你说你可以做这些事情,但你想要代码来做吗?这个问题非常不清楚,没有研究,而且过于广泛。
  • @paqo 我认为你对这个问题非常苛刻。意图本身很明确:从应用程序的任务栏选项卡执行最小化和最大化。这项研究虽然没有明确指出,但在这里:他谈到了 NotifyIcon 和系统托盘。
  • 我的意思是说我只能从任务栏最大化窗口窗体,然后在窗口窗体上单击最小化按钮。之后我无法从任务栏中最小化它。我可以从 Windows 窗体按钮单击而不是从任务栏最小化它
  • 我用VS2013创建了最小的WinForms应用,在Win81下任务栏右键上下文菜单不包括Minimise、Maximize或Restore,但是点击任务栏图标按预期执行这些动作(restore当前最小化时,否则最小化)。在您自己的系统上,执行此实验以确定测试环境是否存在异常,或者您是否在应用程序中搞砸了。

标签: c# winforms .net-4.0 taskbar


【解决方案1】:
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;
    }
}

【讨论】:

    【解决方案2】:

    你也可以做到没有边界.. 需要额外的编码

    【讨论】:

      【解决方案3】:

      尝试检查LocationChangedMoveRegionChangedResizeResizeBeginResizeEndSizeChanged 事件中发生了什么。可能是这些事件中的某些代码阻止了您描述的行为。

      我没有在新的空表单上看到所描述的问题。

      更新:我使用的是 Window 7 Pro。

      【讨论】:

      • 我认为这是由于 FormBorderStyle=None。当我将其设置为“FixedSingle”时,它会提供所需的行为。现在一切正常
      • 如何使用 FormBorderStyle=None 实现相同的行为?有没有办法做到这一点?
      • 似乎没有简单的方法可以做到这一点。我看到了两种方法: 1)使用 FixedSingle 并绘制标题和边框,使其看起来好像没有。 2) 让你的表单没有任务栏按钮,并有一个不可见的表单任务栏按钮,让两者以某种方式交流。
      猜你喜欢
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 2011-09-09
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多