Thông tin tài liệu:
Để có thể viết được một ứng dụng phần mềm, bạn phải biếtcách truyền giá trị qua lại giữa các Form. Tuy nhiên, khi tamuốn lấy giá trị từ nhiều Form khác, chắc chúng ta sẽ gặp rắcrối với những cách làm thông thường. Delegate sẽ giúp chúngta giải quyết vấn đề.
Nội dung trích xuất từ tài liệu:
Sử dụng delegate để truyền dữ liệu trong formC# - SỬ DỤNG DELEGATE ĐỂ TRUYỀN GIÁ TRỊ GIỮA CÁCFORM 06/09/2007 08:28 AMĐể có thể viết được một ứng dụng phần mềm, bạn phải biếtcách truyền giá trị qua lại giữa các Form. Tuy nhiên, khi tamuốn lấy giá trị từ nhiều Form khác, chắc chúng ta sẽ gặp rắcrối với những cách làm thông thường. Delegate sẽ giúp chúngta giải quyết vấn đề.Trước hết, tôi sẽ trình bày cho các bạn các truyền giá trị theo cáchthông thường.Dưới đây là giao diện của các Form:Đây là giao diện của Form chính. có 2 textbox để hiển thị giá trị lấytừ các Form khác. 2 button có chức năng hiển thị các form mà mìnhmuốn lấy giá trị.Còn đây là giao diện của Form 1, Gồm 1 textbox để nhập giá trị, nútbutton để xác nhận giá trị đó và truyền giá trị được nhập trong ôtextbox cho form chính.Tương tự như Form 1, Form 2 cũng gồm 1 textbox để nhập giá trị,nút button để xác nhận giá trị đó và truyền giá trị được nhập trong ôtextbox cho form chính.1. Với việc truyền giá trị thông thường: - Trong Form Chính:// Ta khai báo trường để lưu giá trị.private string _getFirstValue = null;// Thuộc tính này có nhiệm vụ lấy giá trị từ các Form khác.public string GetFirstValue{ get { return _getFirstValue; } set { _getFirstValue = value; }}Và viết sự kiện cho nút btnGetValue1 :private void btnGetValue1_Click(object sender, EventArgs e){ frmFirstValue first = new frmFirstValue(); first.ShowDialog();}Và khi Form chính được hiển thị, ta phải hiển thị nhận được thôngqua các thuộc tính GetFirstValue.private void frmMain_Load(object sender, EventArgs e){ txtFirstValue.Text = GetFirstValue; txtSecondValue.Text = GetSecondValue;} - Đối với Form 1: Ta chỉ cần viết sự kiện cho Nút btnSend:private void btnSend_Click(object sender, EventArgs e){ frmMain main = new frmMain(); main.GetFirstValue = txtValue.Text; // Truyền giá trị cho Formchính thông qua thuộc tính GetFirstValue. main.ShowDialog(); this.Hide();}việc khai báo và xử lý sự kiện đối với Form 2 tương tự. Nhưng trongtrường hợp này, khi lấy giá trị từ 2 Form khác nhau, cách truyền giátrị thông thường này sẽ không thể làm được. Vậy cách khác, ta sẽdùng Delegate để giải quyết vấn đề:2. Sử Dụng Delegate: - Dùng Delegate sẽ giúp chúng ta quyết định xem hàm nào sẽđược trong lúc chạy. Về mặt kỹ thuật, Delegate là một dạng thamchiếu được sử dụng để đóng gói 1 hàm với giá trị xác thực và kiểugiá trị trả về. - Trong Form 1: Ta khai báo Delegate có tên là PassData có 1tham số kiểu string và ko có giá trị trả về.public delegate void PassData(string value);public PassData passData;private void btnSend_Click(object sender, EventArgs e){ if (passData != null) { passData(txtValue.Text); } this.Hide();} - Còn trong Form chính: Ta viết Hàm GetFirstValue phải giốngnhư khi khai báo Delegate: có 1 giá trị truyền vào là kiểu chuỗi, vàkhông có giá trị trả về.public void GetFirstValue(string value){ txtFirstValue.Text = value;}Ta viết sự kiện cho nút btnGetValue1:private void btnGetValue1_Click(object sender, EventArgs e){ frmFirstValue first = new frmFirstValue(); first.passData = new frmFirstValue.PassData(GetFirstValue); first.Show();}Vấn đề đã được giải quyết rất đơn giản khi ta dùng Delegate.