Lập trình Windows 12/12/2018 1 Validation, Multithreading, Ôn tập Lập trình Ứng dụng quản lý Nội dung Validation Multithreading Ôn tập Cấu trúc bài thi lý thuyết 12/12/2018 2 Nội dung Valida[.]
12/12/2018 Lập trình Ứng dụng quản lý Validation, Multithreading, Ơn tập Nội dung Validation Multithreading Ôn tập Cấu trúc thi lý thuyết 12/12/2018 Nội dung Validation Multithreading Ôn tập Cấu trúc thi lý thuyết Validation Dữ liệu nhập cần phải kiểm sốt tính hợp lệ trước lưu xuống database để đảm bảo tính tồn vẹn liệu Q trình kiểm tra tính hợp lệ liệu nhập gọi validation Tùy thuộc vào kiến trúc ứng dụng để xây dựng chế validation phù hợp (nơi thực hiện, mức độ,…) 12/12/2018 Validation Events Validation events thiết kế phép kiểm tra thông tin nhập, chờ đợi để gửi toàn biểu mẫu (form) Điều hữu ích vì: Người dùng yên tâm gửi biểu mẫu khả phát sinh lỗi kiểm sốt Người dùng nhập nhiều mẩu liệu không hợp lệ vào thời điểm Nếu không kiểm tra liệu biểu mẫu gửi đi, chương trình phải tìm cách để thơng báo tất lỗi lúc Vào thời điểm người dùng gửi biểu mẫu, họ qn trường cụ thể mà họ nhập khơng xác Validation Event Sequence Khi điều hướng từ control sang control khác, chuỗi event xảy Ví dụ chuyển từ TextBox1 sang TextBox2 cách nhấn tab event xảy sau Leave (TextBox1) Enter (TextBox2) LostFocus (TextBox1) GotFocus (TextBox2) Thực validation với event LostFocus ? Khi điều hướng mouse: LostFocus (TextBox1) Leave (TextBox1) Enter (TextBox2) GotFocus (TextBox2) 12/12/2018 Validating events Trong NET, event xảy điều hướng từ TextBox1 sang TextBox2 Leave (TextBox1) Enter (TextBox2) Validating (TextBox1) Validating (TextBox2) LostFocus (TextBox1) GotFocus (TextBox2) Validated event cho phép phản hồi liệu nhập xác Validating event cho phép thực xác minh liệu kiểm soát chuyển focus control CausesValidation property Validation diễn source control có thiết lập property CausesValidation thành true Ngồi ra, Validation không xảy thay đổi focus vào control có property CausesValidation đặt thành true Nếu hai có CausesValidation false, event validation bị tạm dừng, event khác (như Enter Leave) xảy Bảng sau cho thấy số ví dụ xảy điều hướng từ control sang control khác 12/12/2018 NET Validation Source Control Destination Control Result CousesValidation = false Không xảy Validation code bị bỏ qua CousesValidation = true CousesValidation = true Validation thực cho source control CousesValidation = true CousesValidation = false Validation bị hoãn lại thay đổi focus vào CausesValidation Vào thời điểm này, tất control cần phải valid theo thứ tự control tìm thấy với liệu nhập khơng hợp lệ q trình bị hủy bỏ Ví dụ private void TxtFN_Validating(object sender, CancelEventArgs e) { if (((TextBox)sender).Text.Length == 0) { MessageBox.Show("You must enter a first and last name.", "Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Warning); e.Cancel = true; } } 12/12/2018 Vấn đề đóng form private void BtnCancel_Click(object sender, EventArgs e) { AutoValidate = AutoValidate.Disable; Close(); } Giải vấn đề private void FrmMain_FormClosing(object sender, FormClosingEventArgs e) { // If e.Cancel is true, the cancel flag has been set by a validation routine if (e.Cancel) { DialogResult result = MessageBox.Show("Do you wish to close the form?", "Errors found", MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { e.Cancel = false; } } } 12/12/2018 ErrorProvider Sử dụng MessageBox (Dialog) để thông báo lỗi đến người dùng giải pháp không tốt, làm giảm chất lượng trải nghiệm ứng dụng Cần có hướng tiếp cận thơng báo lỗi đến người dùng thân thiện hơn, mục tiêu vừa không làm gián đoạn trải nghiệm người dùng, vừa đưa thơng tin lỗi sớm xác (vị trí loại lỗi) NET cung cấp control ErrorProvider để giúp hiển thị thông tin lỗi uyển chuyển Sử dụng ErrorProvider private void TxtFN_Validating(object sender, CancelEventArgs e) { Control ctrl = (Control)sender; if (ctrl.Text.Length == 0) { errorProviderMain.SetError(ctrl, "You must enter a first and last name."); e.Cancel = true; } else { errorProviderMain.SetError(ctrl, ""); } } 12/12/2018 Kiểm tra lỗi private void BtnOK_Click(object sender, EventArgs e) { if (errorProviderMain.GetError(txtFN).Length == && errorProviderMain.GetError(txtLN).Length == 0) { Close(); } else { MessageBox.Show("You still have invalid input.", "Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } MaskedTextBox Properties Mask PromptChar TextMaskFormat … Events TypeValidationCompleted MaskInputRejected … 12/12/2018 Nội dung Validation Multithreading Ôn tập Cấu trúc thi lý thuyết Mục tiêu MultiThreading Giúp cho client đáp ứng tốt (more responsive) Hoàn thành nhiều tác vụ lúc Giúp cho ứng dụng máy chủ có khả mở rộng 12/12/2018 Ví dụ Ứng dụng với tác vụ tốn thời gian hoàn thành Áp dụng Multithreading 10 12/12/2018 Nội dung Validation Multithreading Ôn tập Cấu trúc thi lý thuyết Cơ Kiến thức NET (chú trọng ngôn ngữ C#) vấn đề Định nghĩa biến, kiểu liệu Khai báo, định nghĩa struct, class Phương thức kiểu truyền tham số Xử lý chuỗi, định dạng xuất,… Lập trình WinForm Khái niệm, khai báo sử dụng events Xây dựng giao diện xử lý 11 12/12/2018 Xử lý liệu Truy vấn LINQ Các phương thức hỗ trợ Enumerable Query syntax Lambda syntax objects Sử dụng LINQ to SQL Truy vấn theo yêu cầu Tương tác với database (thêm, xóa, sửa) Các liệu quan hệ Nội dung Validation Multithreading Ôn tập Cấu trúc thi lý thuyết 12 12/12/2018 Thi lý thuyết Thời gian làm bài: 90 phút Khơng sử dụng tài liệu Có khoảng câu hỏi cho lĩnh vực ôn tập Phần viết code khơng quan trọng xác hồn tồn từ khóa mà cần rõ ý dịng code mục đích thực điều 13