Melewatkan data antar form
Melakukan hal ini mungkin merupakan hal yang sepele bagi programmer Visual Basic 6 seperti saya dan Anda , kita ambil contoh gambar berikut :
Untuk melakukannya di VB 6 kita cukup mengetikan kode berikut :
Private Sub cmdTampilForm2_Click()
With Form2
.Text1.Text = Text1.Text
.Text2.Text = Text2.Text
.Text3.Text = Text3.Text
.Show vbModal
End With
End Sub
Hemmm simple bukan ??? Bagaimana dengan C# tentu tidak segampang kode diatas dan ini mungkin salah satu penyebab banyak programmer VB 6 yang enggan mempelajari bahasa yang satu ini :mad:.
Ada banyak solusi tapi yang kita bahasa disini cukup dengan memanfaatkan constructor.
Constructor adalah method khusus yang akan dipanggil otomatis setiap kita membuat objek dari sebuah class.
Jadi kita akan menambahkan constructor baru di Form 2 istilah kerennya sih overloading maksudnya kita membuat method dengan nama yang sama tetapi dengan signature yang berbeda, signature disini mengacu ke parameter.
Berikut kode Form 2:
namespace MelewatkanDataAntarForm
{
public partial class Form2 : Form
{
// constructor default
// otomatis dibuatkan pada saat kita menambah form baru
public Form2()
{
InitializeComponent();
}
// constructor baru yang ditambahkan
// dengan 3 signature(parameter)
public Form2(string t1, string t2, string t3) : this() // panggil constructor default
{
textBox1.Text = t1;
textBox2.Text = t2;
textBox3.Text = t3;
}
}
}
Nah bagaimana cara memanggil Form 2 tersebut dari Form 1 berikut kodenya :
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2(textBox1.Text, textBox2.Text, textBox3.Text);
frm.ShowDialog();
}
Dari contoh diatas data yang kita lewatkan cuma 3 yaitu yang diambil dari textBox1, textBox2 dan textBox3.
Bagaimana klo data yang kita lewatkan ada 10 atau 20 ? Tentu akan kurang keren klo kita harus membuat parameter sebanyak jumlah data yang akan dilewatkan.
Jadi kita akan coba solusinya berikut dengan menambahkan 1 constructor lagi dengan 1 parameter.
public Form2(object[] data) : this() // panggil constructor default
{
textBox1.Text = data[0].ToString();
textBox2.Text = data[1].ToString();
textBox3.Text = data[2].ToString();
}
Revisi kode pemanggilan Form 2:
private void button1_Click(object sender, EventArgs e)
{
object[] data = { textBox1.Text, textBox2.Text, textBox3.Text };
Form2 frm = new Form2(data);
frm.ShowDialog();
}
Sampai disini, kasus pertama sudah selesai sekarang kondisinya kita balik, data yang akan dilewatkan dari Form 2 ke Form 1.
Sebelumnya kita lihat dulu kode program menggunakan VB 6
Private Sub cmdOk_Click()
With Form1
.Text1.Text = Text1.Text
.Text2.Text = Text2.Text
.Text3.Text = Text3.Text
End With
End Sub
Seperti biasa memprogram di VB 6 memang membuat hidup lebih mudah :)
Bagaimana dengan C#, tentu kita tidak bisa mengguna solusi sebelumnya karena Form 1 sudah nampil, jadi kita akan menambahkan 1 buah interface dengan 1 method abstractnya misal dengan nama Ok
namespace MelewatkanDataAntarForm
{
public interface IListener
{
void Ok(object[] data);
}
}
Method Ok akan kita implementasikan di Form 1 sedangkan untuk Form 2 kita akan menambahkan 1 buah properties yang nilainya akan kita isi dari Form 1.
Kode Form 2 :
private IListener listener;
public IListener SetListener
{
set { listener = value; }
}
Setelah itu kita panggil kode berikut untuk melewatkan datanya ke Form 1
private void btnOk_Click(object sender, EventArgs e)
{
if (listener != null)
{
object[] data = { textBox1.Text, textBox2.Text, textBox3.Text };
listener.Ok(data);
}
}
Untuk Form 1 kita akan mengimplementasikan interface IListener
Adapun kode implementasi dari method Oknya adalah sebagai berikut :
public void Ok(object[] data)
{
textBox1.Text = data[0].ToString();
textBox2.Text = data[1].ToString();
textBox3.Text = data[2].ToString();
}
Terakhir kita revisi lagi kode pemanggilan Form 1 nya
private void button1_Click(object sender, EventArgs e)
{
object[] data = { textBox1.Text, textBox2.Text, textBox3.Text };
Form2 frm = new Form2(data);
frm.SetListener = this; // set listener form 2 disini
frm.ShowDialog();
}
Selamat MENCOBA
Comments