intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Đề cương môn học: Công nghệ .NET

Chia sẻ: Tuanlong Long | Ngày: | Loại File: PDF | Số trang:125

272
lượt xem
31
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Như đã đề cập thì CLR thực hiện quản lý bộ nhớ, quản lý thực thi tiểu trình, thực thi mã nguồn, xác nhận mã nguồn an toàn, biên bịch và các dịch vụ hệ thống khác. Những đặc tính trên là nền tảng cơ bản cho những mã nguồn được quản lý chạy trên CLR. Do chú trọng đến bảo mật, những thành phần được quản lý được cấp những mức độ quyền hạn khác nhau, phụ thuộc vào nhiều yếu tố nguyên thủy của...

Chủ đề:
Lưu

Nội dung Text: Đề cương môn học: Công nghệ .NET

  1. Đề cương môn học: Công nghệ .NET MỤC LỤC MỤC LỤC ......................................................................................................... 1 CHƯƠNG 1: KIẾN TRÚC CỦA .NET .............................................................. 3 1.1. Môi trường thực thi ngôn ngữ chung – CLR .......................................... 3 1.2. Ngôn ngữ trung gian - IL ....................................................................... 4 1.3. Giới thiệu về .Net Framework ................................................................ 5 CHƯƠNG 2: LẬP TRÌNH WINDOWS FORMS............................................... 7 2.1. Tạo một ứng dụng Windows form ......................................................... 7 2.2. Lớp Control ........................................................................................... 8 2.3. Form ...................................................................................................... 8 2.3.1. Chức năng ........................................................................................ 8 2.3.2. Một số thuộc tính thường dùng ........................................................ 8 2.3.3. Một số sự kiện thường dùng........................................................... 10 2.4. Một số control ...................................................................................... 16 2.4.1. Textbox.......................................................................................... 16 2.4.2. RichTextBox.................................................................................. 25 2.4.3. DataGridView................................................................................ 32 2.4.4. ListView ........................................................................................ 56 2.5. User Control ........................................................................................ 78 2.6. Thao tác với file XML ......................................................................... 78 2.7. Thao tác với Registry ........................................................................... 83 CHƯƠNG 3: LẬP TRÌNH CƠ SỞ DỮ LIỆU .................................................. 86 3.1. Giới thiệu ADO.NET ........................................................................... 86 3.2. Các mô hình thao tác với CSDL........................................................... 87 -1-
  2. Đề cương môn học: Công nghệ .NET 3.3. Kết nối đến nguồn dữ liệu bằng đối tượng Connection ........................ 88 3.4. Thực thi câu lệnh SQL bằng đối tượng Command ............................... 93 3.5. Truy vấn và nhận về dữ liệu với DataReader ..................................... 101 3.6. Cập nhật và truy vấn dữ liệu với đối tượng DataAdapter ................... 104 3.7. Mô hình DataSet ................................................................................ 107 3.8. Đối tượng Parameter .......................................................................... 109 3.9. Ràng buộc dữ liệu với các điều khiển................................................. 113 3.10. Sử dụng DataView trong sắp xếp và tìm kiếm dữ liệu..................... 113 3.11. LINQ .............................................................................................. 113 CHƯƠNG 4: CRYSTAL REPORT ............................................................... 114 4.1. Thiết kế báo cáo với Crystal Report ................................................... 114 4.2. Nạp và hiển thị Report trong chương trình ......................................... 122 4.3. Thiết kế Report động ......................................................................... 123 -2-
  3. Đề cương môn học: Công nghệ .NET CHƯƠNG 1: KIẾN TRÚC CỦA .NET 1.1. Môi trường thực thi ngôn ngữ chung – CLR Như đã đề cập thì CLR thực hiện quản lý bộ nhớ, quản lý thực thi tiểu trình, thực thi mã nguồn, xác nhận mã nguồn an toàn, biên bịch và các dịch vụ hệ thống khác. Những đặc tính trên là nền tảng cơ bản cho những mã nguồn được quản lý chạy trên CLR. Do chú trọng đến bảo mật, những thành phần được quản lý được cấp những mức độ quyền hạn khác nhau, phụ thuộc vào nhiều yếu tố nguyên thủy của chúng như: liên quan đến Internet, hệ thống mạng trong nhà máy, hay một máy tính cục bộ. Điều này có nghĩa rằng, một thành phần được quản lý có thể có hay không có quyền thực hiện một thao tác truy cập tập tin, thao tác truy cập registry, hay các chức năng nhạy cảm khác. CLR thúc đẩy việc mã nguồn thực hiện việc truy cập được bảo mật. Ví dụ, người sử dụng giới hạn rằng việc thực thi nhúng vào trong một trang web có thể chạy được hoạt hình trên màn hình hay hát một bản nhạc, nhưng không thể truy cập được dữ liệu riêng tư, tập tin hệ thống, hay truy cập mạng. Do đó, đặc tính bảo mật của CLR cho phép những phần mềm đóng gói trên Inernet có nhiều đặc tính mà không ảnh hưởng đến việc bảo mật hệ thống. CLR còn thúc đẩy cho mã nguồn được thực thi mạnh mẽ hơn bằng việc thực thi mã nguồn chính xác và sự xác nhận mã nguồn. Nền tảng của việc thực hiện này là Common Type System (CTS). CTS đảm bảo rằng những mã nguồn được quản lý thì được tự mô tả (self- describing). Sự khác nhau giữa Microsoft và các trình biên dịch ngôn ngữ của hãng thứ ba là việc tạo ra các mã nguồn được quản lý có thể thích hợp với CTS. Điều này thì mã nguồn được quản lý có thể sử dụng những kiểu được quản lý khác và những thể hiện, trong khi thúc đẩy nghiêm ngặt việc sử dụng kiểu dữ liệu chính xác và an toàn. Thêm vào đó, môi trường được quản lý của runtime sẽ thực hiện việc tự động xử lý layout của đối tượng và quản lý những tham chiếu đến đối tượng, giải phóng chúng khi chúng không còn được sử dụng nữa. Việc quản lý bộ nhớ -3-
  4. Đề cương môn học: Công nghệ .NET tự động này còn giải quyết hai lỗi chung của ứng dụng: thiếu bộ nhớ và tham chiếu bộ nhớ không hợp lệ. Trong khi runtime được thiết kế cho những phần mềm của tương lai, nó cũng hỗ trợ cho phân mềm ngày nay và trước đây. Khả năng hoạt động qua lại giữa mã nguồn được quản lý và mã nguồn không được quản lý cho phép người phát triển tiếp tục sử dụng những thành phần cần thiết của COM và DLL. Rutime được thiết kế để cải tiến hiệu suất thực hiện. Mặc dù CLR cung cấp nhiều các tiêu chuẩn dịch vụ runtime, nhưng mã nguồn được quản lý không bao giờ được dịch. Có một đặc tính gọi là Just-in-Time (JIT) biên dịch tất cả những mã nguồn được quản lý vào trong ngôn ngữ máy của hệ thống vào lúc mà nó được thực thi. Khi đó, trình quản lý bộ nhớ xóa bỏ những phân mảnh bộ nhớ nếu có thể được và gia tăng tham chiếu bộ nhớ cục bộ, và kết quả gia tăng hiệu quả thực thi. 1.2. Ngôn ngữ trung gian - IL Như chúng ta đã biết, Intermediate Language hoạt động như là bản chất của .NET Framework. Là lập trình viên C#, chúng ta nên biết rằng mã C# sẽ luôn được dịch sang Intermediate Language trước khi nó được thực thi (thật vậy, trình biên dịch C# chỉ dịch sang mã có quản). Chúng ta hãy cùng khám phá các tính năng chính của IL, bất kì ngôn ngữ nào hướng .NET cũng sẽ hỗ trợ các đặc tính chính của IL. Sau đây là những đặc tính chính của Intermediate Language: Hướng đối tượng và dùng interfaces Sự tách biệt giữa kiểu giá trị và kiểu tham chiếu Định kiểu mạnh Quản lỗi thông qua các ngoại lệ Sự dụng các thuộc tính -4-
  5. Đề cương môn học: Công nghệ .NET 1.3. Giới thiệu về .Net Framework .NET Framework là một platform mới làm đơn giản việc phát triển ứng dụng trong môi trường phân tán của Internet. .NET Framework được thiết kế đầy đủ để đáp ứng theo quan điểm sau: Để cung cấp một môi trường lập trình hướng đối tượng vững chắc, trong đó mã nguồn đối tượng được lưu trữ và thực thi một cách cục bộ. Thực thi cục bộ nhưng được phân tán trên Internet, hoặc thực thi từ xa. Để cung cấp một môi trường thực thi mã nguồn mà tối thiểu được việc đóng gói phần mềm và sự tranh chấp về phiên bản. Để cung cấp một môi trường thực thi mã nguồn mà đảm bảo việc thực thi an toàn mã nguồn, bao gồm cả việc mã nguồn được tạo bởi hãng thứ ba hay bất cứ hãng nào mà tuân thủ theo kiến trúc .NET. Để cung cấp một môi trường thực thi mã nguồn mà loại bỏ được những lỗi thực hiện các script hay môi trường thông dịch. Để làm cho những người phát triển có kinh nghiệm vững chắc có thể nắm vững nhiều kiểu ứng dụng khác nhau. Như là từ những ứng dụng trên nền Windows đến những ứng dụng dựa trên web. -5-
  6. Đề cương môn học: Công nghệ .NET Để xây dựng tất cả các thông tin dựa triên tiêu chuẩn công nghiệp để đảm bảo rằng mã nguồn trên .NET có thể tích hợp với bất cứ mã nguồn khác. -6-
  7. Đề cương môn học: Công nghệ .NET CHƯƠNG 2: LẬP TRÌNH WINDOWS FORMS 2.1. Tạo một ứng dụng Windows form Bước 1: Khởi động VS2008 và chọn Fille New Project … Bước 2: Chọn Ứng dụng dạng Windows Forms Application, chọn nơi lữu trữ Project (xem hình) nhấn OK. -7-
  8. Đề cương môn học: Công nghệ .NET 2.2. Lớp Control 2.3. Form 2.3.1. Chức năng Form (hay còn gọi điều khiển Form) dùng để chứa các điều khiển khác (Buttons, Label…) 2.3.2. Một số thuộc tính thường dùng Tên Ỹ nghĩa Tên của Form. Trong một Project tên của các Form Name phải khác nhau. Giá trị mà thuộc tính này nhận là tên của một Button AcceptButton trên Form (Nếu Form có chứa button). Khi đó nếu bạn nhấn phím Enter thì sự kiện Click của Button mà bạn chọn được thực thi mà không cần nhấn chuột vào Button đó. Autosize Nhận một trong hai giá trị True hay False - True: Không cho phép thay đổi kích thước Form mà che đi các điều khiển khác chứa trên Form - False: Ngược lại Cho phép thay đổi kích thước của Form hay không? AutoSizeMode (Khi di chuyển chuột vào các mép của Form mà hiện nên biểu tượng ↔ là cho phép). Và nhận một trong hai giá trị - - GrowOnly: Cho phép và GrowAndShrink: Không cho phép BackColor Chọn màu nền cho Form BackGroundImage Chọn ảnh làm nền cho Form -8-
  9. Đề cương môn học: Công nghệ .NET Giá trị mà thuộc tính này nhận là tên của một Button CancelButton trên Form (Nếu Form có chứa button). Khi đó nếu bạn nhấn phím ESC thì sự kiện Click của Button mà bạn chọn được thực thi mà không cần nhấn chuột vào Button đó (tương tự như thuộc tính AcceptButton ). ControlBox Nhận một trong hai giá trị True hay False - True: Cho phép các các nút: MaximizeBox, - MinimizeBox, Close trên Titlebar xuất hiện False: Không Cho phép các các nút: MaximizeBox, MinimizeBox, Close trên Titlebar xuất hiện (Khi đó các thuộc tính MaximizeBox, MinimizeBox của Form cũng mất đi) Chọn kiểu Font chữ cho Form (Khi đó tất cả các điều Font khiển được thêm vào Form sẽ có thuộc tính Font giống như thuộc tính Font của Form) Tương tự như thuộc tính Font nhưng áp dụng đối với ForeColor màu chữ FormBorderStyle Chọn Style cho Form (Có 7 lựa chọn khác nhau). HelpButton Nhận một trong hai giá trị True hay False. - True: Cho phép xuất hiện Buton có dấu ? trên Titlebar (Với điều kiện: hai thuộc tính MaximizeBox, MaximizeBox phải đặt giá trị là - False) False: Ngược lại → Thuộc tính này sẽ hay đi kèm với điều khiển HelpProvider về sau Chọn một Icon (có đuôi mở rộng là .ico) trên máy tính Icon của bạn thay cho Icon mặc định của Form mà VS tạo ra -9-
  10. Đề cương môn học: Công nghệ .NET KeyPreview Nhận một trong hai giá trị True hay False - True: Cho phép các sự kiện về bàn phím của Form (KeyUp, KeyDown, KeyPress… của Form) có hiệu - lực. False: Ngược lại MaximizeBox Nhận một trong hai giá trị True hay False - True: Cho phép nút MaximizeBox trên Titlebar có - hiệu lực False: Ngược lại MaximizeBox Tương tự như thuộc tính MaximizeBox Opacity Độ trong suốt của Form ShowIcon Nhận một trong hai giá trị True hay False - - True: Cho phép xuất hiện Icon của Form False: Không cho phép xuất hiện Icon của Form ShowInTaskbar Nhận một trong hai giá trị True hay False - - True: Cho phép hiện Form dưới khay Taskbar False: Ngược lại Vị trí hiển thị của Form so với màn hình hệ thống hay StartPosition Form cha (5 lựa chọn khác nhau) Text Giá trị Text của Form Trạng thái hiển thị của Form khi chạy (Khi bạn nhấn WindowState vào nút Run của VS) (Có 3 lựa chọn khác nhau: Ẩn dưới khay Taskbar, mở rộng hết màn hình…). 2.3.3. Một số sự kiện thường dùng Tên Ỹ nghĩa - 10 -
  11. Đề cương môn học: Công nghệ .NET Xảy ra khi thuộc tính Autosize của Form chuyển từ AutoSizeChanged True → False hay ngược lại là False → True. BackColorChanged Xảy ra khi thuộc tính BackColor của Form thay đổi Xảy ra khi người dùng Click chuột vào vùng làm việc Click thuộc Form ControlAdded Xảy ra khi một điều khiển được Add vào Form ControlRemoved Xảy ra khi một điều khiển bị xóa khỏi Form CursorChanged Xảy ra khi thuộc tính Cursor của Form thay đổi Xảy ra khi người dùng DoubleClick vào vùng làm việc DoubleClick của Form FontChanged Xảy ra khi thuộc tính Font của Form có sự thay đổi Xảy ra khi thuộc tính ForeColor của Form có sự thay ForeColorChanged đổi Xảy ra khi Form đã đóng (Nhấn vào nút X màu đỏ trên FormClosed Titlebar) Xảy ra khi Form đang đóng (2 sự kiện FormClosed và FormClosing FormClosing thường dùng trong lập trình CSDL: khi xảy ra sự kiện này thì đóng kết nối CSDL) Xảy ra khi người dùng nhấn một phím hay một tố hợp KeyDown phím (tùy thuộc vào xử lý của chúng ta) KeyPress Xảy ra khi người dùng nhấn một phím KeyUp Xảy ra khi người dùng nhả một phím. Xảy ra khi người dùng nhấn chuột (một trong 3 lựa MouseClick chọn: Trái, giữa, phải) - 11 -
  12. Đề cương môn học: Công nghệ .NET Xảy ra khi người dùng DoubleClick chuột vào một MouseDoubleClick vùng làm việc của Form(một trong 3 lựa chọn: Trái, giữa, phải) MouseDown Xảy ra khi người dùng nhấn chuột Xảy ra khi người dùng di chuyển vào các vùng làm việc MouseHover Form Xảy ra khi di chuyển chuột ra khỏi vùng làm việc của MouseLeave Form Xảy ra khi di chuyển chuột trên một vùng làm việc MouseMove thuộc Form (nếu Form có chứa một điều khiển nào đó, khi di chuyển chuột trên điều khiển này thì không xảy ra sự kiện MouseMove của Form). Xảy ra khi người dùng nhả nhấn chuột (có thể là chuột MouseUp trái, chuột phải, chuột giữa - chuột cuộn) Xảy ra khi di chuyển Form (có sự thay đổi vị trí của Move Form) Xảy ra khi thuộc tính FormBorderStyle của Form thay StyleChanged đổi TextChanged Xảy ra khi thuộc tính Text của Form thay đổi. 2.3.4. Minh họa - 12 -
  13. Đề cương môn học: Công nghệ .NET 2.3.4.1. Sự kiện FormClosed //Sự kiện FormClosed - Sự kiện này được gọi khi Form đã đóng private void frmForm_FormClosed(object sender, FormClosedEventArgs e) { MessageBox.Show("Sự kiện FormClosed được gọi", "FormClosed",MessageBoxButtons.OK,MessageBoxIcon.Information); } 2.3.4.2. Sự kiện FormClosing //Sự kiện FormClosing xảy ra khi Form đang đóng private void frmForm_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("Bạn có muốn đóng Form lại hay không?", "FormClosing", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) e.Cancel = false;// Đóng Form lại else e.Cancel = true;//Không đóng Form nữa } - 13 -
  14. Đề cương môn học: Công nghệ .NET 2.3.4.3. Sự kiện KeyPress //Sự kiện KeyPress private void frmForm_KeyPress(object sender, KeyPressEventArgs e) { //Nếu không chỉ rõ phím nào được nhấn thì khi nhấn bất cứ phím nào sự kiện KeyPress của Form đều xảy ra //Chỉ rõ phím nào được nhấn thì phát sinh sự kiện KeyPress làm như sau if (e.KeyChar = 'a') MessageBox.Show("Sự kiện KeyPress xảy ra khi bạn nhấn phím a"); } //Sự kiện KeyUp tương tự như sự kiện KeyPress //Sự kiện KeyDown xảy ra khi nhấn một phím hay tổ hợp phím 2.3.4.4. Sự kiện KeyDown private void frmForm_KeyDown(object sender, KeyEventArgs e) { //khi nhấn một phím bất kì trên bàn phím thì sự kiện KeyPress được gọi //Đồng thời sự kiện KeyDown cũng được gọi → KeyPress là trường hợp riêng của KeyDown //Áp dụng: Nhấn một tổ hợp phím thì sự kiện KeyDown mới được gọi //Như Windows Media: Nhấn Ctrl+F để di chuyển bài tiếp theo - 14 -
  15. Đề cương môn học: Công nghệ .NET if (e.KeyCode == Keys.F && e.Modifiers == Keys.Control) MessageBox.Show("Sự kiện KeyDown được gọi khi bạn nhấn Ctrl + F"); } 2.3.4.5. Sự kiện MouseClick //Sự kiện MouseClick private void frmForm_MouseClick(object sender, MouseEventArgs e) { //Nếu bạn không muốn biết người dùng nhấn chuột TRÁI hay PHẢI hay GIỮA thì khi nhấn bất kì //Chuột nào cũng xảy ra sự kiện MouseClick của Form //Còn nếu bạn muốn bắt được sự kiện người dùng nhấn chuột TRÁI, PHẢI, hay GIỮA làm thế này if (e.Button == MouseButtons.Left) MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột TRÁI"); else if (e.Button==MouseButtons.Middle) MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột GIỮA"); else if (e.Button==MouseButtons.Right) MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột PHẢI"); } //Các sự kiện MouseDoubleClick, MouseDown, MouseUp... Xử lý tương tự - 15 -
  16. Đề cương môn học: Công nghệ .NET 2.4. Một số control 2.4.1. Textbox 2.4.1.1. Chức năng Điều khiển Textbox cho phép bạn nhập và hiển thị dữ liệu. 2.4.1.2. Một số thuộc tính thường dùng Tên Ý nghĩa AcceptsTab Nhận một trong hai giá trị True hay False - True: Khi nhấn phím Tab thì con trỏ (Focus) chỉ di chuyển bên trong Textbox (Với điều - kiện thuộc tính Multiline=True). False: Khi nhấn Tab thì Focus di chuyển qua lại giữa các điều khiển trên Form → Thuộc tính này hay đặt bằng True trong các ứng dụng soạn thảo văn bản Anchor Vị trí neo đậu của Textbox trên Form Ba thuộc tính này ý nghĩa tương tự như của AutoCompleteCustomSource thuộc tính của điều khiển Combobox AutoCompleteMode AutoComplete Source BackColor Đặt mầu nền cho Textbox BorderStyle Chọn kiểu đường viền cho Textbox Chọn Menu ngữ cảnh khi nhấn chuột phải vào ContextMenuStrip Textbox Vị trí bám dính và điền đầy của Textbox với Dock Form Font Chọn kiểu Font chữ cho Textbox - 16 -
  17. Đề cương môn học: Công nghệ .NET HideSelection Nhận một trong hai giá trị True hay False - True: Không cho phép các thuộc tính: - SelectionStart…có hiệu lực. False: Ngược lại Số lượng kí tự lớn nhất cho phép nhập vào MaxLenght Textbox Multiline Nhận một trong hai giá trị True hay False - True: Cho phép nhập và hiển thị giá trị của Textbox trên nhiều dòng (người dùng có thể - nhìn thấy toàn bộ giá trị Text của nó) False: Cho phép nhập/hiển thị giá trị của Textbox trên một dòng Hiển thị giá trị của Textbox dưới dạng các kí tự PasswordChar mà bạn thay thế (kí tự do người dùng nhập vào: *, #...) ReadOnly Cho phép hiển thị thanh trượt hay không? (Với ScrollBars điều kiện thuộc tính Multiline=True mới nhìn thấy thanh cuộn) TabIndex Visible Cho phép Textbox hiển thị hay không? CanUndo Trả lại hai giá trị True/False. - - True: có thể Undo lại được (như Word) False: Ngược lại Các thuộc tính SelectionText SelectedText SelectionStart SelectionLength - 17 -
  18. Đề cương môn học: Công nghệ .NET ………………. Chú ý: Các điều khiển có rất nhiều thuộc tính giống nhau: Anchor, Dock, Font, ForeColor, Enabled, Visible, TabIndex……Về ý nghĩa các thuộc tính này là giống nhau với tất cả các điều khiển 2.4.1.3. Một số phương thức thường dùng Tên Ý nghĩa Nối một chuỗi (string) vào giá trị Text hiện có của AppendText Textbox Copy Xử lý phần nội dung bôi đen (như Word) Cut Paste Focus Chuyển Focus (con trỏ) vào TextBox Clear Xóa toàn bộ Textbox Select Lấy ra một chuỗi trong Textbox (xem Code) SelectAll Lấy tất cả giá trị của Textbox Undo Xử lý Undo như Word 2.4.1.4. Một số sự kiện thường dùng Tên Ý nghĩa Xảy ra khi người dùng nhấn phím trên bàn phím (tất KeyPress nhiên Textbox phải đang Focus – Áp dụng sự kiện này để xử lý không cho phép nhập chữ vào Textbox…) Xảy ra khi người dùng Click chuột trên điều khiển MouseClick - 18 -
  19. Đề cương môn học: Công nghệ .NET Textbox Xảy ra khi giá trị Text của Texbox (hay gọi giá trị TextChanged Textbox) thay đổi 2.4.1.5. Minh họa - 19 -
  20. Đề cương môn học: Công nghệ .NET 2.4.1.5.1. Minh họa thuộc tính Text của Textbox private void btTextbox_Click(object sender, EventArgs e) { //Trước khi gán thuộc tính text MessageBox.Show("Giá trị textbox trước khi gán: "+ textBox1.Text); //Gán giá trị Text textBox1.Text = "Chào các bạn"; //Sau khi gán MessageBox.Show("Giá trị textbox sau khi gán: " + textBox1.Text); } 2.4.1.5.2. Minh họa thuộc tính SelectedText private void btTextbox_Click(object sender, EventArgs e) { //Thuộc tính SelectedText lấy ra một chuỗi mà bạn bôi đen (Chọn) //Bạn hãy bôi đen một vài từ trong Textbox sau đó Click vào Button này sẽ hiển thị //Message thông báo từ bạn chọn string str = textBox1.SelectedText; MessageBox.Show("Từ bạn vừa chọn (bôi đen) là: "+str); - 20 -
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
4=>1