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

时间:2013-04-23 15:22:12

标签: c# winforms

我已经设置了一些拆分容器,并且面板大约是文本框和标签的高度。我希望标签留在文本框中,文本框的宽度基本上会转到面板的边缘(如向右拉伸)。

使用flowlayoutpanel或tablepanel或其他方法有一种简单的方法吗?我正在以编程方式添加控件(不使用表单编辑器)。

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

2 个答案:

答案 0 :(得分:0)

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

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

如果他们被放置在tablelayoutpanel中的面板中,那么如果表单/容器控制器增长,他们应该自动调整自己的大小,但是为了确保你可以使用anchor属性来确保这一点。

例如,将面板停靠在tablelayoutpanel单元格中的填充模式,然后假设您在左侧有标签,右侧是文本框,将标签左侧固定,文本框右侧。这应该确保控制器的这些边缘保持粘在这些侧面上的面板上。

答案 1 :(得分:0)

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

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);

    }

正如您在运行时所看到的那样,组件已初始化;然后为所有属性分配正确的定位。您是否相对于表单面板标记了布局。通过定义点,您可以确保它们集中。

这应该让你开始;但绝不是理想的。您可能需要以不同方式配置此类项目以确保其符合您的条件。但是 Form 的格式为440 x 420像素。小组还停靠在整个布局的半英寸范围内。您的文本框和标签将锚定在屏幕的左上角和右上角。

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