代码之家  ›  专栏  ›  技术社区  ›  26071986

同时控制多个窗体

  •  0
  • 26071986  · 技术社区  · 16 年前

    假设,我有以下任务。

    有一个主申请表,有许多按钮;当你点击这些按钮时,你会得到一个更多的表单。第二次单击按钮将关闭打开的窗体。

    这些表单不应该显示在任务栏中,因为它们是辅助的。它们不应该是对话框,因为这样会阻止主应用程序窗体,并阻止用户使用主窗口或其他窗体(如打开的窗体)执行其他操作。它们应该显示在主窗体的上方,但不应显示在其他窗口的上方(因此最上面的窗口不适合)。关闭表单时,应通知主表单,最小化主表单时,也应最小化主表单。

    你将如何解决这个问题?

    当前的解决方案基于使用挂钩。它不太容易理解,也很难维护(主要是因为我没有win32方面的经验)。它在90%的情况下都可以正常工作,但在10%的情况下却不行。

    也许,对形式行为的要求是严格的?

    3 回复  |  直到 15 年前
        1
  •  0
  •   Hans Passant    15 年前

    这不是问题。使用Show(Owner)重载显示表单。

    拥有的窗体总是位于其所有者之上。当您最小化主窗口时,它会自动最小化。无需在任务栏中显示。WinForms支持的另一个窗口模型是MDI,请签出MDIParent属性。子窗口被限制在主窗口的边界内。还可以考虑使用用户控件而不是窗体,您可以根据需要交换它们。或者使用TabControl的选项卡式接口。Weifenlo的DockPanel套件是一个非常流行的Visual Studio风格窗口化模型的实现,支持可以在主窗口中停靠和浮动的窗口。这里有很多选择:)

        2
  •  1
  •   Simon D.    15 年前

    我会重新开始使用一些窗口管理器,所以每个按钮都会告诉窗口管理器切换窗体x的可见性,如果x不在那里,它将被显示,如果在那里,它将被关闭。 您应该能够配置窗口,使它们不会显示在任务栏中。 至于能见度,我不确定你的意思。当您通过按钮打开一个表单时,它通常会转到前面,这应该是可以的。如果你打开窗户,你会期待什么?主窗口应该始终保持在背景中,还是在聚焦时允许它出现在前面? 每当我看到应用程序改变这样的标准行为,它们都会以某种方式失败。可能是出现了错误的窗口,或者某些窗口无法再访问,或者用户只是感到困惑,因为这些窗口的行为与所有其他窗口不同。

        3
  •  0
  •   Pop Catalin    15 年前

    以下是如何完成大部分需求:

    • 设置 Owner 将每个子窗体作为主窗体。

    MSDN报价:

    当一个窗体属于另一个窗体时, 它与所有者关闭或隐藏 形式。例如,考虑一个窗体 表单拥有的命名表单2 命名为Frim1。如果Form1关闭或 最小化,Form2也关闭或 隐藏的。拥有的表单也从来没有 显示在其所有者窗体后面。你 可以对Windows使用拥有的窗体,例如 作为查找和替换窗口, 当主人 已选择窗体。以确定 属于父窗体的窗体, 使用OwnedForms属性。

    • 要停止窗体在任务栏中的显示,需要设置 ShowInTaskBar 财产