Bài giảng Lập trình hướng đối tượng - Chương 7: Tương tác với người dùng trong ứng dụng C#

Chương 7  
Tương tác với người dùng trong ứng dụng C#  
7.0 Dẫn nhập  
7.1 Tổng quát về tương tác giữa người dùng & chương trình  
7.2 Đối tượng vẽ và cơ chế vẽ nội dung  
7.3 Xuất chuỗi văn bản  
7.4 Xuất ảnh bitmap  
7.5 Xuất hình ₫ồ họa toán học  
7.6 Thí dụ viết ứng dụng vẽ ₫ối tượng phức hợp  
7.7 Xây dựng ₫ối tượng giao diện có hình dạng tùy ý  
7.8 Kết chương  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 1  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.0 Dẫn nhập  
Chương này giới thiệu cách thức tương tác giữa người dùng và  
chương trình ₫ể nhập/xuất dữ liệu.  
Chương này cũng giới thiệu các ₫ối tượng giao diện cùng các tác  
vụ xuất dữ liệu dạng chuỗi, dạng bitmap, dạng hình ₫ồ họa toán  
học. Kết hợp 3 loại dữ liệu này, ta có thể tạo kết xuất bất kỳ.  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 2  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.1 Tổng quát về tương tác người dùng/chương trình  
Trong lúc chương trình chạy, nó thường phải tương tác với người  
dùng. Sự tương tác gồm 2 hoạt ₫ộng chính :  
. chờ nhận dữ liệu do người dùng cung cấp hay chờ nhận lệnh  
của người dùng ₫ể thực thi 1 chức năng nào ₫ó.  
. hiển thị thông báo và/hoặc kết quả tính toán ra màn hình/máy  
in ₫ể người dùng biết và sử dụng.  
Sự tương tác giữa người dùng và máy tính ₫ược thực hiện thông  
qua các thiết bị nhập/xuất (thiết bị I/O - input/output) như bàn  
phím/chuột ₫ể nhập dữ liệu hay lệnh, màn hình/máy in ₫ể xuất kết  
quả hay thông báo...  
Hiện có hàng trăm hãng chế tạo thiết bị I/O, mỗi hãng chế tạo rất  
nhiều model của cùng 1 thiết bị (td. hãng HP chế rất nhiều model  
máy in phun mực, máy in laser,...). Mỗi model thiết bị của từng  
hãng có những tính chất vật lý riêng và khác với các model khác.  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 3  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.1 Tổng quát về tương tác người dùng/chương trình  
Để giúp người lập trình truy xuất các thiết bị I/O dễ dàng, ₫ộc lập  
với tính chất phần cứng của thiết bị, HĐH Windows và VC# ₫ã che  
dấu mọi tính chất phần cứng của các thiết bị và cung cấp cho người  
lập trình 1 giao tiếp sử dụng duy nhất, ₫ộc lập với thiết bị : người  
dùng sẽ tương tác với chương trình thông qua các ₫ối tượng giao  
diện :  
. người dùng ra lệnh bằng cách kích hoạt sự kiện xác ₫ịnh của 1  
₫ối tượng giao diện. Thí dụ click chuột vào button "Bắt ₫ầu giải"  
₫ể ra lệnh chương trình giải dùm phương trình bậc 2 có 3 tham  
số a, b, c ₫ã nhập.  
. nhập giá trị ₫úng/sai thông qua chọn/cấm chọn RadioButton  
hay checkbox.  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 4  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.1 Tổng quát về tương tác người dùng/chương trình  
. nhập chọn lựa 1/n thông qua chọn RadioButton tương ứng  
trong GroupBox, hay chọn mục tương ứng trong Listbox,  
ComboBox.  
. nhập số nguyên, số thực, chuỗi thông qua TextBox...  
. xuất kết quả ra màn hình thông qua các ₫ối tượng RadioButton,  
Checkbox, TextBox, ListBox, ComboxBox, TreeView...  
Trong trường hợp cần xuất kết quả phức tạp bất kỳ, ta xem nó như  
là tập hợp nhiều chuỗi văn bản, nhiều phần tử ảnh bitmap, nhiều  
phần tử ₫ồ họa toán học như hình chữ nhật, hình tròn,... Xuất kết  
quả phức tạp là quá trình lặp vẽ từng phần tử cấu thành kết quả  
phức tạp.  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 5  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.2 Đối tượng vẽ và cơ chế vẽ nội dung  
Các ₫ối tượng Form, PictureBox, Printer cho phép vẽ nội dung bất  
kỳ lên chúng.  
Mỗi lần cần vẽ lại nội dung của ₫ối tượng (lúc bắt ₫ầu hiển thị, lúc  
thay ₫ổi vị trí, kích thước của ₫ối tượng), máy sẽ tạo sự kiện Paint,  
sự kiện này sẽ kích hoạt hàm xử lý tương ứng của ₫ối tượng. Như  
vậy, nếu muốn vẽ thông tin chi tiết lên ₫ối tượng, người lập trình  
phải ₫ịnh nghĩa hàm xử lý sự kiện Paint của ₫ối tượng và hiện  
thực thuật giải ₫ể vẽ chi tiết thông tin lên ₫ối tượng.  
Khi cần thiết, người lập trình có thể gọi tác vụ Refresh() của ₫ối  
tượng ₫ể nhờ máy tạo dùm sự kiện Paint hầu vẽ lại ₫ối tượng.  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 6  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.2 Đối tượng vẽ và cơ chế vẽ nội dung  
Template của hàm xử lý sự kiện Paint của ₫ối tượng như sau :  
private void Form1_Paint(object sender, PaintEventArgs e) {  
//xác ₫ịnh ₫ối tượng mục tiêu  
Control control = (Control)sender;  
//thay ₫ổi kích thước, vị trí nếu cần  
//xác ₫ịnh ₫ối tượng graphics (₫ối tượng vẽ) của ₫ối tượng  
Graphics g = e.Graphics;  
//gọi các tác vụ vẽ của ₫ối tượng vẽ như DrawImage,  
//DrawString, DrawLine,... ₫ể xuất các thông tin bitmap,  
//chuỗi văn bản, hình ₫ồ họa toán học.  
}
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 7  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.3 Xuất chuỗi văn bản  
Đối tượng vẽ (graphics) cung cấp khoảng 70 tác vụ vẽ khác nhau,  
mỗi tác vụ gồm nhiều biến thể (overloaded) ₫ể giúp ta ₫iều khiển  
vẽ nội dung dễ dàng, tiện lợi. Ở ₫ây chúng ta chỉ giới thiệu 1 số tác  
vụ phổ dụng.  
Tác vụ DrawString cho phép xuất chuỗi văn bản theo ₫ịnh dạng  
xác ₫ịnh. Nó có nhiều biến thể, biến thể khá mạnh và dùng phổ  
biến có ₫ặc tả như sau :  
public void DrawString (  
string s,  
Font font,  
Brush brush,  
float x,  
//chuỗi cần xuất  
//các tính chất font chữ cần dùng ₫ể vẽ  
//màu vẽ chuỗi  
//toạ ₫ộ x của ₫iểm canh lề chuỗi  
//tọa ₫ộ y của ₫iểm canh lề chuỗi  
float y,  
StringFormat format); //thuộc tính ₫iều khiển vẽ chuỗi  
Khoa Khoa học & Kỹ thuật Máy tính  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 8  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.3 Xuất chuỗi văn bản  
Thí dụ ta có biến now miêu tả thông tin thời ₫iểm hiện hành, ta có  
thể viết ₫oạn code sau ₫ể rút trích thông tin từbiến now và xuất  
thông tin giờ/phút/giây ra giữa form ứng dụng :  
//tạo chuỗi miêu tả giờ/phút/giây hiện hành  
String buf = "" + now.Hour + ":" + now.Minute + ":" + now.Second;  
//tạo ₫ối tượng font chữ cần dùng  
Font myFont = new Font("Helvetica", 11);  
//tạo biến miêu tả chế ₫ộ canh giữa khi xuất chuỗi  
StringFormat format1 = new StringFormat(StringFormatFlags.NoClip);  
format1.Alignment = StringAlignment.Center;  
//xuất chuỗi miêu tả giờ/phút/giây  
g.DrawString(buf, myFont, System.Drawing.Brushes.Blue,  
xo, rec.Height - 35, format1);  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 9  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.4 Xuất ảnh bitmap  
Tác vụ DrawImage cho phép vẽ bitmap từnguồn có sẵn, thí dụ từ  
file bitmap. Nó có nhiều biến thể, biến thể khá mạnh và dùng phổ  
biến có ₫ặc tả như sau :  
public void DrawImage (  
Image image,  
Rectangle destRect,  
//₫ối tượng chứa ảnh bitmap gốc  
//vùng chữ nhật chứa kết quả  
//trong ₫ối tượng vẽ  
int srcX,  
int srcY,  
int srcWidth,  
int srcHeight,  
GraphicsUnit srcUnit,  
//tọa ₫ộ x của vùng ảnh gốc  
//tọa ₫ộ y của vùng ảnh gốc  
//₫ộ rộng vùng ảnh gốc cần vẽ  
//₫ộ cao vùng ảnh gốc cần vẽ  
//₫ơn vị ₫o lường ₫ược dùng  
ImageAttributes imageAttr) //cách thức xử lý từng pixel  
//ảnh gốc khi vẽ  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 10  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.4 Xuất ảnh bitmap  
srcX, srcY, srcWidth, srcHeight  
destRect  
Image  
Môn : Lập trình hướng ₫ối tượng  
Khoa Khoa học & Kỹ thuật Máy tính  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 11  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.5 Xuất hình ₫ồ họa - Tác vụ DrawLine  
Tác vụ DrawLine cho phép vẽ ₫oạn thẳng ₫ược xác ₫ịnh bởi 2  
₫ỉnh. Nó có nhiều biến thể, biến thể khá mạnh và dùng phổ biến  
có ₫ặc tả như sau :  
public void DrawLine (  
Pen pen, //miêu tả nét, màu ₫ường vẽ  
int x1,  
int y1,  
int x2,  
int y2);  
//tọa ₫ộ x của ₫iểm ₫ầu  
//tọa ₫ộ y của ₫iểm ₫ầu  
//tọa ₫ộ x của ₫iểm cuối  
//tọa ₫ộ y của ₫iểm cuối  
Trước khi gọi DrawLine, phải tạo ₫ối tượng Pen miêu tả nét, màu  
của ₫ường vẽ :  
//tạo pen với màu Blue, nét vẽ 2 pixel  
Pen pen = new Pen(Color.FromArgb(0,0, 255), 2);  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 12  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.5 Xuất hình ₫ồ họa - Tác vụ DrawLines  
Tác vụ DrawLines cho phép vẽ nhiều ₫oạn thẳng liên tiếp nhau  
₫ược xác ₫ịnh bởi danh sách các ₫ỉnh. Nó có nhiều biến thể, biến  
thể khá mạnh và dùng phổ biến có ₫ặc tả như sau :  
public void DrawLines (  
Pen pen,  
//miêu tả nét, màu ₫ường vẽ  
Point[] points); //danh sách các ₫ỉnh  
Trước khi gọi DrawLines, phải tạo ₫ối tượng Pen miêu tả nét, màu  
của ₫ường vẽ :  
//tạo pen với màu Blue, nét vẽ 2 pixel  
Pen pen = new Pen(Color.FromArgb(0,0, 255), 2);  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 13  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.5 Xuất hình ₫ồ họa - Tác vụ DrawRectangle  
Tác vụ DrawRectangle cho phép vẽ hình chữ nhật ₫ược xác ₫ịnh  
bởi 2 ₫ỉnh chéo nhau. Nó có nhiều biến thể, biến thể khá mạnh và  
dùng phổ biến có ₫ặc tả như sau :  
public void DrawRectangle (  
Pen pen, //miêu tả nét, màu ₫ường vẽ  
int x1,  
int y1,  
int x2,  
int y2)  
//tọa ₫ộ x của ₫iểm ₫ầu  
//tọa ₫ộ y của ₫iểm ₫ầu  
//tọa ₫ộ x của ₫iểm cuối  
//tọa ₫ộ y của ₫iểm cuối  
Lưu ý tác vụ DrawRectangle chỉ vẽ ₫ường biên, muốn tô nền hình  
chữ nhật, ta cần gọi tác vụ FillRectangle (₫ặc tả giống như tác vụ  
DrawRectangle), chỉ khác là tham số ₫ầu là ₫ối tượng mẫu tô :  
//tạo brush với màu ₫ỏ, tô ₫ặc  
Brush brush = new SolidBrush(Color.FromArgb(255, 0, 0));  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 14  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.5 Xuất hình ₫ồ họa - Tác vụ DrawEllipse  
Tác vụ DrawEllipse cho phép vẽ hình ellipse ₫ược xác ₫ịnh bởi  
hình chữ nhật bao quanh nó. Nó có nhiều biến thể, biến thể khá  
mạnh và dùng phổ biến có ₫ặc tả như sau :  
public void DrawEllipse (  
Pen pen, //miêu tả nét, màu ₫ường vẽ  
int x1,  
int y1,  
int x2,  
int y2)  
//tọa ₫ộ x của ₫iểm ₫ầu  
//tọa ₫ộ y của ₫iểm ₫ầu  
//tọa ₫ộ x của ₫iểm cuối  
//tọa ₫ộ y của ₫iểm cuối  
Lưu ý tác vụ DrawEllipse chỉ vẽ ₫ường biên, muốn tô nền hình  
ellipse, ta cần gọi tác vụ FillEllipse (₫ặc tả giống như tác vụ  
DrawEllipse), chỉ khác là tham số ₫ầu là ₫ối tượng mẫu tô :  
//tạo brush với màu ₫ỏ, tô ₫ặc  
Brush brush = new SolidBrush(Color.FromArgb(255, 0, 0));  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 15  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.5 Xuất hình ₫ồ họa - Tác vụ DrawArc  
Tác vụ DrawArc cho phép vẽ 1 phần ₫ường ellipse ₫ược xác ₫ịnh  
bởi hình chữ nhật bao quanh nó. Nó có nhiều biến thể, biến thể  
khá mạnh và dùng phổ biến có ₫ặc tả như sau :  
public void DrawArc (  
Pen pen,  
Rectangle rect,  
//miêu tả nét, màu ₫ường vẽ  
//miêu tả hình chữ nhật ngoại tiếp  
float startAngle, //góc bắt ₫ầu (theo chiều kim ₫ồng hồ)  
float sweepAngle ) //₫ộ lớn phần ₫ường ellipse cần vẽ  
Lưu ý tác vụ DrawArc chỉ vẽ ₫ường biên, không có tác vụ FillArc  
₫ể tô nền.  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 16  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.5 Xuất hình ₫ồ họa - Tác vụ DrawPie  
Tác vụ DrawPie cho phép vẽ 1 phần bánh ellipse ₫ược xác ₫ịnh bởi  
hình chữ nhật bao quanh nó. Nó có nhiều biến thể, biến thể khá  
mạnh và dùng phổ biến có ₫ặc tả như sau :  
public void DrawPie (  
Pen pen,  
//miêu tả nét, màu ₫ường vẽ  
Rectangle rect,  
//miêu tả hình chữ nhật ngoại tiếp  
float startAngle, //góc bắt ₫ầu (theo chiều kim ₫ồng hồ)  
float sweepAngle ) //₫ộ lớn phần bánh ellipse cần vẽ  
Lưu ý tác vụ DrawPie chỉ vẽ ₫ường biên, muốn tô nền bánh ellipse,  
ta cần gọi tác vụ FillPie (₫ặc tả giống như tác vụ DrawPie), chỉ  
khác là tham số ₫ầu là ₫ối tượng mẫu tô :  
//tạo brush với màu ₫ỏ, tô ₫ặc  
Brush brush = new SolidBrush(Color.FromArgb(255, 0, 0));  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 17  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.5 Xuất hình ₫ồ họa - Tác vụ DrawPolygon  
Tác vụ DrawPolygon cho phép vẽ hình nhiều cạnh khép kín. Nó có  
nhiều biến thể, biến thể khá mạnh và dùng phổ biến có ₫ặc tả như  
sau :  
public void DrawPolygon (  
Pen pen,  
//miêu tả nét, màu ₫ường vẽ  
Point[] points) //danh sách các ₫ỉnh của polygon  
Lưu ý tác vụ DrawPolygon chỉ vẽ ₫ường biên, muốn tô nền hình  
polygon, ta cần gọi tác vụ FillPolygon (₫ặc tả giống như tác vụ  
DrawPolygon), chỉ khác là tham số ₫ầu là ₫ối tượng mẫu tô :  
//tạo brush với màu ₫ỏ, tô ₫ặc  
Brush brush = new SolidBrush(Color.FromArgb(255, 0, 0));  
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 18  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.5 Xuất hình ₫ồ họa - Tác vụ DrawCurve  
Tác vụ DrawCurve cho phép vẽ cong trơn xuyên qua nhiều ₫iểm  
theo phép tension xác ₫ịnh. Nó có nhiều biến thể, biến thể khá  
mạnh và dùng phổ biến có ₫ặc tả như sau :  
public void DrawCurve (  
Pen pen,  
//miêu tả nét, màu ₫ường vẽ  
Point[] points  
int offset,  
//danh sách các ₫ỉnh của polygon  
//vị trí ₫iểm bắt ₫ầu vẽ trong danh sách  
int numberOfSegments, //số ₫oạn cần vẽ  
float tension); //phép tension ₫ược dùng  
)
Môn : Lập trình hướng ₫ối tượng  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 19  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
7.5 Xuất hình ₫ồ họa - Tác vụ DrawCurve  
private void Form1_Paint(object sender, PaintEventArgs e) {  
//tạo 2 bút vẽ cho ₫ường thẳng và cong  
Pen redPen = new Pen(Color.Red, 3);  
Pen greenPen = new Pen(Color.Green, 3);  
//tạo các ₫ỉnh  
Point point1 = new Point(10, 100), point2 = new Point(40, 75);  
Point point3 = new Point(70, 125), point4 = new Point(100, 50);  
Point point5 = new Point(130, 180), point6 = new Point(160, 40);  
Point point7 = new Point(200, 100);  
Point[] curvePoints = { point1, point2, point3, point4, point5, point6, point7 };  
//vẽ các ₫oạn thẳng.  
e.Graphics.DrawLines(redPen, curvePoints);  
//thiết lập offset, số ₫oạn cong, và tension.  
int offset = 0, numSegments = 6;  
float tension = 0.5F;  
//vẽ ₫ường cong trơn qua các ₫ỉnh.  
e.Graphics.DrawCurve(greenPen, curvePoints, offset, numSegments, tension);  
}
Môn : Lập trình hướng ₫ối tượng  
Khoa Khoa học & Kỹ thuật Máy tính  
Chương 7 : Tương tác với người dùng trong ứng dụng C#  
Slide 20  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Tải về để xem bản đầy đủ
pdf 41 trang myanh 22260 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hướng đối tượng - Chương 7: Tương tác với người dùng trong ứng dụng C#", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_chuong_7_tuong_tac_voi_n.pdf