Các nhóm điều khiển trên form
Các điều khiển thường dùng
Các điều khiển chứa
Các điều khiển menu
Các điều khiển dữ liệu
Các thành phần
Các điều khiển hỗ trợ in
Các điều khiển hộp thoại
Sự kiện và xử lý sự kiện trong C#
Các nhóm điều khiển trên form
Các điều khiển thường dùng
Các điều khiển chứa
Các điều khiển menu
Các điều khiển dữ liệu
Các thành phần
Các điều khiển hỗ trợ in
Các điều khiển hộp thoại
Sự kiện và xử lý sự kiện trong C#
2. Xây dựng lớp, cấu trúc
Tạo và sử dụng đối tượng
Xây dựng lớp kế thừa
Khái hình và sử dụng đa hình
Sử dụng các lớp và đối tượng dựng sẵn
Collection
Tự sinh mã khai báo
Hệ thống bài cũ
Xây dựng lớp, cấu trúc
Tạo và sử dụng đối tượng
Xây dựng lớp kế thừa
Khái hình và sử dụng đa hình
Sử dụng các lớp và đối tượng dựng sẵn
Collection
Tự sinh mã khai báo
Lập trình giao diện - Điều khiển & xử lý sự kiện 2
3. Mục tiêu bài học
Các nhóm điều khiển trên form
Các điều khiển thường dùng
Các điều khiển chứa
Các điều khiển menu
Các điều khiển dữ liệu
Các thành phần
Các điều khiển hỗ trợ in
Các điều khiển hộp thoại
Sự kiện và xử lý sự kiện trong C#
Các nhóm điều khiển trên form
Các điều khiển thường dùng
Các điều khiển chứa
Các điều khiển menu
Các điều khiển dữ liệu
Các thành phần
Các điều khiển hỗ trợ in
Các điều khiển hộp thoại
Sự kiện và xử lý sự kiện trong C#
Lập trình giao diện - Điều khiển & xử lý sự kiện 3
5. Visual Studio cung cấp rất nhiều điều khiển
Các điều khiển thường dùng
Các điều khiển chứa
Các điều khiển menu
Các điều khiển dữ liệu
Các thành phần
Các điều khiển hỗ trợ in
Các điều khiển hộp thoại
Điều khiển trong Visual Studio
Visual Studio cung cấp rất nhiều điều khiển
Các điều khiển thường dùng
Các điều khiển chứa
Các điều khiển menu
Các điều khiển dữ liệu
Các thành phần
Các điều khiển hỗ trợ in
Các điều khiển hộp thoại
Lập trình giao diện - Điều khiển & xử lý sự kiện 5
8. Các điều khiển đã học
Làm quen với một số điều khiển
Nhóm điều khiển thường dùng
Lập trình giao diện - Điều khiển & xử lý sự kiện 8
9. CheckedListBox thừa kế từ ListBox nên sẽ có các thuộc
tính và phương thức của ListBox
CheckedListBox là một ListBox chứa các phần tử là
CheckBox
CheckedListBox
Lập trình giao diện - Điều khiển & xử lý sự kiện 9
10. Thuộc tính
CheckedIndices Trả về một collection các chỉ số được đánh dấu trong
CheckedListBox
CheckedItems Trả về một collection các phần tử được đánh dấu trong
CheckedListBox
CheckOnClick Nếu bằng true thì các phần tử được đánh dấu khi nhận một
nhấn đơn còn false thì phần tử sẽ được đánh dấu khi nhận
một click đúp chuột
Các thuộc tính của CheckedListBox
Nếu bằng true thì các phần tử được đánh dấu khi nhận một
nhấn đơn còn false thì phần tử sẽ được đánh dấu khi nhận
một click đúp chuột
Items Trả về các một collection gồm các phần tử của CheckedListBox
SelectedItem Lấy hoặc thiết lập phần tử vừa được chọn trong
CheckedListBox
SelectedItems Lấy hoặc thiết lập các phần tử được chọn trong
CheckedListBox
Lập trình giao diện - Điều khiển & xử lý sự kiện 10
Tham khảo thêm các thuộc tính và phương thức của CheckedListBox trên
http://msdn.microsoft.com/en-
us/library/system.windows.forms.checkedlistbox.aspx
11. Demo CheckedListBox
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.NewValue == CheckState.Checked)
{
listBox1.Items.Add(checkedListBox1.SelectedItem.ToString());
}
else
{
listBox1.Items.Remove(checkedListBox1.SelectedItem.ToString());
}
}
Lập trình giao diện - Điều khiển & xử lý sự kiện 11
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.NewValue == CheckState.Checked)
{
listBox1.Items.Add(checkedListBox1.SelectedItem.ToString());
}
else
{
listBox1.Items.Remove(checkedListBox1.SelectedItem.ToString());
}
}
12. ListView là điều khiển dùng để hiển thị một danh sách các phần
tử với các biểu tượng
Windows Explorer là một ví dụ của ListView
ListView cung cấp nhiều cách hiển thị khác nhau (LargeIcon,
Details, SmallIcon, List, Title)
Xem Video hướng dẫn tạo Listview
ListView
ListView là điều khiển dùng để hiển thị một danh sách các phần
tử với các biểu tượng
Windows Explorer là một ví dụ của ListView
ListView cung cấp nhiều cách hiển thị khác nhau (LargeIcon,
Details, SmallIcon, List, Title)
Xem Video hướng dẫn tạo Listview
Lập trình giao diện - Điều khiển & xử lý sự kiện 12
13. Demo ListView
1. Thêm một cột vào Listview Click vào control Listview và chọn properties chọn mục
Column
2. Nhấn vào nút Add chọn thuộc tính Name và Text để đặt
tên và nhãn cho cột.
Lập trình giao diện - Điều khiển & xử lý sự kiện 13
3. Chọn thuộc tính FullRowSelect =true để chọn cả 1 dòng của Listview
4. Chọn thuộc tính View có giá trị là Details
14. Thêm /xóa một hàng vào Listview
1. Thêm phần tử vào dòng đầu tiên của Listview
listview1.Items.Add("Ducati"); // thêm cột thứ nhất
listview1.Items[0].SubItems.Add("2005");
listview1.Items[0].SubItems.Add("125");
listview1.Items[0].SubItems.Add("40000");
2. Thêm phần tử vào hàng thứ i của Listview
listview1.Items.Add("Hyundai");
listview1.Items[i].SubItems.Add("2007");
listview1.Items[i].SubItems.Add("400");
listview1.Items[i].SubItems.Add("850000");
Lập trình giao diện - Điều khiển & xử lý sự kiện 14
2. Thêm phần tử vào hàng thứ i của Listview
listview1.Items.Add("Hyundai");
listview1.Items[i].SubItems.Add("2007");
listview1.Items[i].SubItems.Add("400");
listview1.Items[i].SubItems.Add("850000");
3. Xóa tất cả các phần tử của Listview
listview1.Items.Clear(); .
15. Lấy giá trị của dòng Listview được chọn
1. Lấy giá trị cột thứ i của dòng đã chọn (cột đầu tiên có giá trị là 0)
if (listview1.SelectedItems.Count > 0){
listview1.SelectedItems[0].SubItems[0].Text
}
Lập trình giao diện - Điều khiển & xử lý sự kiện 15
16. TreeView
Thuộc tính Phương thức Sự kiện
SelectedNode ExpandAll AfterCheck
ShowRootLines GetNodeAt AfterCollapse
ImageIndex GetNodeCount BeforeCheck
ShowPlusMinus CollapseAll BeforeCollapseShowPlusMinus CollapseAll BeforeCollapse
AfterSelect
AfterExpand
BeforeSelect
BeforeExpand
17. Thêm Node vào Treeview
1. Click phải chuột vào Treeview chọn mục Properties
2 Chọn mục Node và chọn collection
3 Nhấn nút Add root để thêm node gốc nhấn nút add child để thêm node con
4 Xem Video hướng dẫn thiết kế Treeview
18. Truy cập đến các node / lấy giá trị node được chọn
1. Giả sử có cây như hình vẽ
3 truy cập phần tử YZFR1 bằng chỉ số:
tw.Nodes[0].Nodes[0].Nodes[1].IsSelected
Truy cập phần tử Accord bằng chỉ số:
tw.Nodes[0].Nodes[1].Nodes[0].IsSelected
2. Thuộc tính Node.IsSelected cho biết Node được chọn
3 truy cập phần tử YZFR1 bằng chỉ số:
tw.Nodes[0].Nodes[0].Nodes[1].IsSelected
Truy cập phần tử Accord bằng chỉ số:
tw.Nodes[0].Nodes[1].Nodes[0].IsSelected
4. Lấy giá trị của Node được chọn dùng :
tw.SelectedNode.Text
19. Sử dụng để người dùng biết quá trình xử lý của máy tính
ProgressBar
Lập trình giao diện - Điều khiển & xử lý sự kiện 19
20. Các thuộc tính và
phương thức của ProgressBar
Thuộc tính Mô tả
Value Thiết lập vị trí hiện tại của ProgressBar
Step Thiết lập khoảng giá trị mà phương thức PerformStep sẽ tăng
Maximum Thiết lập giá trị cao nhất
Minimum Thiết lập giá trị nhỏ nhất
Lập trình giao diện - Điều khiển & xử lý sự kiện 20
Phương thức Mô tả
PerformStep Tăng vị trí hiện tại của ProgressBar theo giá trị trong thuộc tính
Step
Tham khảo thêm các thuộc tính và phương thức của CheckedListBox trên
http://msdn.microsoft.com/en-
us/library/system.windows.forms.progressbar.aspx
21. Demo quá trình tính tổng từ 1 đến 10
Demo ProgressBar
Lập trình giao diện - Điều khiển & xử lý sự kiện 21
22. Demo ProgressBar
//Đề mô quá trình tính tổng từ 1 đến 10
private void btnTinh_Click(object sender, EventArgs e)
{
progressBar.Value = 0;
progressBar.Maximum = 100;
progressBar.Minimum = 0;
progressBar.Step = 10;
int sum = 0;
for (int i = 0; i < 10; i++)
{
sum += i;
Thread.Sleep(1000);
progressBar.PerformStep();
}
}
Lập trình giao diện - Điều khiển & xử lý sự kiện 22
//Đề mô quá trình tính tổng từ 1 đến 10
private void btnTinh_Click(object sender, EventArgs e)
{
progressBar.Value = 0;
progressBar.Maximum = 100;
progressBar.Minimum = 0;
progressBar.Step = 10;
int sum = 0;
for (int i = 0; i < 10; i++)
{
sum += i;
Thread.Sleep(1000);
progressBar.PerformStep();
}
}
23. Là điều khiển dùng để hiển thị các trang web với địa chỉ
được chỉ ra
WebBrowser
Lập trình giao diện - Điều khiển & xử lý sự kiện 23
24. Thuộc tính
Phương thức
WebBrowser
Thuộc tính
LocationURL Thiết lập URL cho trang hiện tại
Thuộc tính
Phương thức
Lập trình giao diện - Điều khiển & xử lý sự kiện 24
Phương thức
Navigate(url) Duyệt đến trang được chỉ ra
GoBack() Duyệt trang trước đó trong history
GoForward() Duyệt trang tiếp theo trong history
26. Demo WebBrowser
private void btnOK_Click(object sender, EventArgs e)
{
string url = txtUrl.Text;
webBrowser.Navigate(new Uri(url));
}
Lập trình giao diện - Điều khiển & xử lý sự kiện 26
private void btnOK_Click(object sender, EventArgs e)
{
string url = txtUrl.Text;
webBrowser.Navigate(new Uri(url));
}
27. Tự tìm hiểu các điều khiển còn lại của nhóm Common
Controls, xây dựng một demo nhỏ cho mỗi điều khiển
BÀI TẬP VỀ NHÀ
Sử dụng từ khóa: Tên điều khiển Example C# để tìm kiếm
Lập trình giao diện - Điều khiển & xử lý sự kiện 27
31. Menus & Toolbars
Lập trình giao diện - Điều khiển & xử lý sự kiện 31
ContextMenuStrip
ToolStrip
StatusStrip
32. Menu trạng thái (Status Strip)
StatusStrip (Menu trạng thái) Nằm cuối form cho biết
trạng thái hiện tại của ứng dụng
Lập trình giao diện - Điều khiển & xử lý sự kiện 32
33. Visual Studio cung cấp menu
ngữ cảnh cho các điều khiển
Menu xuất hiện khi người dùng
nhấn phải chuột vào điều
khiển
Muốn sử dụng menu ngữ cảnh
cho một điều khiển cần
1. Thêm menu ngữ cảnh vào
form
2. Gán menu ngữ cảnh đó cho
thuộc tính ContextMenuStrip
Menu ngữ cảnh (ContextMenuStrip)
Visual Studio cung cấp menu
ngữ cảnh cho các điều khiển
Menu xuất hiện khi người dùng
nhấn phải chuột vào điều
khiển
Muốn sử dụng menu ngữ cảnh
cho một điều khiển cần
1. Thêm menu ngữ cảnh vào
form
2. Gán menu ngữ cảnh đó cho
thuộc tính ContextMenuStrip
Lập trình giao diện - Điều khiển & xử lý sự kiện 33
34. CÁC ĐIỀU KHIỂN KHÁC
Lập trình giao diện - Điều khiển & xử lý sự kiện 34
35. Các điều khiển khác
Lập trình giao diện - Điều khiển & xử lý sự kiện 35
36. Cung cấp cơ chế để thực thi hành động sau mỗi khoảng
thời gian
Thuộc tính/Phương thức
Sự kiện
Timer
Thuộc tính/Phương thức Mô tả
Interval Chỉ ra khoảng thời gian sự kiện Tick xẩy
ra
Cung cấp cơ chế để thực thi hành động sau mỗi khoảng
thời gian
Thuộc tính/Phương thức
Sự kiện
Lập trình giao diện - Điều khiển & xử lý sự kiện 36
Chỉ ra khoảng thời gian sự kiện Tick xẩy
ra
Start() Bắt đầu tính thời gian
Stop() Kết thúc Timer
Thuộc tính/Phương thức Mô tả
Tick Xẩy ra mỗi khoảng thời gian được chỉ ra
trong thuộc tính Interval
38. Chọn ra 3 điều khiển bất kỳ chưa được giới thiệu để tìm
hiểu, mỗi điều khiển cho một demo nhỏ
BÀI TẬP VỀ NHÀ
Sử dụng từ khóa: Tên điều khiển Example C# để tìm kiếm
Lập trình giao diện - Điều khiển & xử lý sự kiện 38
39. THIẾT LẬP THUỘC TÍNH
CHO ĐIỀU KHIỂN
Lập trình giao diện - Điều khiển & xử lý sự kiện 39
THIẾT LẬP THUỘC TÍNH
CHO ĐIỀU KHIỂN
40. Có hai cách thiết lập thuộc tính cho điều khiển
Thiết lập thuộc tính cho các điều khiển trên panel
properties
Viết mã để thiết lập cho tất cả các thuộc tính cho điều
khiển
Khi thiết lập thuộc tính trên panel properties, IDE tự sinh
code trong file Designer.cs
Thiết lập thuộc tính cho điều khiển
Có hai cách thiết lập thuộc tính cho điều khiển
Thiết lập thuộc tính cho các điều khiển trên panel
properties
Viết mã để thiết lập cho tất cả các thuộc tính cho điều
khiển
Khi thiết lập thuộc tính trên panel properties, IDE tự sinh
code trong file Designer.cs
Lập trình giao diện - Điều khiển & xử lý sự kiện 40
41. Demo thiết lập thuộc tính bằng IDE
Lập trình giao diện - Điều khiển & xử lý sự kiện 41
// Mã được sinh bởi IDE
this.lblLabel.ForeColor = System.Drawing.SystemColors.HotTrack;
this.lblLabel.Location = new System.Drawing.Point(27, 41);
this.lblLabel.Name = "lblLabel";
this.lblLabel.Size = new System.Drawing.Size(69, 24);
this.lblLabel.TabIndex = 0;
this.lblLabel.Text = "Hello!!!";
42. Demo thiết lập thuộc tính
cho điều khiển bằng viết mã
private void Form1_Load(object sender, EventArgs e)
{
lblHow.Text = "How are you?";
this.lblHow.ForeColor = System.Drawing.SystemColors.Highlight;
}
Lập trình giao diện - Điều khiển & xử lý sự kiện 42
private void Form1_Load(object sender, EventArgs e)
{
lblHow.Text = "How are you?";
this.lblHow.ForeColor = System.Drawing.SystemColors.Highlight;
}
43. VIẾT MÃ THÊM ĐIỀU
KHIỂN VÀO FORM
Lập trình giao diện - Điều khiển & xử lý sự kiện 43
VIẾT MÃ THÊM ĐIỀU
KHIỂN VÀO FORM
44. Có thể thêm điều khiển vào form bằng cách sử dụng
công cụ hoặc viết mã; trong lúc thiết kế hoặc trong quá
trình thực thi ứng dụng
Các bước để thêm điều khiển vào form
B1. Tạo thực thể của điều khiển
B2. Thêm điều khiển vào form
B3. Thiết lập các thuộc tính cho điều khiển
Viết mã thêm điều khiển vào form
Có thể thêm điều khiển vào form bằng cách sử dụng
công cụ hoặc viết mã; trong lúc thiết kế hoặc trong quá
trình thực thi ứng dụng
Các bước để thêm điều khiển vào form
B1. Tạo thực thể của điều khiển
B2. Thêm điều khiển vào form
B3. Thiết lập các thuộc tính cho điều khiển
Lập trình giao diện - Điều khiển & xử lý sự kiện 44
private void Form1_Load(object sender, EventArgs e)
{
CheckedListBox clb = new CheckedListBox();
Controls.Add(clb);
clb.Items.Add("hi");
clb.Items.Add("how");
clb.Items.Add("are");
clb.Items.Add("you");
}
1
2
3
45. SỰ KIỆN
CỦA ĐIỀU KHIỂN
Lập trình giao diện - Điều khiển & xử lý sự kiện 45
SỰ KIỆN
CỦA ĐIỀU KHIỂN
46. Visual Studio cung cấp rất nhiều sự kiện cho mỗi điều
khiển
Điều khiển button được cung cấp 60 sự kiện
Mỗi điều khiển được hỗ trợ một tập các sự kiện khác
nhau tùy vào đặc thù của điều khiển
Sự kiện được chia làm 3 nhóm chính
Sự kiện đối với chuột
MouseClick, MouseDown, MouseEnter…
Sự kiện đối với bàn phím
KeyUp, KeyDown..
Sự kiện khác
TextChanged, FontChanged…
Sự kiện điều khiển
Visual Studio cung cấp rất nhiều sự kiện cho mỗi điều
khiển
Điều khiển button được cung cấp 60 sự kiện
Mỗi điều khiển được hỗ trợ một tập các sự kiện khác
nhau tùy vào đặc thù của điều khiển
Sự kiện được chia làm 3 nhóm chính
Sự kiện đối với chuột
MouseClick, MouseDown, MouseEnter…
Sự kiện đối với bàn phím
KeyUp, KeyDown..
Sự kiện khác
TextChanged, FontChanged…
Lập trình giao diện - Điều khiển & xử lý sự kiện 46
47. Có 3 sự kiện chính của bàn phím
KeyDown
KeyPress
KeyUp
Khi một phím ký tự được nhấn thì các sự kiện xẩy ra
theo trình tự KeyDown, KeyPress và KeyUp
Khi một phím không phải ký tự được nhấn, chỉ có sự
kiện KeyDown và KeyUp
Sự kiện này sẽ được áp dụng cho điều khiển nào đang
nhận được focus
Sự kiện đối với bàn phím
Có 3 sự kiện chính của bàn phím
KeyDown
KeyPress
KeyUp
Khi một phím ký tự được nhấn thì các sự kiện xẩy ra
theo trình tự KeyDown, KeyPress và KeyUp
Khi một phím không phải ký tự được nhấn, chỉ có sự
kiện KeyDown và KeyUp
Sự kiện này sẽ được áp dụng cho điều khiển nào đang
nhận được focus
Lập trình giao diện - Điều khiển & xử lý sự kiện 47
48. Demo Sự kiện đối với bàn phím
Lập trình giao diện - Điều khiển & xử lý sự kiện 48
private void button1_KeyPress(object sender, KeyPressEventArgs e)
{
MessageBox.Show("Button 1");
}
private void button2_KeyPress(object sender, KeyPressEventArgs e)
{
MessageBox.Show("Button 2");
}
49. Demo Sự kiện đối với bàn phím
Lập trình giao diện - Điều khiển & xử lý sự kiện 49
Nhấn một phím bất kỳ khi
Button 1 được focus
Nhấn một phím bất kỳ khi
Button 2 được focus
50. Để gán một phương thức xử lý sự kiện cho một điều
khiển, cần nối phương thức xử lý sự kiện cho sự kiện
Mỗi phương thức xử lý sự kiện có thể nối cho nhiều sự
kiện
Xử lý sự kiện trong C#
SỰ KIỆN PHƯƠNG THỨC
XỬ LÝ SỰ KIỆN
button1.Click private void button1_Click(object
sender, EventArgs e)
{
}
Để gán một phương thức xử lý sự kiện cho một điều
khiển, cần nối phương thức xử lý sự kiện cho sự kiện
Mỗi phương thức xử lý sự kiện có thể nối cho nhiều sự
kiện
Lập trình giao diện - Điều khiển & xử lý sự kiện 50
PHƯƠNG THỨC
XỬ LÝ SỰ KIỆN
button1.Click private void button1_Click(object
sender, EventArgs e)
{
}
this.button1.Click += new System.EventHandler(this.button1_Click);
Mã này thuộc file Designer.cs, IDE tự sinh mã
51. Demo nối một phương thức
xử lý sự kiện với nhiều sự kiện
//Viết mã cho xử lý sự kiện
private void xoaTextBoxTong(object sender, EventArgs e){
txtTong.Text = "";
}
2
1
Lập trình giao diện - Điều khiển & xử lý sự kiện 51
Gán phương thức xử lý sự kiện
cho các TextBox Số kiện hàng
và Số sách trong mỗi kiện
this.txtSoKienHang.TextChanged += new
System.EventHandler(this.xoaTextBoxTong);
this.txtSoSach.TextChanged += new
System.EventHandler(this.xoaTextBoxTong);
Mã được IDE tự sinh
2
3
52. Demo nối một phương thức
xử lý sự kiện với nhiều sự kiện
Lập trình giao diện - Điều khiển & xử lý sự kiện 52
Nhập vào Số kiện hàng và
Số sách trong mỗi kiện
Nhập vào Số kiện hàng thì
giá trị trong TextBox Tổng
số sách: được xóa
53. Tìm hiểu các sự kiện hỗ trợ cho các điều khiển được học
ngày hôm nay
BÀI TẬP VỀ NHÀ
Lập trình giao diện - Điều khiển & xử lý sự kiện 53
54. .NET hỗ trợ rất nhiều điều khiển để thực thi hầu như các
thao tác mong muốn, các điều khiển được gom vào các
nhóm khác nhau tùy vào mục đích sử dụng
Các điều khiển CheckListBox, ListView, ProgressBar,
WebBrowser thuộc nhóm Common
Các điều khiển ConTextMenu, StatusStrip và
ToolStripContainer thuộc nhóm Menu&Toolbar
Tổng kết bài học
.NET hỗ trợ rất nhiều điều khiển để thực thi hầu như các
thao tác mong muốn, các điều khiển được gom vào các
nhóm khác nhau tùy vào mục đích sử dụng
Các điều khiển CheckListBox, ListView, ProgressBar,
WebBrowser thuộc nhóm Common
Các điều khiển ConTextMenu, StatusStrip và
ToolStripContainer thuộc nhóm Menu&Toolbar
Lập trình giao diện - Điều khiển & xử lý sự kiện 54
55. Visual Studio cung cấp rất nhiều sự kiện cho mỗi điều
khiển. Mỗi điều khiển được hỗ trợ một tập các sự kiện
khác nhau tùy vào đặc thù của điều khiển
Sự kiện được chia làm 3 nhóm chính: sự kiện đối với
chuột, sự kiện đối với bàn phím và sự kiện khác
Để gán một phương thức xử lý sự kiện cho một điều
khiển, cần nối phương thức xử lý sự kiện cho sự kiện
Mỗi phương thức sự kiện có thể nối cho nhiều sự kiện
Tổng kết bài học
Visual Studio cung cấp rất nhiều sự kiện cho mỗi điều
khiển. Mỗi điều khiển được hỗ trợ một tập các sự kiện
khác nhau tùy vào đặc thù của điều khiển
Sự kiện được chia làm 3 nhóm chính: sự kiện đối với
chuột, sự kiện đối với bàn phím và sự kiện khác
Để gán một phương thức xử lý sự kiện cho một điều
khiển, cần nối phương thức xử lý sự kiện cho sự kiện
Mỗi phương thức sự kiện có thể nối cho nhiều sự kiện
Lập trình giao diện - Điều khiển & xử lý sự kiện 55