Số 37
HỒ LÔ BIẾN

Dành cho U16: Làm quen với C# và .NET:

Chơi đùa với biểu mẫu Windows

Anh SI SÁP

Em đã biết cách quy định các thuộc tính của biểu mẫu trong lúc thiết kế để tạo nên nhiều chuyện “cực hay”. Bây giờ ta tìm hiểu biểu mẫu Windows (Windows form) kỹ hơn một chút nữa nha!

Lớp và đối tượng biểu mẫu

Mỗi biểu mẫu mà em thêm vào một ứng dụng Windows đơn giản là một tập tin lớp (class file). Nếu bấm kép vào Form1 của ứng dụng ChaoEChipNET, em sẽ thấy đoạn mã dưới đây, nó báo cho biết tập tin lớp là một biểu mẫu Windows:

public class frmMain : System.Windows.Forms.Form

Tên lớp trong trường hợp này là frmMain. Cái tên này chính là trị của thuộc tính Name mà em thiết lập trong cửa sổ Properties đó ("em còn nhớ hay em đã quên?"). Ta nói lớp frmMain thừa kế lớp cơ sở System.Windows.Forms.Form và như thế có đủ chức năng của lớp cơ sở đó.

- Em hiểu rồi, thừa kế lớp nào đó nghĩa là "tự dưng" có mọi thứ của lớp đó, khỏi cần "tay trắng làm nên", phải không anh?

Quá đúng! Quá đúng! Hậu sinh khả... kinh ngạc! Anh xin nói thêm: mỗi lần em chạy ứng dụng ChaoEChipNET, biểu mẫu cụ thể được tạo ra trên màn hình là một đối tượng (object) của lớp frmMain. Đối tượng khác với lớp, nó có sinh, có tử hẳn hoi. Đối tượng của lớp frmMain sinh ra khi ứng dụng khởi động và mất đi khi kết thúc ứng dụng (lúc em đóng biểu mẫu).

Để xem đối tượng thuộc lớp frmMain được tạo dựng như thế nào và "trở về với cát bụi" ra sao, em hãy “chui” vào đoạn mã do Windows Form Designer tạo ra (đoạn mã 1) trong lớp frmMain. Em để ý nè, hàm Main() là hàm khởi động ứng dụng, nó gọi hàm Application.Run() để nạp biểu mẫu chính của ứng dụng vào bộ nhớ.

Biểu mẫu chính trong ứng dụng của ta là đối tượng thuộc lớp frmMain. Để tạo ra đối tượng mới người ta dùng từ chốt new. Sau new em thấy ghi hàm frmMain() trùng tên với lớp frmMain. Hàm như vậy gọi là hàm tạo dựng (constructor) vì nó có nhiệm vụ tạo dựng nên đối tượng của lớp. Em cần nhớ: khi đối tượng của lớp nào đó được tạo ra, hàm tạo dựng của lớp đó được gọi.

Đoạn mã 1

static void Main()
{
Application.Run(new frmMain());
}
...
public frmMain()
{
InitializeComponent();
}
...
protected override void
Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

Cũng trong đoạn mã 1, em thấy có hàm Dispose(). Hàm này được gọi khi ta đóng biểu mẫu. Nó có nhiệm vụ giải tỏa phần bộ nhớ bị chiếm bởi biểu mẫu, trả về cho hệ điều hành nên được gọi là hàm giải tỏa (destructor).

[Đầu trang]

Thử "vọc" hàm tạo dựng

Bây giờ anh đề nghị mình bày trò tạo dựng "tá lả" đối tượng của một lớp biểu mẫu. Em sẽ thấy rõ hàm tạo dựng được gọi mỗi khi xuất hiện một biểu mẫu trên màn hình. Mình thử làm chuyện này nhe: tạo một biểu mẫu có nút bấm sao cho mỗi lần bấm nút đó lại xuất hiện một biểu mẫu loại khác. Trong hàm tạo dựng của lớp biểu mẫu thứ hai, em đưa vào một câu lệnh nhằm hiển thị dòng chữ gì đó. Nhờ vậy em biết chắc hàm tạo dựng được gọi mỗi khi sinh ra một biểu mẫu cụ thể (đối tượng của lớp biểu mẫu).

Trước hết, em bấm nút phải chuột trên tên dự án ChaoEChipNET trong cửa sổ Solution Explorer và chọn Add > Add Windows Form từ trình đơn ứng cảnh (contextual menu) vừa hiện ra. Em được nhắc nhở bằng hộp thoại Add New Item như hình 1.

Hình 1: Thêm một biểu mẫu mới vào ứng dụng ChaoEChipNET.

Đổi tên trong ô Name thành firstForm và bấm nút OK. Em sẽ thấy firstForm trong cửa sổ Solution Explorer. Bằng cách tương tự, em thêm một biểu mẫu khác và đặt tên nó là secondForm.

Khi đã có hai biểu mẫu, em "bày binh bố trận" như sau:

- Bấm kép vào firstForm trong Solution Explorer để làm cho nó trở thành biểu mẫu hiện hành trong cửa sổ thiết kế (designer).
- Lôi một Button từ Toolbox vào biểu mẫu. Đổi thuộc tính Name của nó thành showSecondForm và thuộc tính Text của nó thành Hien thi bieu mau thu hai.
- Bấm kép nút showSecondForm và thêm đoạn mã lệnh dưới đây vào tình huống showSecondForm_click:

// Tạo biểu mẫu thứ hai
secondForm f = new secondForm();
// Hiển thị biểu mẫu thứ hai
f.Show();

- Bấm kép tập tin secondForm trong Solution Explorer để làm cho nó xuất hiện trong cửa sổ thiết kế.
- Bấm kép trên biểu mẫu để thấy phần nội dung mã lệnh của tập tin lớp. Em thêm đoạn mã dưới đây vào hàm tạo dựng, ngay trước câu lệnh gọi hàm InitializeComponent():

MessageBox.Show("Tao dung bieu mau secondForm.");

Lúc này trong dự án ChaoEChipNET có 3 biểu mẫu: frmMain (trong tập tin Form1.cs), firstForm và secondForm. Biểu mẫu frmMain được xem là biểu mẫu chính vì nó được nạp và chạy ngay khi khởi động ứng dụng. Muốn firstForm trở thành biểu mẫu chính, em sửa đổi hàm Main của frmMain như vầy:

static void Main()
{
Application.Run(new firstForm());
}

Vậy là chạy được rồi đó, em hãy nhấn phím F5. Sau khi firstForm được nạp, bấm nút Hien thi bieu mau thu hai, em thấy xuất hiện một biểu mẫu secondForm. Bấm nút Hien thi bieu mau thu hai thêm một lần nữa, em sẽ có hai đối tượng của lớp secondForm. Trước khi xuất hiện một biểu mẫu thuộc lớp secondForm, em lại thấy thông báo Tao dung bieu mau secondForm do hàm tạo dựng được gọi. Đúng vậy không nào?

[Đầu trang]
Trang chủ
Thư ngỏ
Nội lực "Peter Pan"
Cầu nối Intel Việt Nam
Chuyện trong tuần
Nhóm Frontpage
Cõi người ta
Kim cương doanh nghiệp
Bình luận thị trường
Cõi Mô-bai
Chuyên đề
Bổ ngửa
Nuôi hồn Robot
Túi càn khôn IT
Hồ lô biến
Cảm về Game
Nhật ký e-CHÍP
Bản quyền VASC Orient, Công ty phát triển phần mềm VASC
99 Triệu Việt Vương HN; Tel: (04) 9782235 • email: echip@vasc.com.vn