c# - 展开和折叠 winform

标签 c# winforms

我想做的是展开和折叠我的 winform 的中间部分。我知道这里有类似的问题,但没有一个能真正满足我的需要。我读过有关使用 FlowLayoutPanel 的信息,但我无法让它工作。

我想要实现的一个例子是:

我有我的 winform(例子)

example

当我单击 button1 时,它应该隐藏中间的文本框并缩小表单以隐藏空间,当我单击 button2 时反之亦然。无论哪种方式,button3 都应保持在显示或未显示文本框的位置下方。

到目前为止,我的尝试要么只是隐藏文本框而不对表单进行任何操作,要么缩小的幅度超出了应有的范围。我目前一直在将 AutoSize 设置为 true 并将 AutoSizeMode 设置为 GrowAndShrink

我见过可以执行此操作或类似操作的控件,但它们有箭头或小按钮来展开表单,我只需要按钮即可执行此操作。

有没有简单的方法来做到这一点?

感谢任何帮助。

更新

我已经尝试将高度设置为 0 并按照建议隐藏文本框,但它只是折叠了表单的右侧而不是中间。

Screenshot

最佳答案

您需要将表格的原始高度存储在一个变量中,以便稍后再次展开时可以恢复它。此外,如果将 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;,因为您要自己处理调整大小。

我会考虑使用一个按钮来处理表单的切换,因为当表单展开时 Button2 毫无用处,反之亦然,如果表单折叠则 Button1 毫无用处。

关于c# - 展开和折叠 winform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10532114/

相关文章:

c# - 如何将程序集添加到来自 nuget 包的 WiX 工具集设置?

c# - 保持 Form 实例打开的任务?

c# - WPF 中的 XAML 是否等同于 Windows 窗体应用程序中的 .Designer.cs?

c# - NAudio Wasapi录音和转换

c# - 最小起订量验证对象参数

c# - 为什么它无法在构建为 dll 文件的 c++ 中全局声明一个类?

c# - foreach 缺少控件,除非嵌套和重复

.net - 是否可以重用.NET WinForms Form对象?

c# - 为什么在检查已上传到youtube处理状态的视频文件时,结果始终为空?

c# - 添加数据库迁移时指定应用程序设置