Home > Visual C# > Melewatkan data antar form

Melewatkan data antar form

August 9, 2011

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😡.

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

    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

      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
      
  2. July 28, 2012 at 11:37 am

    mas maaf mau tanya
    gmn cara menampilkan format currency (rupiah) di textbox
    sebelumnya saya udah coba, tapi ketika perhitungannya jadi ngaco
    ex : 50.000, jadi bilangan trsbt hanya terbaca 50 saja

    • July 28, 2012 at 12:53 pm

      Cara yg gampang dengan memanfaatkan method Replace untuk menghilangkan karakter titik (.) atau koma (,).

      long lNumber = 1000000;
      string sNumber = string.Format("{0:N0}", lNumber);
      
      MessageBox.Show(sNumber);
      
      // hapus karakter titik dan koma
      sNumber = sNumber.Replace(".", string.Empty);
      sNumber = sNumber.Replace(",", string.Empty);
      
      // sNumber ini yg digunakan untuk perhitungan berikutnya
      MessageBox.Show(sNumber);
      

      Cara yg lain menggunakan class Regular Expressions

      long lNumber = 1000000;
      string sNumber = string.Format("{0:N0}", lNumber);
      
      MessageBox.Show(sNumber);
      
      Regex regex = new Regex("[^0-9]");
      sNumber = regex.Replace(sNumber, string.Empty);
      
      // sNumber ini yg digunakan untuk perhitungan berikutnya
      MessageBox.Show(sNumber);
      

      Cara yg kedua ini harus menambahkan namespace System.Text.RegularExpressions

      using System.Text.RegularExpressions;
      
  3. senja
    December 28, 2012 at 10:47 am

    tanya?
    ada 2 form
    form1: inputan data (tombol save,close)
    form2: hasil inputan (tombol add,edit,delete)
    ketika klik tombol add maka muncul form1, menginput terus klik save dan data masuk ke form2 yang ada datagridnya
    gimana caranya biar data yang kita input masuk ke form2 yang ada datagrid nya?

    • January 2, 2013 at 11:03 am

      Ada 2 solusi yg bisa om coba :
      1. Menggunakan public variabel yg dideklarasikan di form 1, masing-masing variabel mewakili inputan yg ada di form 1
      2. Memanfaatkan event

  4. dinaa
    May 21, 2013 at 4:06 pm

    om, sya mau tnya. sy lg buat aplikasi warehouse (gudang). tp sy dpt mslh untuk perhitungan stoknya. gmn crany mmbuat datagrid ke update otomatis jika ada brg msuk ataupun brg keluar dr gudang. mhon pncerahannya.

  5. February 19, 2014 at 4:02 pm

    mas bro kan dari form 1 ya………..
    klau kita mau mnjalan kan form 2 kok mlah form 1 yg runing ya……..
    gmna klau saya mau mnjalankan form 2 mas bro……
    mohon pnceRAHAN NYA DONK…………..

    • March 4, 2014 at 9:58 am

      Entry point di method Main diarahkan ke form 2

      static void Main()
      {
          Application.EnableVisualStyles();
          Application.SetCompatibleTextRenderingDefault(false);
          //Application.Run(new Form1());
          Application.Run(new Form2());
      }
      
  6. April 26, 2014 at 8:19 am

    mas,,, aku mau nampilkan data dari form1 yg udah tersimpan,, tp dia intruksinya dari text1 form2,, misalnya nik, nik ini adalah text1 dari form1,, trus aku mau panggil nik ini dr form2 dan akan tampil semua data yg telah tersimpan dari form1,, Gimana Caranya mas???
    tolong di bantu,, soalnya ni masalah saya waktu mau bikin skripsi….

    • April 26, 2014 at 9:24 am

      Klo VB 6 ya sama seperti postingan saya di atas, dengan menyebutkan NAMA_FORM.NAMA_OBJEK.

  1. April 16, 2014 at 9:14 am
Comments are closed.
%d bloggers like this: