Upload
huyitbcy
View
212
Download
1
Embed Size (px)
Citation preview
Tìm hiểu về User Control và Delegate, Event trong .NET
ĐẶNG BÌNH PHƯƠNGGVHD:
Nội dung trình bày
• Giới thiệu về User Control
• Tạo User Control trong C#
• Thêm các Property cho Control
• Thêm các hàm (thường & xử lý sự kiện)
• Tìm hiểu và sử dụng Delegate và Event
• Kết luận
Nội dung trình bày
• Giới thiệu về User Control
• Tạo User Control trong C#
• Thêm các Property cho Control
• Thêm các hàm (thường & xử lý sự kiện)
• Tìm hiểu và sử dụng Delegate và Event
• Kết luận
• Ví dụ 1– Viết chương trình cho phép người sử dụng:
• Nhập địa chỉ của nhà bao gồm:– Số nhà– Đường– Phường– Quận– Thành Phố
• Mỗi khi người sử dụng nhập NCV vào đường thì tự động đường chuyển sang chuỗi Nguyễn Cửu Vân.
Giới thiệu về User Control
– Ý tưởng?• Tạo một form có các label và 5 textbox cho phép
nhập: số nhà, đường, phường, quận, thành phố.
• Viết hàm để xử lý cho sự kiện TextChanged của textbox đường để mỗi khi người sử dụng nhập chuỗi NCV thì tự động chuỗi Nguyễn Cửu Vân sẽ được thay thế.
Giới thiệu về User Control
• Ví dụ 2– Viết chương trình cho phép người sử dụng:
• Nhập 3 địa chỉ của nhà bao gồm:– Số nhà– Đường– Phường– Quận– Thành Phố
• Mỗi khi người sử dụng nhập chuỗi NCV vào đường của địa chỉ nào thì tự động đường của địa chỉ đó chuyển sang chuỗi Nguyễn Cửu Vân.
Giới thiệu về User Control
– Ý tưởng?• Tạo một form có các label và 15 textbox cho phép
nhập: số nhà, đường, phường, quận, thành phố cho 3 địa chỉ.
• Viết 3 hàm giống nhau để xử lý cho 3 sự kiện TextChanged của textbox đường để mỗi khi người sử dụng nhập chuỗi NCV thì tự động chuỗi Nguyễn Cửu Vân sẽ được thay thế.
• “Hình như” công việc có vẻ nhàm chán và mất thời gian!!!
Giới thiệu về User Control
– Ý tưởng mới • Nhóm các label và 5 textbox thể hiện số nhà,
đường, phường, quận, thành phố vào một lớp (class) thành một control duy nhất có thể tái sử dụng.
• Viết code cho hàm xử lý sự kiện cho textbox đường xử lý việc chuyển NCVNguyễn Cửu Vân
• Mỗi khi có yêu cầu nhập số nhà, ta chỉ việc kéo nó vào form.
• Khái niệm User Control ra đời
Giới thiệu về User Control
Nội dung trình bày
• Giới thiệu về User Control
• Tạo User Control trong C#
• Thêm các Property cho Control
• Thêm các hàm (thường & xử lý sự kiện)
• Tìm hiểu và sử dụng Delegate và Event
• Kết luận
• Tạo User Control– Mở Microsoft Visual Studio .NET 2003– Tạo một ứng dụng Windows Application
(thuộc danh sách Visual C# Projects) với tên tùy ý (ví dụ: VD1)
– Thêm User Control vào project bằng cách chọn Project > User Control. Đặt tên User Control đó (ví dụ: Diachi.cs)
Tạo User Control trong C#
– Thêm các control (textbox và label) thể hiện số nhà, đường, phường, quận, thành phố như sau:
– Dịch project (Ctrl + Shift + B) và chọn lại Form1.– Ở cuối của toolbox trong tab Windows Form sẽ có
1 control mới được thêm vào có tên là Diachi. Kéo Control đó vào form và chạy ứng dụng. (Hoặc kéo file Diachi.cs có trong cây Solution Explorer vào form)
Tạo User Control trong C#
- Chạy thử ứng dụng.
Tạo User Control trong C#
- Để ý, trong cửa số Properties của control Diachi vừa mới thêm vào form, trừ các chỗ cho ta đặt lại các property cho control như những control thông thường (Name, Location, Size…), không có chỗ nào cho ta đặt giá trị cho số nhà, đường, phường, quận và thành phố.
- Làm sao để thêm các property cho control Diachi cho phép ta chỉnh số nhà, đường, quận, thành phố???
Tạo User Control trong C#
Nội dung trình bày
• Giới thiệu về User Control
• Tạo User Control trong C#
• Thêm các Property cho Control
• Thêm các hàm (thường & xử lý sự kiện)
• Tìm hiểu và sử dụng Delegate và Event
• Kết luận
• Thêm các Property– Trong lớp Diachi (mở file Diachi.cs), thêm
vào các dòng code sau:
– Thêm tương tự cho property đường, phường, quận, thành phố
Thêm các Property cho UC
[Category ("Data"), Description("So nha cua dia chi")]public string Sonha{
get {return this.txtSonha.Text;}set {this.txtSonha.Text = value;}
}
- Trong cửa sổ Properties của control, đặt các giá trị tương tự như sau thì lập tức bên form cũng được cập nhật.
Thêm các Property cho UC
Nội dung trình bày
• Giới thiệu về User Control
• Tạo User Control trong C#
• Thêm các Property cho Control
• Thêm các hàm (thường & xử lý sự kiện)
• Tìm hiểu và sử dụng Delegate và Event
• Kết luận
• Thêm các hàm (phương thức)– Muốn thêm hàm có tên Lay_Diachi để lấy địa chỉ
đầy đủ, ta thêm các dòng sau vào lớp Diachi:
Thêm các phương thức cho UC
public string Lay_Diachi(){
string strDiachi = Sonha;strDiachi += " duong " + Duong;strDiachi += " phuong " + Phuong;strDiachi += " quan " + Quan;strDiachi += " thanh pho " + Thanhpho;
return strDiachi;}
• Thêm các hàm xử lý sự kiện– Thêm hàm xử lý sự kiện cho textbox
txtDuong để mỗi khi người sử dụng nhập chuỗi “NCV” vào tên đường thì lập tức tên đường chuyển thành “Nguyễn Cửu Vân”:• Chọn cửa sổ thiết kế (Design) của control
Diachi. • Chọn textbox txtDuong
Thêm các phương thức cho UC
• Trong cửa sổ Properties (của textbox này), mục Events, ta nhấp đúp vào chỗ sự kiện TextChanged để bổ sung hàm xử lý cho sự kiện này (hoặc gõ một tên hàm theo ý của mình).
Thêm các phương thức cho UC
• Viết code cho sụ kiện như sau:
• Chạy thử chương trình
Thêm các phương thức cho UC
private void txtDuong_TextChanged(object sender, System.EventArgs e){
if (txtDuong.Text=="NCV")txtDuong.Text = "Nguyen Cuu Van";
else if (txtDuong.Text=="DBP")txtDuong.Text = “Dien Bien Phu”;
}
Thêm các phương thức cho UC
• Vấn đề nảy sinh:– Giả sử ta bổ sung thêm 1 hay nhiều User
Control Diachi nữa. Vấn đề đặt ra là làm sao để khi ta gõ nội dung vào User Control Diachi đầu tiên thì tất cả các User Control Diachi còn lại cũng đồng loạt thay đổi theo???
– Trong lúc lập trình (viết code cho UC) ta chưa biết phương thức nào của đối tượng nào sẽ được gọi???
– Khái niệm Delegate và Event.
Nội dung trình bày
• Giới thiệu về User Control
• Tạo User Control trong C#
• Thêm các Property cho Control
• Thêm các hàm (thường & xử lý sự kiện)
• Tìm hiểu và sử dụng Delegate và Event
• Kết luận
• Khái niệm Delegate:– Có nghĩa là ủy thác, ủy quyền.– Trong lập trình, đôi lúc ta gặp tình huống
phải thực thi một hành động nào đó, nhưng lại không biết sẽ gọi phương thức nào của đối tượng nào.
– Chương trình sẽ làm việc với đối tượng ủy thác, ủy quyền.
Delegate và Event
• Khái niệm Event:– Có nghĩa là sự kiện.– Ví dụ như sự kiện TextChanged,
OnMouseMove, OnMouseUp, OnMouseDown…
• Ví dụ:– Thêm vào form thêm 2 User Control (UC).
Cập nhật chương trình để khi ta gõ nội dung vào UC Diachi đầu tiên thì tất cả các UC Diachi còn lại cũng đồng loạt thay đổi theo.
Delegate và Event
• Bước thực hiện:– Thêm vào form 2 User Control Diachi vào
form. – Trong lớp Form1, ta bổ sung thêm 2 hàm có
cùng dạng (kiểu trả về là void, 1 tham số đầu vào kiểu string) để cập nhật textbox txtDuong của 2 User Control Diachi.
Delegate và Event
- Hai hàm y hệt nhau có nhiệm vụ cập nhật lại giá trị cho textbox txtDuong của 2 User Control diachi2 và diachi3:
Delegate và Event
void Duong2Changed(string strDuong){
// Gán giá trị của Duong trong diachi2 bằng strDuongdiachi2.Duong = strDuong;
}
void Duong3Changed(string strDuong){
// Gán giá trị của Duong trong diachi3 bằng strDuongdiachi3.Duong = strDuong;
}
– Tại thời điểm viết code cho UC Diachi, ta chưa xác định được hàm nào và có bao nhiêu hàm (có kiểu trả về là void, 1 tham số đầu vào kiểu string) sẽ được gọi (để cập nhật các textbox txtDuong của UC Diachi khác) mỗi khi textbox txtDuong của UC này thay đổi. Thêm vào lớp Diachi khai báo:
Delegate và Event
public delegate void Diachi_DuongChangedHandler(string strDuong);public event Diachi_DuongChangedHandler Diachi_DuongChanged;
– Ý nghĩa:• Dùng từ khóa delegate để khai báo một hàm ủy
thác (ủy quyền) cùng kiểu trả về (void) và tham số đầu vào (string) với hàm sẽ gọi (để cập nhật giá trị của textbox txtDuong của các UC khác).
• Lúc này, UC sẽ chỉ làm việc với hàm ủy thác này.• Dùng từ khóa event để khai báo một sự kiện để
mỗi khi người sử dụng cập nhật textbox txtDuong của UC này, ta sẽ “phát” sự kiện này đi và lúc đó, các hàm giống với hàm ủy thác có gắn với sự kiện này sẽ được thực hiện.
Delegate và Event
– Trong hàm xử lý cho sự kiện TextChanged của textbox txtDuong ở trên, ta bổ sung các dòng lệnh sau để “phát” sự kiện đó đi nếu nó khác null.
Delegate và Event
private void txtDuong_TextChanged(object sender, System.EventArgs e){
if (txtDuong.Text=="NCV")txtDuong.Text = “Nguyen Cuu Van";
else if (txtDuong.Text=="DBP")txtDuong.Text = “Dien Bien Phu";
if (Diachi_DuongChanged!=null)Diachi_DuongChanged(txtDuong.Text);
}
– Trong hàm tạo của Form1, ta thêm các khai báo sau để gán hàm có cùng kiểu với hàm ủy thác vào sự kiện:
– Thêm hàm ủy thác: +=– Bớt hàm ủy thác: -=
Delegate và Event
diachi1.Diachi_DuongChanged +=new Diachi.Diachi_DuongChangedHandler(Duong2Changed);diachi1.Diachi_DuongChanged +=new Diachi.Diachi_DuongChangedHandler(Duong3Changed);
Nội dung trình bày
• Giới thiệu về User Control
• Tạo User Control trong C#
• Thêm các Property cho Control
• Thêm các hàm (thường & xử lý sự kiện)
• Tìm hiểu và sử dụng Delegate và Event
• Kết luận
Demo vàTrả lời thắc mắc
?