Mẹo: Tính năng "Chuyển tới phần dựa trên câu trả lời" chỉ áp dụng cho loại câu hỏi Trắc nghiệm và Chọn từ danh sách thả xuống. Bỏ qua các phần trong biểu mẫu
Tạo, chỉnh sửa và định dạng
Visit the Learning Center Using Google products, like Google Docs, at work or school? Try powerful tips, tutorials, and templates. Learn to work on Office files without installing Office, create dynamic project plans and team calendars, auto-organize your inbox, and more. Với ứng dụng WinForms, trong một số trường hợp chúng ta cần phải trao đổi dữ liệu từ form này sang form khác. Đây là vấn đề mà các coder thường gặp phải và cũng gặp nhiều lúng túng. Trong bài viết này tôi sẽ giới thiệu 4 phương pháp cơ bản và rất đơn giản. Với 4 phương pháp này hoàn toàn dựa trên những khái niệm chính trong ngôn ngữ C#: II) Tổng quan bốn phương pháp cơ bản để passing data giữa các form:
Trong 4 phương pháp trên, sử dụng delegates được đánh giá cao nhất vì nó không phụ thuộc vào quá trình khởi tạo đối tượng, sự tồn tại của đối tượng. Nó chỉ đơn giản sử dụng các events do coder bẫy sẵn. IV) Sau đây là chi tiết thực hiện từng phương pháp: Để thực hiện các phương pháp trên: Bước 1 : Tạo một project có 2 forms (HVBK-1(Form1) và HVBK-2(Form2)) Bước 2 : Với Form 1: Thêm 1 textbox và một button, sử dụng để gửi dữ liệu Bước 3 : Với Form 2: Thêm 1 Label để hiển thị dữ liệu nhận được từ Form1 Phương Pháp Constructor: Đây là phương pháp đơn giản nhất trong 4 phương pháp. Phương pháp này sử dụng hàm dựng. Hàm dựng là hàm có đặc thù là nó được gọi đầu tiên khi ta tiến hành khởi tạo đối tượng và chỉ gọi một lần(Từ khi khởi tạo đến khi hủy đối tượng). Với phương pháp này ta chỉ cần thêm một tham biến vào hàm dựng của form2. Code thêm tham biến vào hàm dựng của Form2 public Form2(stringstrTextBox) { InitializeComponent(); label1.Text=strTextBox; //Gán dữ liệu nhận được vào Label để thể hiện } Tại button "Gửi dữ liệu sang form 2" ta tiến hành khởi tạo Form2 và Form2 sẽ hiện ra mỗi khi ta click vào nút này. private voidbutton1_Click(object sender, System.EventArgs e) { Form2 frm = new Form2(textBox1.Text); frm.Show(); } Kết quả: Chạy chương trình và ta có được kết quả như hình ảnh trên. Phương Pháp Object Object là kiểu reference và được tạo trên heap và sử dụng từ khóa new. Phương pháp này cũng rất đơn giản Bước 1: Tại Form1 ta tiến hành thay đổi access modifier cho textbox itừ private thành public. public class Form1 : System.Windows.Forms.Form { public System.Windows.Forms.TextBoxtextBox1; // .............................. Tại Form2 ta tiến hành khai báo một biến frm1 có kiểu Form1 public class Form2 : System.Windows.Forms.Form1 { private System.Windows.Forms.Labellabel1; public Form1 frm1; // .............................. Bước 2: Tại Form1 ta tiến hành code hàm sự kiện Clicked của nút button "Gửi dữ liệu sang form 2" private voidbtnSend_Click(object sender, System.EventArgs e) { Form2 frm =new Form2(); frm.frm1 = this; //Gán form1 cho biến frm1 có kiểu Form1 của Form2 frm.Show(); //Hiện Form2 } Bước 3: Trong hàm Load của Form2 ta tiến hành gán giá trị của ô textbox1 của form1 cho Label của form2 private voidForm2_Load(object sender, System.EventArgs e) { label1.Text = ((Form1)frm1).textBox1.Text; } Kết quả: Chạy chương trình và ta có được kết quả như hình ảnh trên.
public string_textBox1 { get { returntextBox1.Text; } } - Ở Form2 ta add thêm một thuộc tính, để gán giá trị cho Label public string_textBox { set { label1.Text = value; } } - Ở Form1, trong sự kiện button click ta tiến hành khởi tạo và hiển thị Form2. Giá trị của ô textbox trong Form1 sẽ được chuyền sang cho Form2 thông qua thuộc tính, và gán vào Label của Form2. private voidbutton1_Click(object sender, System.EventArgs e) { Form2 frm = new Form2(); frm._textBox = _textBox1; //gán giá trị của thuộc tính _textbox1 của Form1 cho thuộc tính _textbox của Form2 frm.Show(); // Hiển thị Form2 } Kết quả được hiển thị như hình ảnh trong phần đầu đã giới thiệu.
Bước 1: Ở Form1 ta tiến hành add một delegates như sau public delegate void delPassData(TextBoxtext); Bước 2: Trong Form2 ta tiến hành tạo một phương thức để delegate sẽ trỏ tới. Trong phương thức này ta tiến hành gán giá trị của ô textbox trong Form1 vào Label của Form2: public void funData(TextBox txtForm1) { label1.Text = txtForm1.Text; } Bước 3: Trong sự kiện button click của form1 ta tiến hành khởi tạo Form2 và delegate. Chỉ ra một phương thức của Form2 và tiến hành gọi delegate như sau: private voidbtnSend_Click(object sender, System.EventArgs e) { Form2 frm = new Form2(); delPassData del = new delPassData(frm.funData); del(this.textBox1); frm.Show(); } Kết quả được thể hiện như hình ảnh ở phần đầu tiên. Trong 4 phương pháp này, phương pháp sử dụng hàm dựng (Constructor) được đánh giá là kém nhất, vì đối tượng chỉ được khởi tạo một lần, nếu đối tượng ko được hủy(form2 không hủy hoặc tắt đi) mà ta lại muốn thay đổi dữ liệu chuyền từ form1 sang form2 thì phương pháp này ko thực hiện được. Delegate là phương pháp khắc phục rất tốt nhược điểm này. |