Show / Hide Table of Contents

Практическое руководство. Создание в Windows Forms формы для ввода данных, размер которой можно изменять

Удачно сконструированный макет должен реагировать на изменение размеров родительской формы. Для согласованного изменения размера и положения элементов управления на макете формы при изменении размеров формы можно использовать элемент управления TableLayoutPanel. Элемент управления TableLayoutPanel также полезен в случаях, когда изменение содержимого элементов управления приводит к изменению макета. Процесс, описанный в этой процедуре, можно выполнить в среде Visual Studio. Также см. в разделе Пошаговое руководство: Создание переменного размера Windows формы для ввода данных.

Пример

В следующем примере демонстрируется использование элемента управления TableLayoutPanel для построения макета, который соответствующим образом меняется при изменении пользователем размера формы. Он также демонстрирует, как макет учитывает будущую локализацию.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

// This form demonstrates how to build a form layout that adjusts well
// when the user resizes the form. It also demonstrates a layout that 
// responds well to localization.
class BasicDataEntryForm : System.Windows.Forms.Form
{
    public BasicDataEntryForm()
    {
        InitializeComponent();
    }
    
    private System.ComponentModel.IContainer components = null;

    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }


    public override string ToString()
    {
        return "Basic Data Entry Form";
    }

    private void okBtn_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void cancelBtn_Click(object sender, EventArgs e)
    {
        this.Close();
    }



    private void InitializeComponent()
    {
        this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
        this.label1 = new System.Windows.Forms.Label();
        this.label2 = new System.Windows.Forms.Label();
        this.label3 = new System.Windows.Forms.Label();
        this.label4 = new System.Windows.Forms.Label();
        this.label5 = new System.Windows.Forms.Label();
        this.label6 = new System.Windows.Forms.Label();
        this.label9 = new System.Windows.Forms.Label();
        this.textBox2 = new System.Windows.Forms.TextBox();
        this.textBox3 = new System.Windows.Forms.TextBox();
        this.textBox4 = new System.Windows.Forms.TextBox();
        this.textBox5 = new System.Windows.Forms.TextBox();
        this.maskedTextBox1 = new System.Windows.Forms.MaskedTextBox();
        this.maskedTextBox2 = new System.Windows.Forms.MaskedTextBox();
        this.comboBox1 = new System.Windows.Forms.ComboBox();
        this.textBox1 = new System.Windows.Forms.TextBox();
        this.label7 = new System.Windows.Forms.Label();
        this.label8 = new System.Windows.Forms.Label();
        this.richTextBox1 = new System.Windows.Forms.RichTextBox();
        this.cancelBtn = new System.Windows.Forms.Button();
        this.okBtn = new System.Windows.Forms.Button();
        this.tableLayoutPanel1.SuspendLayout();
        this.SuspendLayout();
// 
// tableLayoutPanel1
// 
        this.tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                    | System.Windows.Forms.AnchorStyles.Left)
                    | System.Windows.Forms.AnchorStyles.Right)));
        this.tableLayoutPanel1.ColumnCount = 4;
        this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
        this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
        this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
        this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
        this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);
        this.tableLayoutPanel1.Controls.Add(this.label2, 2, 0);
        this.tableLayoutPanel1.Controls.Add(this.label3, 0, 1);
        this.tableLayoutPanel1.Controls.Add(this.label4, 0, 2);
        this.tableLayoutPanel1.Controls.Add(this.label5, 0, 3);
        this.tableLayoutPanel1.Controls.Add(this.label6, 2, 3);
        this.tableLayoutPanel1.Controls.Add(this.label9, 2, 4);
        this.tableLayoutPanel1.Controls.Add(this.textBox2, 1, 1);
        this.tableLayoutPanel1.Controls.Add(this.textBox3, 1, 2);
        this.tableLayoutPanel1.Controls.Add(this.textBox4, 1, 3);
        this.tableLayoutPanel1.Controls.Add(this.textBox5, 3, 0);
        this.tableLayoutPanel1.Controls.Add(this.maskedTextBox1, 1, 4);
        this.tableLayoutPanel1.Controls.Add(this.maskedTextBox2, 3, 4);
        this.tableLayoutPanel1.Controls.Add(this.comboBox1, 3, 3);
        this.tableLayoutPanel1.Controls.Add(this.textBox1, 1, 0);
        this.tableLayoutPanel1.Controls.Add(this.label7, 0, 5);
        this.tableLayoutPanel1.Controls.Add(this.label8, 0, 4);
        this.tableLayoutPanel1.Controls.Add(this.richTextBox1, 1, 5);
        this.tableLayoutPanel1.Location = new System.Drawing.Point(13, 13);
        this.tableLayoutPanel1.Name = "tableLayoutPanel1";
        this.tableLayoutPanel1.RowCount = 6;
        this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F));
        this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F));
        this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F));
        this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F));
        this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 28F));
        this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 80F));
        this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
        this.tableLayoutPanel1.Size = new System.Drawing.Size(623, 286);
        this.tableLayoutPanel1.TabIndex = 0;
// 
// label1
// 
        this.label1.Anchor = System.Windows.Forms.AnchorStyles.Right;
        this.label1.AutoSize = true;
        this.label1.Location = new System.Drawing.Point(3, 7);
        this.label1.Name = "label1";
        this.label1.Size = new System.Drawing.Size(59, 14);
        this.label1.TabIndex = 20;
        this.label1.Text = "First Name";
// 
// label2
// 
        this.label2.Anchor = System.Windows.Forms.AnchorStyles.Right;
        this.label2.AutoSize = true;
        this.label2.Location = new System.Drawing.Point(323, 7);
        this.label2.Name = "label2";
        this.label2.Size = new System.Drawing.Size(59, 14);
        this.label2.TabIndex = 21;
        this.label2.Text = "Last Name";
// 
// label3
// 
        this.label3.Anchor = System.Windows.Forms.AnchorStyles.Right;
        this.label3.AutoSize = true;
        this.label3.Location = new System.Drawing.Point(10, 35);
        this.label3.Name = "label3";
        this.label3.Size = new System.Drawing.Size(52, 14);
        this.label3.TabIndex = 22;
        this.label3.Text = "Address1";
// 
// label4
// 
        this.label4.Anchor = System.Windows.Forms.AnchorStyles.Right;
        this.label4.AutoSize = true;
        this.label4.Location = new System.Drawing.Point(7, 63);
        this.label4.Name = "label4";
        this.label4.Size = new System.Drawing.Size(55, 14);
        this.label4.TabIndex = 23;
        this.label4.Text = "Address 2";
// 
// label5
// 
        this.label5.Anchor = System.Windows.Forms.AnchorStyles.Right;
        this.label5.AutoSize = true;
        this.label5.Location = new System.Drawing.Point(38, 91);
        this.label5.Name = "label5";
        this.label5.Size = new System.Drawing.Size(24, 14);
        this.label5.TabIndex = 24;
        this.label5.Text = "City";
// 
// label6
// 
        this.label6.Anchor = System.Windows.Forms.AnchorStyles.Right;
        this.label6.AutoSize = true;
        this.label6.Location = new System.Drawing.Point(351, 91);
        this.label6.Name = "label6";
        this.label6.Size = new System.Drawing.Size(31, 14);
        this.label6.TabIndex = 25;
        this.label6.Text = "State";
// 
// label9
// 
        this.label9.Anchor = System.Windows.Forms.AnchorStyles.Right;
        this.label9.AutoSize = true;
        this.label9.Location = new System.Drawing.Point(326, 119);
        this.label9.Name = "label9";
        this.label9.Size = new System.Drawing.Size(56, 14);
        this.label9.TabIndex = 33;
        this.label9.Text = "Phone (H)";
// 
// textBox2
// 
        this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
        this.tableLayoutPanel1.SetColumnSpan(this.textBox2, 3);
        this.textBox2.Location = new System.Drawing.Point(68, 32);
        this.textBox2.Name = "textBox2";
        this.textBox2.Size = new System.Drawing.Size(552, 20);
        this.textBox2.TabIndex = 2;
// 
// textBox3
// 
        this.textBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
        this.tableLayoutPanel1.SetColumnSpan(this.textBox3, 3);
        this.textBox3.Location = new System.Drawing.Point(68, 60);
        this.textBox3.Name = "textBox3";
        this.textBox3.Size = new System.Drawing.Size(552, 20);
        this.textBox3.TabIndex = 3;
// 
// textBox4
// 
        this.textBox4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
        this.textBox4.Location = new System.Drawing.Point(68, 88);
        this.textBox4.Name = "textBox4";
        this.textBox4.Size = new System.Drawing.Size(249, 20);
        this.textBox4.TabIndex = 4;
// 
// textBox5
// 
        this.textBox5.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
        this.textBox5.Location = new System.Drawing.Point(388, 4);
        this.textBox5.Name = "textBox5";
        this.textBox5.Size = new System.Drawing.Size(232, 20);
        this.textBox5.TabIndex = 1;
// 
// maskedTextBox1
// 
        this.maskedTextBox1.Anchor = System.Windows.Forms.AnchorStyles.Left;
        this.maskedTextBox1.Location = new System.Drawing.Point(68, 116);
        this.maskedTextBox1.Mask = "(999)000-0000";
        this.maskedTextBox1.Name = "maskedTextBox1";
        this.maskedTextBox1.TabIndex = 6;
// 
// maskedTextBox2
// 
        this.maskedTextBox2.Anchor = System.Windows.Forms.AnchorStyles.Left;
        this.maskedTextBox2.Location = new System.Drawing.Point(388, 116);
        this.maskedTextBox2.Mask = "(999)000-0000";
        this.maskedTextBox2.Name = "maskedTextBox2";
        this.maskedTextBox2.TabIndex = 7;
// 
// comboBox1
// 
        this.comboBox1.Anchor = System.Windows.Forms.AnchorStyles.Left;
        this.comboBox1.FormattingEnabled = true;
        this.comboBox1.Items.AddRange(new object[] {
            "AK - Alaska",
            "WA - Washington"});
        this.comboBox1.Location = new System.Drawing.Point(388, 87);
        this.comboBox1.Name = "comboBox1";
        this.comboBox1.Size = new System.Drawing.Size(100, 21);
        this.comboBox1.TabIndex = 5;
// 
// textBox1
// 
        this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
        this.textBox1.Location = new System.Drawing.Point(68, 4);
        this.textBox1.Name = "textBox1";
        this.textBox1.Size = new System.Drawing.Size(249, 20);
        this.textBox1.TabIndex = 0;
// 
// label7
// 
        this.label7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
        this.label7.AutoSize = true;
        this.label7.Location = new System.Drawing.Point(28, 143);
        this.label7.Name = "label7";
        this.label7.Size = new System.Drawing.Size(34, 14);
        this.label7.TabIndex = 26;
        this.label7.Text = "Notes";
// 
// label8
// 
        this.label8.Anchor = System.Windows.Forms.AnchorStyles.Right;
        this.label8.AutoSize = true;
        this.label8.Location = new System.Drawing.Point(4, 119);
        this.label8.Name = "label8";
        this.label8.Size = new System.Drawing.Size(58, 14);
        this.label8.TabIndex = 32;
        this.label8.Text = "Phone (W)";
// 
// richTextBox1
// 
        this.tableLayoutPanel1.SetColumnSpan(this.richTextBox1, 3);
        this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
        this.richTextBox1.Location = new System.Drawing.Point(68, 143);
        this.richTextBox1.Name = "richTextBox1";
        this.richTextBox1.Size = new System.Drawing.Size(552, 140);
        this.richTextBox1.TabIndex = 8;
        this.richTextBox1.Text = "";
// 
// cancelBtn
// 
        this.cancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
        this.cancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
        this.cancelBtn.Location = new System.Drawing.Point(558, 306);
        this.cancelBtn.Name = "cancelBtn";
        this.cancelBtn.TabIndex = 1;
        this.cancelBtn.Text = "Cancel";
        this.cancelBtn.Click += new System.EventHandler(this.cancelBtn_Click);
// 
// okBtn
// 
        this.okBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
        this.okBtn.DialogResult = System.Windows.Forms.DialogResult.OK;
        this.okBtn.Location = new System.Drawing.Point(476, 306);
        this.okBtn.Name = "okBtn";
        this.okBtn.TabIndex = 0;
        this.okBtn.Text = "OK";
        this.okBtn.Click += new System.EventHandler(this.okBtn_Click);
// 
// BasicDataEntryForm
// 
        this.ClientSize = new System.Drawing.Size(642, 338);
        this.Controls.Add(this.okBtn);
        this.Controls.Add(this.cancelBtn);
        this.Controls.Add(this.tableLayoutPanel1);
        this.Name = "BasicDataEntryForm";
        this.Padding = new System.Windows.Forms.Padding(9);
        this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
        this.Text = "Basic Data Entry";
        this.tableLayoutPanel1.ResumeLayout(false);
        this.tableLayoutPanel1.PerformLayout();
        this.ResumeLayout(false);

    }

    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.Label label2;
    private System.Windows.Forms.Label label3;
    private System.Windows.Forms.Label label4;
    private System.Windows.Forms.Label label5;
    private System.Windows.Forms.Label label6;
    private System.Windows.Forms.Label label7;
    private System.Windows.Forms.Label label8;
    private System.Windows.Forms.Label label9;
    private System.Windows.Forms.Button cancelBtn;
    private System.Windows.Forms.Button okBtn;
    private System.Windows.Forms.TextBox textBox1;
    private System.Windows.Forms.TextBox textBox2;
    private System.Windows.Forms.TextBox textBox3;
    private System.Windows.Forms.TextBox textBox4;
    private System.Windows.Forms.TextBox textBox5;
    private System.Windows.Forms.MaskedTextBox maskedTextBox1;
    private System.Windows.Forms.MaskedTextBox maskedTextBox2;
    private System.Windows.Forms.ComboBox comboBox1;
    private System.Windows.Forms.RichTextBox richTextBox1;

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.Run(new BasicDataEntryForm());
    }
}

Компиляция кода

Для этого примера требуются:

  • ссылки на сборки System, System.Data, System.Drawing и System.Windows.Forms.

Сведения о выполнении сборки этого примера из командной строки для Visual Basic или Visual C#, см. в разделе построение из командной строки или командной строки создания с помощью csc.exe. Можно также сборке этого примера в Visual Studio путем вставки кода в новый проект.

См. также

  • FlowLayoutPanel
  • TableLayoutPanel
  • Практическое руководство. Привязка и закрепление дочерних элементов управления в элементе управления TableLayoutPanel
  • Практическое руководство. Формирование макета формы Windows Forms с учетом будущей локализации
  • Взаимодействие с пользователем в Microsoft Windows, официальные рекомендации для разработчиков и конструкторов пользовательских интерфейсов. Редмонд, штат Вашингтон: Microsoft Press, 1999. (USBN: 0-7356-0566-1)
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX