C# 展开和折叠winform
我试图做的是扩展和折叠winform的中间部分。我知道这里也有类似的问题,但没有一个能真正满足我的需要。我读过关于使用C# 展开和折叠winform,c#,winforms,C#,Winforms,我试图做的是扩展和折叠winform的中间部分。我知道这里也有类似的问题,但没有一个能真正满足我的需要。我读过关于使用FlowLayoutPanel的文章,但我无法让它工作 我想要实现的一个例子是: 我有我的winform(示例) 当我点击 ButoNo1/时,应将文本框隐藏在中间,缩小窗体以隐藏空间,反之,单击“代码>按钮2 ”。无论哪种方式,按钮3都应保留在文本框显示或未显示的下方 到目前为止,我的尝试要么只是隐藏文本框,对表单不做任何处理,要么缩小了很多。我目前一直在将AutoSize设
FlowLayoutPanel
的文章,但我无法让它工作
我想要实现的一个例子是:
我有我的winform(示例)
当我点击<代码> ButoNo1/<代码>时,应将文本框隐藏在中间,缩小窗体以隐藏空间,反之,单击“代码>按钮2 ”。无论哪种方式,
按钮3
都应保留在文本框显示或未显示的下方
到目前为止,我的尝试要么只是隐藏文本框,对表单不做任何处理,要么缩小了很多。我目前一直在将AutoSize
设置为true
和AutoSizeMode
设置为growtandshrink
我见过可以这样做或类似的控件,但它们有箭头或小按钮来扩展表单,我只需要按钮就可以了
有没有一个简单的方法可以做到这一点
谢谢你的帮助
更新
我曾尝试将高度设置为0,并按照建议隐藏文本框,但它只是折叠表单的右侧,而不是中间
隐藏控件并相应地设置Height属性。这必须使用面板和停靠来完成。使用“自动调整大小”是错误的做法。您需要将表单的原始高度存储在一个变量中,以便以后再次展开表单时可以将其还原。此外,如果将Button3锚定到底部,则在调整大小期间不必处理它:
public partial class Form1 : Form {
private int originalHeight;
public Form1() {
InitializeComponent();
button3.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;
}
protected override void OnLoad(EventArgs e) {
originalHeight = this.Height;
base.OnLoad(e);
}
private void button1_Click(object sender, EventArgs e) {
textBox1.Visible = false;
this.Height = originalHeight - textBox1.Height;
}
private void button2_Click(object sender, EventArgs e) {
this.Height = originalHeight;
textBox1.Visible = true;
}
}
保留AutoSize=false代码>在表单上,因为您正在自己调整大小
我会考虑使用一个按钮来处理窗体的切换,因为Butn2在窗体展开时是相当无用的,反之亦然,如果窗体崩溃,Butn1就没用了。
我知道,我迟到了,但是因为我刚刚解决了同一个问题,所以我想给你我的解决方案:
正如您已经提到的,您可以使用FlowLayoutPanel
来完成这项工作。把它放到你的表格里。将FlowDirection设置为自上而下,并按正确顺序添加按钮和文本框。
完成后,将表单和FlowLayoutPanel的AutoSize
设置为true,并将AutoSizeMode
设置为GrowtandShrink
防止打开自动调整大小时宽度折叠
您的问题是,如果您将AutoSize设置为true并禁用/隐藏文本框,则宽度将减小。之所以会出现这种情况,是因为文本框是窗体上最宽的控件,如果它是隐藏的,则宽度将减小到其余控件所需的宽度。为了防止这种情况发生,只需将按钮放入与文本框宽度相同的面板控件中。
现在,如果文本框被隐藏,宽度将保持为所需的宽度
使用复选框展开/折叠
我喜欢使用复选框来展开/折叠,而不是使用两个按钮。调整大小的整个编码将减少为在文本框的可见性属性中添加一个复选框1的绑定行。选中的属性:
textbox1.DataBindings.Add(“可见”,复选框1,“选中”)
是否将“高度”属性设置为0并将其隐藏?使用已知的高度从放置第三个按钮的y坐标中减去,并从表单y大小中减去文本框的高度,以相应地缩小。当你想展示itI的时候,把它们加回去。我最近写了类似的东西,在网上已经找到了几个例子。看看或举个例子。还有很多第三方控件可以做到这一点;DevExpress有一个可折叠的面板控件。您可以从按钮模拟面板标题的单击事件(而不显示面板标题!),这太棒了正是我想要的。我会按照你的建议切换1个按钮,这会更好,非常感谢!虽然这种方法有效,但我相信这是一种实现你想要的东西的可怕方式。布局上的任何更改都需要大量的代码更改,并引入其他无用的变量。(不是说这不是你问题的答案:这是……这只是一种非常糟糕的做法)