Зовнішній вигляд програми подається переважно через форми. Форми є основними будівельними блоками. Вони надають контейнер для різних елементів управління. А механізм подій дозволяє елементам форми відгукуватися на введення користувача, і, таким чином, взаємодіяти з користувачем.
При відкритті проекту в Visual Studio в графічному редакторі ми можемо побачити візуальну частину форми - ту частину, яку ми бачимо після запуску програми і куди ми переносимо елементи з панелі управління. Але насправді форма приховує потужний функціонал, що складається з методів, властивостей, подій та інше. Розглянемо основні властивості форм.
Якщо ми запустимо додаток, то нам відобразиться одна порожня форма. Однак навіть такий простий проект з порожньою формою має кілька компонентів:
Незважаючи на те, що ми бачимо тільки форму, але стартовою точкою входу в графічний додаток є клас Program, розташований в файлі Program.cs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms;
namespace HelloApp { static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } |
Спочатку програмою запускається даний клас, потім за допомогою виразу Application.Run (new Form1 ()) він запускає форму Form1. Якщо раптом ми захочемо змінити стартову форму в додатку на якусь іншу, то нам треба змінити в цьому виразі Form1 на відповідний клас форми.
Сама форма складна за змістом. Вона ділиться на ряд компонентів. Так, в структурі проекту є файл Form1.Designer.cs, який виглядає приблизно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
namespace HelloApp { partial class Form1 { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null;
/// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); }
#region Windows Form Designer generated code
/// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.SuspendLayout(); // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(284, 261); this.Name = "Form1"; this.Text = "Привіт світ!"; this.ResumeLayout(false);
}
#endregion
} } |
Тут оголошується частковий клас форми Form1, яка має два методи: Dispose (), який виконує роль деструктора об'єкта, і InitializeComponent (), який встановлює початкові значення властивостей форми.
При додаванні елементів управління, наприклад, кнопок, їх опис також додається в цей файл.
Але на практиці ми рідко будемо стикатися з цим класом, так як вони виконує в основному дизайнерські функції - установка властивостей об'єктів, установка змінних.
Ще один файл - Form1.resx - зберігає ресурси форми. Як правило, ресурси використовуються для створення одноманітних форм відразу для декількох мовних культур.
І більш важливий файл - Form1.cs, який в структурі проекту називається просто Form1, містить код або програмну логіку форми:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
namespace HelloApp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } } } |
За замовчуванням тут є тільки конструктор форми, в якому просто викликається метод InitializeComponent (), оголошений у файлі дизайнера Form1.Designer.cs. Саме з цим файлом ми і будемо більше працювати.