3

我想做的是扩展和折叠我的winform的中间。我知道这里有类似的问题,但没有一个真正能满足我的需要。我已阅读有关使用 a 的信息FlowLayoutPanel,但无法使其正常工作。

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

我有我的winform(示例)

例子

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

到目前为止,我的尝试要么只是隐藏文本框而不对表单做任何事情,要么比它应该缩小的多得多。我目前一直在设置AutoSizetotrueAutoSizeModeto GrowAndShrink

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

是否有捷径可寻?

任何帮助表示赞赏。

更新

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

截屏

4

4 回答 4

1

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

于 2012-05-10T10:29:27.967 回答
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 相当无用。

于 2012-05-10T12:33:07.090 回答
1

我知道,我迟到了,但由于我刚刚解决了同样的问题,我想为您提供我的解决方案:

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

自动调整大小时防止宽度折叠

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

使用复选框展开/折叠

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

textbox1.DataBindings.Add("Visible", checkbox1, "Checked")

于 2014-07-14T08:48:30.193 回答
0

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

于 2012-05-10T10:28:42.320 回答