Bài tập thực hành lập trình winform bài 6

7 481 2
Bài tập thực hành lập trình winform   bài 6

Đang tải... (xem toàn văn)

Thông tin tài liệu

Mục tiêu  Trao đổi liệu form  Xử lý event form  Anonymous method Nội dung Trao đổi liệu form Để truyền nhận liệu form form với kiến thức thực hiên thông qua phương pháp sau Trước tiên tạo project winform với form: frmSender frmReceiver sau: frmSender TextBox: txtMSSV TextBox: txtHoTen Button: btnAddSV Button: btnDSSV frmReceiver ListView: lvDsSV  Code phương thức event cần thiết cho frmSender để lưu giữ danh sách sinh viên nhập vào public partial class frmSender : Form { //lưu giữ ds sv liệu để truyền List dsSV = new List(); public frmSender() { InitializeComponent(); btnAddSV.Click += new EventHandler(btnAddSV_Click); btnDsSV.Click += new EventHandler(btnDsSV_Click); } void btnAddSV_Click(object sender, EventArgs e) { string mssv = txtMSSV.Text; string hoten = txtHoTen.Text; if (string.IsNullOrEmpty(mssv) || string.IsNullOrEmpty(hoten)) { MessageBox.Show("Dữ liệu không để trống"); return; } dsSV.Add(new Tuple(mssv, hoten)); } void btnDsSV_Click(object sender, EventArgs e) { OpenFrmReceiver(); } void OpenFrmReceiver() { //code thích hợp theo phương pháp } }  PP 1: Sử dụng phương thức khởi tạo có đối số, liệu truyền thông qua tham số truyền vào phương thức khởi tạo form nhận Vì phải cài đặt phương thức khởi tạo có đối số dssv frmReceiver public partial class frmReceiver : Form { public frmReceiver() { InitializeComponent(); } //phương thức khởi tạo có đối số thích hợp public frmReceiver(List dssv) { InitializeComponent(); FillDsSV(dssv); } public void FillDsSV(List dssv) { //xóa item cũ lvSV.Items.Clear(); //thêm item ListViewItem lvi = null; foreach (var sv in dssv) { lvi = new ListViewItem(sv.Item1); lvi.SubItems.Add(sv.Item2); lvSV.Items.Add(lvi); } } } Cài đặt lại frmSender void OpenFrmReceiver() { //code thích hợp theo phương pháp //phương pháp PP1(); } void PP1() { frmReceiver frm = new frmReceiver(dsSV); frm.Show(); }  Nhược điểm phương pháp truyền liệu lần ban đầu PP 2: Sử dụng đối tượng tham chiếu (reference object), liệu lấy trực tiếp từ đối tượng tham chiếu frmSender frmReceiver phải tạo public cho thành phần liệu cần truy suất - Thay đổi frmReceiver public partial class frmReceiver : Form { public frmSender FormSender { get; set; } public frmReceiver() { InitializeComponent(); Load += new EventHandler(frmReceiver_Load); } void frmReceiver_Load(object sender, EventArgs e) { FillDsSV(FormSender.DSSV); } - Thay đổi frmSender public partial class frmSender : Form { public List DSSV { get { return dsSV; } } // void OpenFrmReceiver() { //code thích hợp theo phương pháp //phương pháp //PP1(); //phương pháp PP2(); } // void PP2() { frmReceiver frm = new frmReceiver(); frm.FormSender = this; frm.Show(); } }  Nhược điểm pp phải thay đổi nhiều thành phần, đặc biệt truy suất trực tiếp qua tham chiếu đối tượng PP 3: sử dụng events, phương pháp nên sử dụng mục đích truyền liệu form với ưu điểm là: o Cài đặt uyển chuyển, độc lập form o Việc truyền liệu dễ dàng cập nhật thay đổi thông qua event o Cách cài đặt sau: tạo event tương ứng với việc thay đổi liệu form truyền, form cần tiếp nhận xử lý cần gắn kết phương thức xử lý tương ứng o Cụ thể frmSender tạo event phát sinh sau public partial class frmSender : Form { //tạo delegate riêng cho event public delegate void DataChangedHandler(List dsSV); //tạo events public event DataChangedHandler DataChanged; // void btnAddSV_Click(object sender, EventArgs e) { string mssv = txtMSSV.Text; string hoten = txtHoTen.Text; if (string.IsNullOrEmpty(mssv) || string.IsNullOrEmpty(hoten)) { MessageBox.Show("Dữ liệu không để trống"); return; } dsSV.Add(new Tuple(mssv, hoten)); DataChanged(dsSV); } void OpenFrmReceiver() { //code thích hợp theo phương pháp //phương pháp //PP1(); //phương pháp //PP2(); //phương pháp PP3(); } // void PP3() { frmReceiver frm = new frmReceiver(dsSV); DataChanged += new DataChangedHandler(frm.FillDsSV); frm.Show(); } } Xử lý event form Giống ví dụ phương pháp Xét thêm ví dụ sau  Tạo project với form: frmRaiseEvent frmReceiveEvent TextBox: txtInput Label: lblReceiver  Trong frmRaiseEvent tạo event TextChanged (của form) raise event TextChanged TextBox public partial class frmRaiseEvent : Form { public delegate void TextUpdatedHandler(string text); public event TextUpdatedHandler TextUpdated; public frmRaiseEvent() { InitializeComponent(); Load += new EventHandler(frmRaiseEvent_Load); txtInput.TextChanged += new EventHandler(txtInput_TextChanged); } void frmRaiseEvent_Load(object sender, EventArgs e) { //tạo thể frmReceiveEvent frmReceiveEvent frm = new frmReceiveEvent(this); frm.Show(); } void txtInput_TextChanged(object sender, EventArgs e) { //raise event TextUpdated(txtInput.Text); } }  Trong frmReceiveEvent tạo phương thức xử lý event gắn kết để tiếp nhận public partial class frmReceiveEvent : Form { public frmReceiveEvent() { InitializeComponent(); } public frmReceiveEvent(frmRaiseEvent frm) { InitializeComponent(); //truyền tham số đối tượng frmRaiseEvent //để gắn kết event frm.TextUpdated += new frmRaiseEvent.TextUpdatedHandler(frm_TextChanged); } void frm_TextChanged(string text) { lblReceiver.Text = text; } } Anonymous method Cần hiểu khái niệm method (phương thức) khối lệnh đặt tên với mục đích sử dụng lại nhiều lần Ngoài ví method cài đặt với tên cụ thể cài đặt outline Có trường hợp yêu cầu khối lệnh sử dụng lần nhu cầu gắn liền cài đặt method vị trí gọi (kiểu cài đặt inline), lúc tên method không cần thiết bỏ nên gọi Anonymous Method (phương thức vô danh) Ví dụ dễ thấy phương thức xử lý event thường sử dụng lần nên cần ngắn gọn cài đặt kiểu anonymous method sau  Tạo project với frmAnonymousMethod giao diện sau: TextBox: txtInput Label: lblOutput  Code cho frmAnonymousMethod sau: public partial class frmAnonymousMethod : Form { public frmAnonymousMethod() { InitializeComponent(); //gắn kết event cần phương thức cụ thể //sử dụng anonymous method để cài đặt //trực tiếp (chú ý từ khóa delegate) txtInput.TextChanged += new EventHandler(delegate(object sender, EventArgs e){ lblOutput.Text = txtInput.Text; }); } }  Như cách cài đặt anonymous method giống cách cài đặt javascript (sử dụng từ khóa function) Bài tập Thực hoàn chỉnh ví dụ ... Như cách cài đặt anonymous method giống cách cài đặt javascript (sử dụng từ khóa function) Bài tập Thực hoàn chỉnh ví dụ ... nhiều thành phần, đặc biệt truy suất trực tiếp qua tham chiếu đối tượng PP 3: sử dụng events, phương pháp nên sử dụng mục đích truyền liệu form với ưu điểm là: o Cài đặt uyển chuyển, độc lập form... object), liệu lấy trực tiếp từ đối tượng tham chiếu frmSender frmReceiver phải tạo public cho thành phần liệu cần truy suất - Thay đổi frmReceiver public partial class frmReceiver : Form { public

Ngày đăng: 22/01/2016, 18:33

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan