Hôm nay mình sẽ hướng dẫn cách để các bạn có thể biết cách truyền dữ liệu giữa các form trong c# .(Today i will help you to know how to passing data between forms in c#). Trong thực tế cái này cũng được sử dụng khá là nhiều trong việc liên kết giữa các form, chẳng hạn như truyền username trong form đăng nhập vào form kiểm tra chẳng hạn.
Mình thiết kế 2 form như hình dưới:

Cách 1:
Truyền dữ liệu qua form dùng hàm tạo hay hàm dựng (Constructor):
Ta lợi dụng các class của Csharp, mọi thành phần của nó đều là class, hiển nhiên hàm tạo cũng thế.
Code của form 1:
Trong sự kiện click button1 ta truyền tham số vào cho Form 2 (dĩ nhiên phải code cho form 2 có thể truyền tham số được):
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 Child = new Form2(textBox1.Text); // khai báo form 2 và truyền vào tham số
Child.Show();
}
}
Code của form 2:
public partial class Form2 : Form
{
//Tạo 1 biến để nhận giá trị từ form 1
string strNhan;
public Form2()
{
InitializeComponent();
}
// Ta cho hàm tạo của Form2 kế thừa this()
// và để nó nhận tham số là 1 kiểu string sau
public Form2(string giatrinhan): this()
{
strNhan = giatrinhan;
textBox1.Text = strNhan;
}
}
Cách 2:
Dùng thuộc tính (properties) để truyền dữ liệu:
Ta sẽ tạo 1 thuộc tính cho Form2 để khi click thì thuộc tính sẽ được gán giá trị trong textBox1 của form1.
Code form2:
public partial class Form2 : Form
{
string strNhan;
public Form2()
{
InitializeComponent();
}
//Ta tạo 1 thuộc tính cho Form2 là Message:
public string Message
{
get { return strNhan; }
set { strNhan = value; }
}
private void Form2_Load(object sender, EventArgs e)
{
textBox1.Text = strNhan;
}
}
Code form1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
// Gán nội dung textbox1 cho thuộc tính Message
frm.Message = textBox1.Text;
frm.Show();
}
}
Cách 3:
Dùng Delegate
Delegate là một khái niệm khá thú vị và mạnh mẽ trong C#. Nó có rất nhiều ứng dụng và truyền dữ liệu giữa các Form là một trong những ứng dụng đó. Nếu bạn đã từng học qua C++ thì bạn sẽ thấy Delegate cũng tương tự như con trỏ hàm trong C++.
Để thực hiện, trong Form2 ta sẽ khai báo một Delegate có nhiệm vụ nhận vào một tham số và không trả về giá trị. Đồng thời tạo một hàm để lấy tham số của Delegate. Và trong Form1, ta sẽ gọi Delegate này với tham số truyền vào là một chuỗi thông điệp cần gửi.
Code Form2:
public partial class Form2 : Form
{
//Khai báo delegate
public delegate void SendMessage(string Message);
public SendMessage Sender; public Form2()
{
InitializeComponent();
//Tạo con trỏ tới hàm GetMessage
Sender = new SendMessage(GetMessage);
}
//Hàm có nhiệm vụ lấy tham số truyền vào
private void GetMessage(string Message)
{
textBox1.Text = Message;
}
}
Code Form1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm= new Form2(); //Tạo Form2
frm.Sender(textBox1.Text); //Gọi delegate
frm.Show();
}
}
Trên đây mình đã trình bày ba cách để truyền dữ liệu giữa các Form trong C#.