展开并折叠winform

时间:2012-05-10 10:27:44

标签: c# winforms

我想要做的是扩展和折叠我的winform中间。我知道这里有类似的问题,但没有一个真正做我需要的。我已经读过关于使用FlowLayoutPanel的内容,但我无法使用它。

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

我有我的winform(例子)

example

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

我到目前为止的尝试要么只是隐藏文本框而不对表单执行任何操作,要么缩小比它应该多得多的内容。我目前将AutoSize设为true,将AutoSizeMode设为GrowAndShrink

我已经看到可以执行此操作或类似操作的控件但是它们有箭头或小按钮来扩展表单,我只需要按钮就可以执行此操作。

有一种简单的方法吗?

任何帮助表示感谢。

更新

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

Screenshot

4 个答案:

答案 0 :(得分:1)

这必须使用面板和对接来完成。使用AutoSize是错误的方法。

答案 1 :(得分:1)

您需要将表单的原始高度存储在变量中,以便稍后再次展开时可以将其还原。此外,如果您将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就没用了。

答案 2 :(得分:1)

我知道,我迟到了比赛但是因为我刚解决了同样的问题,我想为你提供我的解决方案:

正如您已经提到的,您可以使用FlowLayoutPanel来完成这项工作。把它放到你的表格中。将FlowDirection设置为TopDown,并按正确的顺序添加按钮和文本框。 完成后,将表单的AutoSize和FlowLayoutPanel设置为true,并将AutoSizeMode设置为GrowAndShrink

上自动调整大小时防止宽度崩溃

您的问题是,如果您将AutoSize设置为true并禁用/隐藏文本框,则宽度将会减小。这是因为您的文本框是表单上最宽的控件,如果它被隐藏,宽度将减少到其余控件所需的宽度。要防止这种情况发生,只需将按钮放入与文本框宽度相同的面板控件中即可。 现在,如果您的文本框被隐藏,宽度将保持所需的宽度。

使用复选框展开/折叠

我喜欢使用复选框来展开/折叠,而不是使用两个按钮。调整大小的整个代码将减少为将checkbox1.Checked属性的一个绑定行添加到文本框的Visibility属性中:

  

textbox1.DataBindings.Add(“可见”,复选框1,“已检查”)

答案 3 :(得分:0)

隐藏控件并相应地设置Height属性。