Home > Visual C# .NET > Melewatkan data antar form

Melewatkan data antar form

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

  1. ipoel
    August 21, 2011 at 9:47 pm | #1

    maaf kalo saya salah tempat, saya baru belajar vb 6.0 dengan database MySql dan saya mempunyai sebuah kasus,
    bagaimana pencarian data menggunakan 2 buah DTPicker, ketika kita klik tombol cari maka data yg kita cari muncul di datagrid,
    dan apabila kita menekan tombol hapus, semua data yg muncul di datagrid akan terhapus, ane menggunakan database Mysql. kalo ada link untuk contoh programnya, maaf tulisanya berantakan soalnya jarang nulis, tanks…

    • August 22, 2011 at 2:28 am | #2

      Coba seperti ini om :

      Private Sub btnCari_Click()
          strSql = "SELECT * FROM nama_tabel WHERE field_tanggal BETWEEN '" & DTPicker1.Value & "' AND '" & DTPicker2.Value & "'"
          ' TODO : perintah untuk menampilkan ke datagrid
      End Sub
      
      Private Sub cmdDelete_Click()
          strSql = "DELETE FROM nama_tabel WHERE field_tanggal BETWEEN '" & DTPicker1.Value & "' AND '" & DTPicker2.Value & "'"
          conn.Execute strSql
          
          btnCari_Click ' panggil ulang event btnCari_Click
      End Sub
      
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s