swf

Selasa, 18 Desember 2012

Membuat Windows Form Utama dengan form lain dipanggil seolah2 seperti Web

Misalnya saya memiliki 3 buah form. Form pertama adalah form utama, sebut saja frmMain. 2 form lain adalah form anak, misnya bernama frmAnak1, frmAnak2. Coding utk frmAnak1 dgn frmAnak2 tetap di form masing2. Tampilan halaman pada frmAnak1 akan terlihat di frmMain (form utama). Pada frmUtama dapat melihat tampilan form anak frmAnak1 dan frmAnak2, nah jadi seolah2 seperti bentuk web dimaan frmMain adalah Master.Pages-nya, form laen adalah anak2nya.
Saya akan beritahu caranya, pada form utama dipasang sebuah panel misalkan bernama panel1. Jadi begitu ada suatu perintah, maka form anak akan terlihat pada panel tersebut. Event pada form anak pertama juga dapat memanggil form kedua (atau form lainnya) dan form laennya akan tampil pada panel itu juga.
Pada tiap-tiap form anak, tambahkan field tersebut dibawah:
private Panel _mainPanel;
Kemudian tambahkan setter method untuk field tersebut
        public void setPanel(Panel pnl)
        {
            this._mainPanel = pnl;
        }

Untuk konstruktornya tambahkan overloading method seperti ini,
        public frmAnak1(Panel mainPanel)
        {
            InitializeComponent();
            _mainPanel = mainPanel;
        }

Lalu ini adalah method untuk memanggil frmAnak2 dari frmAnak1, misalkan suatu tombol ditekan akan memanggil method ini.

        private void closeFormAndBackToForm2() {
            if (_mainPanel != null)
            {
                frmAnak2 f = new frmAnak2(_mainPanel);
                f.TopLevel = false;
                f.Dock = DockStyle.Fill;
                _mainPanel.Controls.Clear();
                _mainPanel.Controls.Add(f);
                f.Show();
            }
        }

Lalu property pada form itu sendiri harus disetting khusus, klik pada badan utama form. Lihat bagian property. AutoScroll=True, FormBorderStyle=None.

Nah kemudian dari form induk (frmUtama) kita dapat panggil form mana yg akan diload ke panel-nya, misalnya frmAnak1 akan dipanggil duluan ke panel pada saat form_Load atau ditekannya suatu tombol.

       private void openfrmAnak1()
        {
            frmAnak1 f = new frmAnak1();
            f.setPanel(panel1);
            f.TopLevel = false;
            f.Dock = DockStyle.Fill;
            this.panel1.Controls.Clear();
            this.panel1.Controls.Add(f);
            f.Show();
        }

       private void openfrmAnak2()
        {
            frmAnak2 f = new frmAnak2();
            f.setPanel(panel1);
            f.TopLevel = false;
            f.Dock = DockStyle.Fill;
            this.panel1.Controls.Clear();
            this.panel1.Controls.Add(f);
            f.Show();
        }

Pada form utama bisa saja terdapat sejumlah panel khusus untuk membuka form lain. Panel itu di web menjadi seperti frame, jadi ada suatu event khusus akan membuka form lain di dalam frame itu. Contoh form diatas itu hanya 2 form, bisa saja lebih dari 2 form bahkan puluhan form dapat bertukar tempat dengan form yang lain dengan menyebutkan nama form untuk dibuat konstruktornya, setelah itu mengeset panel dengan nama panel di form utama.

Tidak ada komentar:

:)) ;)) ;;) :D ;) :p :(( :) :( :X =(( :-o :-/ :-* :| 8-} :)] ~x( :-t b-( :-L x( =))

Posting Komentar