SửdụngDelegateđểtruyềngiátrịtrongC#
Để có thể viết được một ứng dụng phần mềm,
bạn phải biết cách truyềngiátrị qua lại giữa các
Form.
Tuy nhiên, khi ta muốn lấy giátrị từ nhiều Form
khác, chắc chúng ta sẽ gặp rắc rối với những cách
làm thông thường. Delegate sẽ giúp chúng ta giải
quyết vấn đề.
Trước hết, tôi sẽ trình bày cho các bạn cách
truyền giátrị theo cách thô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ấy từ các Form khác. 2 button
có chức năng hiển thị các form mà mình muố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út button để xác nhận giátrị
đó và truyềngiá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ềngiátrị được nhập trong ô textbox cho form chính.
1. Với việc truyềngiá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ông qua 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ềngiátrị cho Form chí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 trong trường hợp này, khi lấy giá
trị từ 2 Form khác nhau, cách truyềngiátrị thông thường này sẽ không thể làm đượ
c. Vậy cách
khác, ta sẽ dùngDelegateđể giải quyết vấn đề:
2. SửDụng Delegate:
- DùngDelegate 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 tham chiếu được sửdụngđể đóng gói 1 hàm với giátrị xác thực và
kiểu giátrị trả về.
- Trong Form 1: Ta khai báo Delegate có tên là PassData có 1 tham 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ống như 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();
}
. Sử dụng Delegate để truyền giá trị trong C#
Để có thể viết được một ứng dụng phần mềm,
bạn phải biết cách truyền giá trị qua lại giữa. 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