33
Tìm hiểu vUser Control và Delegate, Event trong .NET ĐẶNG BÌNH PHƯƠNG GVHD:

User Control

Embed Size (px)

Citation preview

Page 1: User Control

Tìm hiểu về User Control và Delegate, Event trong .NET

ĐẶNG BÌNH PHƯƠNGGVHD:

Page 2: 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

Page 3: 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

Page 4: User Control

• 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

Page 5: 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

Page 6: 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

Page 7: 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

Page 8: 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

Page 9: 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

Page 10: User Control

• 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#

Page 11: User Control

– 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#

Page 12: User Control

- Chạy thử ứng dụng.

Tạo User Control trong C#

Page 13: User Control

- Để ý, 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#

Page 14: 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

Page 15: User Control

• 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;}

}

Page 16: User Control

- 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

Page 17: 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

Page 18: User Control

• 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;}

Page 19: User Control

• 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

Page 20: User Control

• 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

Page 21: User Control

• 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”;

}

Page 22: User Control

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.

Page 23: 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

Page 24: User Control

• 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

Page 25: User Control

• 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

Page 26: User Control

• 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

Page 27: User Control

- 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;

}

Page 28: User Control

– 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;

Page 29: User Control

– Ý 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

Page 30: User Control

– 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);

}

Page 31: User Control

– 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);

Page 32: 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

Page 33: User Control

Demo vàTrả lời thắc mắc

?