我有一个有三个面板的表格.我希望前两个是固定的高度,而底部的一个是填充剩下的空间.对话框是可调整大小的,因此所有都应该在resixze上更改宽度,而底部应该更改高度.这很重要,用户必须能够通过代码扩展表单以及程序.
如果我将面板设置为visible = false,我希望窗体高度缩小,以便其他高度保持不变.如果我将面板设置为visible = true,我希望表单高度增加面板的高度.
我将用按钮控制面板的隐藏/显示.我的想法是在我的表单中显示某些"高级"模式的面板,并将它们隐藏为"简单"模式.如果我隐藏一个面板,我不能有一堆空白,我希望表单缩小一堆简单模式.
我尝试使用停靠在顶部的面板进行此操作,但用户调整大小的表单不会更改面板高度.所以这是我要求帮助的主要技巧.
小智 7
在这种情况下,任何人都可以使用以下样式:
使用2-3面板对不同的控件进行分组,并将它们放在单个父控件中,例如GroupBox.
使所有子面板停靠在同一侧说"顶部".
一旦面板不可见,其他面板将带走空的空间.
希望这可以帮助!!!
其他帖子很接近,我提出的解决方案中包含了一个细节遗漏.它是一个标志,用于判断大小的事件是由用户表单调整大小引起的,还是程序在显示或隐藏面板时执行的.
对于此解决方案,请制作包含4个面板的表单.将所有面板的底座设置为顶部.不要为面板或表单设置任何自动调整大小.同时制作两个按钮并放置在顶部面板或任何不会隐藏的面板上.
下面的代码显示了如何处理调整大小的事件以及显示隐藏按钮.我让他们隐藏/显示面板2,但代码应适用于任何面板.
namespace ProgTesting {
public partial class Form5 : Form {
private bool doNothing = false;
public Form5() {
InitializeComponent();
cmdAdvanced.Visible = false;
}
private void cmdSimple_Click(object sender, EventArgs e) {
if (panel2.Visible) {
panel2.Visible = false;
doNothing = true;
this.MinimumSize = new Size(this.Width, this.Height - panel2.Height);
this.Height = this.Height - panel2.Height;
doNothing = false;
cmdSimple.Visible = false;
cmdAdvanced.Visible = true;
}
}
private void cmdAdvanced_Click(object sender, EventArgs e) {
if (!panel2.Visible) {
panel2.Visible = true;
doNothing = true;
this.Height = this.Height + panel2.Height;
this.MinimumSize = new Size(this.Width, this.Height);
doNothing = false;
cmdAdvanced.Visible = false;
cmdSimple.Visible = true;
}
}
private void Form5_SizeChanged(object sender, EventArgs e) {
if (!doNothing)
if (panel2.Visible)
panel3.Height = this.ClientSize.Height - panel1.Height - panel2.Height - panel4.Height;
else
panel3.Height = this.ClientSize.Height - panel1.Height - panel4.Height;
}
}
}
Run Code Online (Sandbox Code Playgroud)
你必须管理正在发生的高度,这是一种痛苦,但让你控制.它的一些镜头工作:

一种方法是对顶部的两个面板使用 TableLayoutPanel。
当用户调整表单大小时,以下步骤将为您提供所需的调整大小。
为了处理 Panel3 的隐藏,需要将一些逻辑添加到相应的 button_Click 事件中。确定您希望“最小化”高度的大小,然后在 Panel3 可见时存储表单大小,并在再次单击时恢复高度。它应该看起来像这样。
private void button1_Click(object sender, EventArgs e)
{
if (panel3.Visible)
{
// make invisible
panel3.Visible = false;
// storedHeight is a private member of the Form
storedHeight = Form1.ActiveForm.Height;
Form1.ActiveForm.Height = minimumHeight; // Set to predetermined minimum height
}
else
{
// make visible
panel3.Visible = true;
Form1.ActiveForm.Height = storedHeight;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当您隐藏 Panel3 时,窗体将缩小到 TLP 的大小,然后当 Panel3 可见时再次增大。此外,顶部面板的宽度会扩大,但高度不会扩大。您将需要更改表单的 MinSize 属性,并且必须根据 Panel3 是否可见来动态调整其值。
| 归档时间: |
|
| 查看次数: |
32541 次 |
| 最近记录: |