Melewatkan data antar form

Posted by Kamarudin • 2 minute read • Comments

Melakukan hal ini mungkin merupakan hal yang sepele bagi programmer Visual Basic 6 seperti saya dan Anda :grin:, 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 :blush:

Comments