Winforms - 如何在设计器中显示/隐藏元素?

Posted

技术标签:

【中文标题】Winforms - 如何在设计器中显示/隐藏元素?【英文标题】:Winforms - how to show/hide elements in designer? 【发布时间】:2012-04-17 10:13:55 【问题描述】:

我正在尝试使用 winforms 制作多页应用程序。我决定使用多个面板 - 每个面板代表不同的页面,所以当我需要显示不同的内容时,我可以在它们之间切换。

我的问题是关于在设计器视图中堆叠面板。当我有 2 个以上的全屏面板时,它们都相互堆叠,我看不到我之前创建的那个。有什么解决办法吗?更改可见性不会影响设计人员的视图。将其视为显示/隐藏图层的类似 Photoshop 的选项。我正在使用 Visual C# 2010 Express。

【问题讨论】:

如果你想选择另一个Panel,你可以从下拉列表中选择它。另一种解决方案是使它们更小或将它们移动到某个地方并根据需要以编程方式调整它们的大小和位置,或者考虑使用TabControl 控件。 【参考方案1】:

这里有几个选项:

    使用Document Outline 视图(View --> Other Windows --> Document Outline) 选择您关心的面板。您可以右键单击它并选择 Bring to Front 将其放在其他所有内容的前面。 虽然它可能与您正在做的事情无关,但您可以考虑使用TabControl,您可以在设计时直观地处理它。如果您希望您的用户能够手动更改他们正在查看的面板,这只是一个合理的解决方案。 考虑将您的面板移动到自定义UserControl 类中并单独处理它们。如果这些面板的内容和逻辑相当独立,那么您可能还是希望这样做只是为了更好地重构您的代码。

附录:您还可以使用使TabControl 的标签对用户不可见的技巧。在您的表单上放置一个TabControl,并在运行时将ItemSize 高度设置为1。这使得用户(几乎)不可能自己更改选项卡,但仍然允许您更改可见选项卡在设计器中。

myTabControl.ItemSize = new Size(myTabControl.ItemSize.Width, 1);

请注意,我将其称为 hack 是有原因的:TabControls 不应该以这种方式使用。这似乎是可行的,但就像所有黑客一样,它可能随时中断,所以你应该只作为最后的手段(如果它以后引起头痛,不要怪我......)。简而言之,我推荐这种 hack,我只提供它作为一种可能性。

【讨论】:

我决定使用前置/后置选项,因为这是目前最简单的解决方案,而且它不涉及更改我的应用程序结构(选项卡控件)。不幸的是,我找不到 View->other windows->document outline 所以我必须在所有面板上使用 send to back 直到找到我要找的那个。【参考方案2】:

我使用“格式”>“订单”下的“放在前面”或“放在后面”来管理这种场景,但你是对的,可见性只是运行时 (AFAIK),这有点糟糕。

干杯

【讨论】:

【参考方案3】:

我不确定执行此操作的正确方法,但在这些情况下,我自己所做的是使控件非常小,然后在程序运行时,我会在启动时更改它们的大小和位置。

【讨论】:

【参考方案4】:

我在这种情况下使用的一种方法是使用“文档资源管理器”窗口将我正在处理的面板放在前面。

【讨论】:

【参考方案5】:

所以您希望能够在 VS 设计器视图中显示/隐藏您的面板(不仅仅是在实际的可执行文件运行时)正确吗?

this 这样的东西有帮助吗?

如果没有,那么也许您可以尝试创建自定义用户控件而不是面板,这样您就可以根据需要设置可见性属性,或者您可以求助于提供此类功能的 WPF。点击here了解更多信息。

【讨论】:

【参考方案6】:

如果您可以接受,请考虑使用TabControl 控件并将每个Panel 控件放在不同的选项卡中。然后,您可以通过在选项卡之间切换或以编程方式删除并添加适当的选项卡到控件来隐藏和显示正确的页面。

您还可以考虑使用具有不同布局的两个不同窗口并显示它们之间的切换。

如果您使用的面板不止几个,您可以考虑将每个面板放在一个单独的控件中,然后在应用程序的表单中使用这些控件(即在需要时以编程方式添加它们)。这样,您可以单独设计每个控件(因此每个 Panel 的内容),而其他 Panel 不可见。

这些建议中的每一个都会使一些 UI 部分更加分离,如果您拥有的每个布局都与应用程序的一个单独部分相关联,那么这可能是理想的。使用这些建议还可以使使用 deisgner 进行管理变得更加容易。

【讨论】:

【参考方案7】:

试试 this.richTextBox1.Visible = false;在您的 Form1.cs 中(假设您试图隐藏一个默认名称为“richTextBox1”的富文本框)

【讨论】:

以上是关于Winforms - 如何在设计器中显示/隐藏元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在设计器的 WinForms TabControl 中切换选项卡?

在设计器中为 winforms 应用程序打开的表单的运行上下文是啥

在Windows任务管理器中隐藏应用程序的名称[重复]

如何在应用程序设计器中显示星号以供输入?

如何创建悬停的 C# Winforms 控件

如何隐藏winform中报表设计器中的按钮