2

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

有没有一种简单的方法可以使用 flowlayoutpanel 或 tablepanel 或其他东西来做到这一点。我以编程方式添加控件(不使用表单编辑器)。

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

4

2 回答 2

0

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

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

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

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

于 2013-04-23T15:27:43.000 回答
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);

    }

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

这应该让你开始;但绝不会是理想的。您可能需要对此类项目进行不同的配置,以确保它符合您的标准。但是使用 440 x 420 像素的表单。面板还停靠在整个布局的半英寸范围内。您的文本框和标签固定在屏幕的左上方和右上方。

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

于 2013-04-23T15:35:50.623 回答