c# - 自动调整面板上呈现的多个表单的大小

标签 c# winforms

我有这个带有面板的表格。该表格包含三个面板。
一个面板是可折叠的,充当侧边栏,另一个面板位于顶部,用于显示标题,最后一个面板是通过单击面板一中提供的项目之一打开的表单的占位符。

现在我想做的是根据面板一的状态调整(增大和缩小)占位符面板和在面板上打开的表单的大小(仅宽度),面板一可以展开或折叠。扩展坞无法工作。

enter image description here

最佳答案

经过一些澄清后,所描述的表单的所需布局和行为似乎与此示例配置类似:

一个WinForms Form 嵌入另一个 Form ,并放置在 Panel 内.
这位客人Form被剥夺了其 TopLevel徽章和中央面板的父级,如下图示例所示:

enter image description here

如何对接这些 Panels获取此布局:

绿色面板位于表单顶部。
深灰色面板位于表单的左侧。
灰色面板占据剩余空间。

  • 在表单容器上插入三个面板。
  • 绿色小组需要保持其地位,永远不会改变:
    • 右键单击 → SendToBack (!important :)。
    • 停靠→顶部。
  • 深灰色面板位于绿色面板下方、表单左侧。它需要在需要时调整自身大小,但永远不会覆盖绿色面板:
    • 停靠→左
  • 灰色面板需要占用剩余空间。它需要在需要时调整自身大小,但永远不会覆盖绿色面板或深灰色面板:
    • 右键单击 → BringToFront ( !important )
    • 码头 → 中心

对接时的最高优先级被分配给堆栈中 z 顺序最低的元素:此处为绿色面板。 最低优先级分配给具有最高 z 顺序的元素:灰色面板,然后它将在具有较高优先级(遵循 z 顺序)的所有其他元素中收缩和拉伸(stretch)

如何嵌入表单:

简单的部分。它是我们项目中的一个表单,无需执行任何魔法即可在重新设置父级时使其保持事件状态:
(这仅适用于 1 个表单。对于更多表单,您将需要类似 List<Control> 的内容:

//Define here the Form which will be embedded
[Your Form Class] EmbeddedForm;

private void button1_Click(object sender, EventArgs e)
{
    EmbeddedForm = new [Your Form Class]() {
        TopLevel = false,
        Parent = panContainer,
        Location = new Point(4, 4),
        Enabled = true
    };
    EmbeddedForm.Show();
}

private void buttonShrink_Click(object sender, EventArgs e)
{
    //Maybe insert a classic dotted mini-button to re-inflate the sidebar when needed
    panelSideBar.Width = 6;
}

private void panelContainer_Resize(object sender, EventArgs e)
{
    Rectangle rect = panelContainer.ClientRectangle;
    rect.Inflate(-3, -3);
    EmbeddedForm.Size = rect.Size;
}

如果您允许容器面板 AutoScroll其内容为 Resize事件不是必需的。

编辑:
示例图形中 Form 的完整源代码的 PasteBin: Embedded Forms

关于c# - 自动调整面板上呈现的多个表单的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51471230/

相关文章:

c# - Word-Wrap 上的 Fire 事件

c# - 由于异步回调,在(不存在的)文本框中附加文本时出错

winforms - 中心文本对齐标签

C# - 在 ListBox 中选择多个项目并在 Windows 窗体中转换为逗号分隔的字符串

c# - 获取 radioGroup 中选定的 RadioButton 的索引

c# - 在 finally block 中尝试

c# - New Relic .NET 代理如何工作?

c# - 将 asp net 5 从 beta 升级到 beta 5 后,似乎无法构建类库项目

c# - 获取已安装程序的名称、版本和安装日期 WMI C#

c# - 带有文本按钮的 WinForms 消息框