|
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). |
|
|
|
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? |
|
|