流式布局面板中文本框的自动宽度

4
在FlowLayoutPanel中,我有一个标签和一个文本框并排放置。当我改变FlowLayoutPanel的宽度时,我也想改变文本框的宽度。这可行吗?
控件的摆放方式如下:
[ FLOWLAYOUTPANEL [LABEL][TEXTBOX] ]
编辑:根据Jay Stratemeyer和Hans Passant的代码和建议,我成功实现了自动调整宽度并自动换行的标签和文本框。以下是代码:
    Private Sub FlowLayoutPanel1_Resize(sender As Object, e As System.EventArgs) Handles FlowLayoutPanel1.Resize
        Dim new_width As Integer = FlowLayoutPanel1.ClientSize.Width - LabelControl1.Width - LabelControl1.Margin.Left - LabelControl1.Margin.Right - TextBox1.Margin.Left - TextBox1.Margin.Right

        If new_width > Me.TextBox1.MinimumSize.Width Then
            Me.TextBox1.Width = new_width
        End If
    End Sub

1
使用 FlowLayoutPanel 的 Resize 事件。 - Hans Passant
也许可以通过将TableLayoutPanel嵌套在FlowLayoutPanel中,并将标签和文本框放置在表格内来实现? - DonBoitnott
2个回答

2
public Form1()
    {
        InitializeComponent();
        this.Load +=new EventHandler(Form1_Load);
    }

    public int MyFlowPanelOriginalSize { get; set; }
    public int MyFlowPanelNewSize { get; set; }
    public int DifferenceInSizeOfPanel { get; set; }

    private void Form1_Load(object sender, EventArgs e)
    {
        MyFlowPanelOriginalSize = MyFlowPanel.Width;
        MyFlowPanel.Resize += new EventHandler(MyFlowPanel_Resize);
        DifferenceInSizeOfPanel = 0;
    }



    void MyFlowPanel_Resize(object sender, EventArgs e)
    {
        MyFlowPanelNewSize = MyFlowPanel.Width;
        DifferenceInSizeOfPanel = MyFlowPanelNewSize - MyFlowPanelOriginalSize;
        var TextBoxDifference = MyTextBox.Width + DifferenceInSizeOfPanel;
        MyTextBox.Width = TextBoxDifference;
        MyFlowPanelOriginalSize = MyFlowPanel.Width;
    }

谢谢Jay,你的代码指引了我正确的方向并提供了一个更简单的解决方案。请看我上面的编辑。 - Yiannis Mpourkelis

2
是的,这是TableLayoutPanel的默认行为,列设置为父容器的50%。
您可以将标签列设置为固定大小(或根据标签文本设置自动大小),将文本框设置为100%。这样,任何调整TableLayoutPanel大小的操作都会触发文本框的调整大小,而不会影响其他内容。 enter image description here

我使用FlowLayoutPanle而不是TableLayoutPanel,因为我希望标签和文本框控件可以换行,以防它们不能放在同一行上。 - Yiannis Mpourkelis
@YiannisMpourkelis:你希望调整大小的方式是什么?通常要么适应宽度,要么换行。因为通过将其适应宽度,您基本上是在说“我需要从0到无穷大的任何宽度”。这样无法换行(或者至少不会默认实现,您需要指定它如何工作,可能可以与最小/最大宽度的组合实现)。请更新您的问题并提供角落情况。 - Victor Zakharov
文本框控件(以及其他控件)具有MinimumSize属性,当控件在容器内锚定时,该属性会被考虑在内。 - Yiannis Mpourkelis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接