Sau khi click button, dữ liệu của Form1 sẽ hiển thị sẵn trên Form2

Xin add duyệt bài giup em ạ:))

Khi nhấn click vào Edit ở Form 1 thì sang Form 2.

làm thế nào để From <tên nước> To <tên nước> ở Form 1 hiển thị sẵn trên Form 2 ạ

Form? có bao nhiêu loại form

  • HTML form
  • C# web form
  • java swing form
  • C# Desktop app form
    +…
    Bạn đang hỏi gì thế?
1 Like

C# ạ. Mình mới học lt winform ạ:v

Tìm hiểu delegate, event.
Hoặc truyền form 1 vào form2.

5 Likes
String tenNuoc = "tenNuoc"; //tên nước chọn ở form 1
Form2 f2 = new Form2();
f2.a.Text= tenNuoc; //a là textbox, lable,... tùy 
f2.show();

lâu rồi không đụng vô C# nên k chuyên lắm, hi vọng giúp dc bạn

1 Like

Cách 1:
Trong Form2 khai báo Form1:

public Form1 frm1 = null;

Trong Form1 khi gọi Form2:

Form2 frm2 = new Form2();
frm2.frm1 = this; // gán frm2 của Form2 là form1, this là chính form1
frm2.showDialog();

Bây giờ gán text từ Form2 về Form1 (xử lý trong Form2):

frm2.myLabel.Text="Text"; // gán text cho label có tên myLabel ở trong Form1.
// mặc định label khi kéo vào form thì Modifiers nó là private nên chỉnh lại cho nó là public. (xem bên mục properties của label).

=> Đây là cách chạy được nhưng không đề nghị vì vi phạm tính đóng gói của OOP.

2 Likes

Cách 2 : Delegate (chuẩn)

Khai báo 1 kiểu delegate để truyền dữ liệu qua, ở đây truyền text.

public delegate void PassStringEventHandler(object sender, string text);
// delegate này khai báo ở trong namespace nào cũng được tuy nhiên thì nhớ vị trí để sau còn gọi.
// đơn giản thì khai báo trước Form2
// delegate này để truyền 2 thông số qua bao gồm sender là người gửi dữ liệu
// text chính là dữ liệu sẽ chuyển qua.
// tên loại delegate gồm 2 phần : chức năng (PassString) và hậu tố (EventHandler). 

Trong Form2 khai báo 1 delegate.

public PassStringEventHandler PassString = null;

Trong Form1 sẽ có 1 hàm để xử lý string từ Form2 trả về. Nó sẽ có kiểu tham số giống hệt delegate.

private void ProcessString(object sender, string text){
    myLabel.Text = text; // gán text
}

Bên trong Form2 sẽ gửi text như sau:

if(PassString != null ){ // kiểm tra null trước, nếu chưa gán sẽ bằng null, chạy sẽ lỗi
    PassString(this, "Text"); // truyền chính nó và text qua delegate
}

Việc còn lại là kết nối delegate của Form2 và hàm thực thi của Form1 tại lúc show Form2:

Form2 frm2 = new Form2();
frm2.PassString = ProcessString; // gán delegate, chú ý ProcessString không có ()
frm2.showDialog()
2 Likes

2 bài trên hơi lạc đề vì hướng dẫn truyền ngược từ Form2 về Form1. :smile:
Nhưng để đó để tham khảo :smile:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?