C# 如何添加标签和文本框以填充水平面板?

C# 如何添加标签和文本框以填充水平面板?,c#,winforms,C#,Winforms,我已经设置了一些拆分容器和一个与文本框和标签高度相当的面板。我希望标签位于文本框的左侧,文本框的宽度基本上位于面板的边缘(如向右拉伸) 有没有一种简单的方法可以使用flowlayoutpanel或tablepanel之类的工具来实现这一点。我以编程方式添加控件(不使用表单编辑器) 理想情况下,如果面板变大,文本框应该拉伸。您可能要做的是根据面板尺寸计算标签和文本框的宽度和高度 对于位置,您可能只需要给他们一个硬编码的起始位置,但同样,这可能是基于一些计算 如果它们被放置在tablelayoutp

我已经设置了一些拆分容器和一个与文本框和标签高度相当的面板。我希望标签位于文本框的左侧,文本框的宽度基本上位于面板的边缘(如向右拉伸)

有没有一种简单的方法可以使用flowlayoutpanel或tablepanel之类的工具来实现这一点。我以编程方式添加控件(不使用表单编辑器)


理想情况下,如果面板变大,文本框应该拉伸。

您可能要做的是根据面板尺寸计算标签和文本框的宽度和高度

对于位置,您可能只需要给他们一个硬编码的起始位置,但同样,这可能是基于一些计算

如果它们被放置在tablelayoutpanel中的一个面板中,那么它们应该在表单/容器控制器增长时自动调整自身大小,但要确保可以使用anchor属性来确保这一点

例如,将面板停靠在tablelayoutpanel单元格中的填充模式,然后假设标签在左侧,文本框在右侧,将标签固定在左侧,文本框固定在右侧。这将确保控件的这些边缘与这些侧面的面板保持粘合。

当您偏离表单设计器视图时,您的代码将稍微更加具体。当您使用设计器时,您可以通过拖放来实现这样的功能。但为了在代码中实现这一点,您需要执行以下操作:

private void InitializeComponent()
    {
        this.panel1 = new System.Windows.Forms.Panel();
        this.label1 = new System.Windows.Forms.Label();
        this.textBox1 = new System.Windows.Forms.TextBox();
        this.panel1.SuspendLayout();
        this.SuspendLayout();
        // 
        // panel1
        // 
        this.panel1.Controls.Add(this.textBox1);
        this.panel1.Controls.Add(this.label1);
        this.panel1.Location = new System.Drawing.Point(12, 12);
        this.panel1.Name = "panel1";
        this.panel1.Size = new System.Drawing.Size(400, 358);
        this.panel1.TabIndex = 0;
        this.panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint);
        // 
        // label1
        // 
        this.label1.AutoSize = true;
        this.label1.Dock = System.Windows.Forms.DockStyle.Left;
        this.label1.Location = new System.Drawing.Point(0, 0);
        this.label1.Name = "label1";
        this.label1.Size = new System.Drawing.Size(35, 13);
        this.label1.TabIndex = 0;
        this.label1.Text = "label1";
        // 
        // textBox1
        // 
        this.textBox1.Dock = System.Windows.Forms.DockStyle.Right;
        this.textBox1.Location = new System.Drawing.Point(47, 0);
        this.textBox1.Name = "textBox1";
        this.textBox1.Size = new System.Drawing.Size(353, 20);
        this.textBox1.TabIndex = 1;
        this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(424, 382);
        this.Controls.Add(this.panel1);
        this.Name = "Form1";
        this.Text = "Form1";
        this.Load += new System.EventHandler(this.Form1_Load);
        this.panel1.ResumeLayout(false);
        this.panel1.PerformLayout();
        this.ResumeLayout(false);

    }
正如您在运行时看到的,组件已初始化;然后为所有属性指定适当的位置。您可以标记相对于窗体和面板的布局。通过定义这些点,可以确保它们是集中的

这应该让你开始;但无论如何都不会是理想的。您可能需要以不同的方式配置此类项目,以确保其符合您的条件。但它的形状是440x420像素。面板也停靠在整个布局的半英寸范围内。文本框和标签定位在屏幕的左上角和右上角


请记住,如果将此布局最大化,则可能会以不利的方式调整设计,除非它们锁定到这些特定位置。希望这能有所帮助。

在C#中查找
停靠
锚定
大小
属性。我假设这是Winforms?您应该能够将这些组件控件直接包含到面板中。然后将“停靠”或“锚定”属性指定给“位置”。所以,是的。。。你可以。我正试图使用flowlayoutpanel。船坞和锚似乎很难工作。这是Winforms,我得到了和这个一样的答案。