? Bạn cần xây dựng một ứng dụng cung cấp giao diện người dùng đồ họa (GUI) dựa-trên-Windows Form.
-> Hiện thực một phương thức tĩnh Main trong ít nhất một file mã nguồn. Trong Main, tạo một thể hiện của một lớp thừa kế từ lớp System.Windows.Forms.Form (đây là form chính của ứng dụng). Truyền đối tượng này cho phương thức tĩnh Run của lớp System.Windows.Forms.Application. Sử dụng đối số /target:winexe khi biên dịch assembly của bạn bằng trình biên dịch C# (csc.exe).
Việc xây dựng một ứng dụng có giao diện người dùng đồ họa Windows đơn giản hoàn toàn khác xa việc phát triển một ứng dụng dựa-trên-Windows hoàn chỉnh. Tuy nhiên, bất kể viết một ứng dụng đơn giản như Hello World hay viết phiên bản kế tiếp cho Microsoft Word, bạn cũng phải thực hiện những việc sau:
• Tạo một lớp thừa kế từ lớp System.Windows.Forms.Form cho mỗi form cần cho ứng dụng.
• Trong mỗi lớp form, khai báo các thành viên mô tả các điều kiểm trên form, ví dụ Button, Label, ListBox, TextBox. Các thành viên này nên được khai báo là private hoặc ít nhất cũng là protected để các phần tử khác của chương trình không truy xuất trực tiếp chúng được. Nếu muốn cho phép truy xuất các điều kiểm này, hiện thực các thành viên cần thiết trong lớp form để cung cấp việc truy xuất gián tiếp (kiểm soát được) đến các điều kiểm nằm trong.
• Trong lớp form, khai báo các phương thức thụ lý các sự kiện do các điều kiểm trên form sinh ra, chẳng hạn việc nhắp vào Button, việc nhấn phím khi một TextBox đang tích cực. Các phương thức này nên được khai báo là private hoặc protected và tuân theo mẫu sự kiện .NET chuẩn (sẽ được mô tả trong mục 16.10). Trong các phương thức này (hoặc trong các phương thức được gọi bởi các các phương thức này), bạn sẽ định nghĩa các chức năng của ứng dụng.
• Khai báo một phương thức khởi dựng cho lớp form để tạo các điều kiểm trên form và cấu hình trạng thái ban đầu của chúng (kích thước, màu, nội dung…). Phương thức khởi dựng này cũng nên liên kết các phương thức thụ lý sự kiện của lớp với các sự kiện tương ứng của mỗi điều kiểm.
• Khai báo phương thức tĩnh Main—thường là một phương thức của lớp tương ứng với form chính của ứng dụng. Phương thức này là điểm bắt đầu của ứng dụng và có các dạng như đã được đề cập ở mục 1.1. Trong phương thức Main, tạo một thể hiện của form chính và truyền nó cho phương thức tĩnh Application.Run. Phương thức Run hiển thị form chính và khởi chạy một vòng lặp thông điệp chuẩn trong tiểu trình hiện hành, chuyển các tác động từ người dùng (nhấn phím, nhắp chuột…) thành các sự kiện gửi đến ứng dụng.
Lớp WelcomeForm trong ví dụ dưới đây minh họa các kỹ thuật trên. Khi chạy, nó yêu cầu người dùng nhập vào tên rồi hiển thị một MessageBox chào mừng.
Visual C# Code:
  1. using System.Windows.Forms;
  2.  
  3. public class WelcomeForm : Form {
  4.  
  5.     // Các thành viên private giữ tham chiếu đến các điều kiểm.
  6.     private Label label1;
  7.     private TextBox textBox1;
  8.     private Button button1;
  9.  
  10.     // Phương thức khởi dựng (tạo một thể hiện form
  11.     // và cấu hình các điều kiểm trên form).
  12.     public WelcomeForm() {
  13.  
  14.         // Tạo các điều kiểm trên form.
  15.         this.label1 = new Label();
  16.         this.textBox1 = new TextBox();
  17.         this.button1 = new Button();
  18.  
  19.         // Tạm hoãn layout logic của form trong khi
  20.         // chúng ta cấu hình và bố trí các điều kiểm.
  21.         this.SuspendLayout();
  22.  
  23.         // Cấu hình các Label (hiển thị yêu cầu).
  24.         this.label1.Location = new System.Drawing.Point(16, 36);
  25.         this.label1.Name = "label1";
  26.         this.label1.Size = new System.Drawing.Size(128, 16);
  27.         this.label1.TabIndex = 0;
  28.         this.label1.Text = "Please enter your name:";
  29.  
  30.         // Cấu hình TextBox (nhận thông tin từ người dùng).
  31.         this.textBox1.Location = new System.Drawing.Point(152, 32);
  32.         this.textBox1.Name = "textBox1";
  33.         this.textBox1.TabIndex = 1;
  34.         this.textBox1.Text = "";
  35.  
  36.         // Cấu hình Buton (người dùng nhấn vào sau khi nhập tên).
  37.         this.button1.Location = new System.Drawing.Point(109, 80);
  38.         this.button1.Name = "button1";
  39.         this.button1.TabIndex = 2;
  40.         this.button1.Text = "Enter";
  41.         this.button1.Click += new System.EventHandler(this.button1_Click);
  42.  
  43.         // Cấu hình WelcomeForm và thêm các điều kiểm.
  44.         this.ClientSize = new System.Drawing.Size(292, 126);
  45.         this.Controls.Add(this.button1);
  46.         this.Controls.Add(this.textBox1);
  47.         this.Controls.Add(this.label1);
  48.         this.Name = "form1";
  49.         this.Text = "Microsoft .NET Framework";
  50.  
  51.         // Phục hồi layout logic của form ngay khi
  52.         // tất cả các điều kiểm đã được cấu hình.
  53.         this.ResumeLayout(false);
  54.     }
  55.  
  56.     // Điểm nhập của ứng dụng (tạo một thể hiện form, chạy vòng lặp
  57.     // thông điệp chuẩn trong tiểu trình hiện hành - vòng lặp chuyển
  58.     // các tác động từ người dùng thành các sự kiện đến ứng dụng).
  59.     public static void Main() {
  60.  
  61.         Application.Run(new WelcomeForm());
  62.     }
  63.  
  64.     // Phương thức thụ lý sự kiện
  65.     // (được gọi khi người dùng nhắp vào nút Enter).
  66.     private void button1_Click(object sender, System.EventArgs e) {
  67.  
  68.         // Ghi ra Console.
  69.         System.Console.WriteLine("User entered: " + textBox1.Text);
  70.  
  71.         // Hiển thị lời chào trong MessageBox.
  72.         MessageBox.Show("Welcome to Microsoft .NET Framework, "
  73.             + textBox1.Text, "Microsoft .NET Framework");
  74.     }
  75. }

Để xây dựng lớp WelcomeForm (trong file WelcomeForm.cs) thành một ứng dụng, sử dụng lệnh:
csc /target:winexe WelcomeForm.cs
Đối số /target:winexe báo cho trình biên dịch biết đây là ứng dụng dựa-trên-Windows. Do đó, trình biên dịch sẽ xây dựng file thực thi sao cho không có cửa sổ Console nào được tạo ra khi bạn chạy ứng dụng. Nếu bạn sử dụng /target:exe khi xây dựng một ứng dụng Windows Form thay cho /target:winexe thì ứng dụng vẫn làm việc tốt, nhưng sẽ tạo ra một cửa sổ Console khi chạy. Mặc dù điều này không được ưa chuộng trong một ứng dụng hoàn chỉnh, cửa sổ Console vẫn hữu ích nếu bạn cần ghi ra các thông tin gỡ rối hoặc đăng nhập khi đang phát triển và thử nghiệm một ứng dụng Windows Form. Bạn có thể ghi ra Console bằng phương thức Write và WriteLine của lớp System.Console.
Ứng dụng WelcomeForm.exe trong hình 1.1 hiển thị lời chào người dùng có tên là Binh Phuong. Phiên bản này của ứng dụng được xây dựng bằng đối số /target:exe, nên có cửa sổ Console để hiển thị kết quả của dòng lệnh Console.WriteLine trong phương thức thụ lý sự kiện button1_Click .
+ Việc xây dựng một ứng dụng GUI đồ sộ thường tốn nhiều thời gian do phải tạo đối tượng, cấu hình và liên kết nhiều form và điều kiểm. Nhưng may mắn là Microsoft Visual Studio .NET tự động hóa hầu hết các hoạt động này. Nếu không có công cụ như Microsoft Visual Studio .NET thì việc xây dựng một ứng dụng đồ họa đồ sộ sẽ rất lâu, nhàm chán và dễ sinh ra lỗi.

Trích từ "Các giải pháp lập trình C#"