Singleton for MDI child forms with c#

Posted: Tuesday,November 18, 2008 in C#
Tags: , , , ,

Ketika kita membuat MDI Form Aplikasi, biasanya kita hanya ingin memiliki satu object untuk setiap MDI Child yang dapat kita buka dan tutup kapan saja… Kita bisa memastikan bahwa setiap MDI Child yg ingin kita buka apakah sudah dibuka sebelumnya. Untuk itulah kita gunakan singleton pattern sebagai solusi dari masalah ini…

1. Buatlah MDI.cs , Form1.cs, Form2.cs

Set MDI.cs sebagai MDI Container dengan cara mengubah nilai properties IsMdiContainer = True.

2. Tambahkan MenuStrip di MDI Form

Ketikkan Form1. Dan di sebelah kanannya Form2

3. Pada View Code MDI.cs. Ketikkan Kode Berikut :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class MDI : Form
{
public MDI()
{
InitializeComponent();
}

private static MDI aForm = null;

public static MDI Instance()
{
if (aForm == null)
{
aForm = new MDI();
}
return aForm;
}

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
aForm = null;
}

private void form1ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form f = Form1.Instance();
f.MdiParent = this;
f.Show();
f.Activate();
}

private void form2ToolStripMenuItem_Click(object sender, EventArgs e)
{
Form f = Form2.Instance();
f.MdiParent = this;
f.Show();
f.Activate();
}
}
}

Dengan catatan pada MDI.designer.cs hapus kode ini :

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

4. Pada View Code Form1.cs. Ketikkan Kode Berikut :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private static Form1 aForm = null;

public static Form1 Instance()
{
if (aForm == null)
{
aForm = new Form1();
}
return aForm;
}

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
aForm = null;
}

}
}

Dengan catatan pada Form1.designer.cs hapus kode ini :

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

5. Pada View Code Form2.cs. Ketikkan Kode Berikut :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private static Form2 aForm = null;

public static Form2 Instance()
{
if (aForm == null)
{
aForm = new Form2();
}
return aForm;
}

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
aForm = null;
}
}
}

Dengan catatan pada Form2.designer.cs hapus kode ini :

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

6. Start Debugging / tekan F5

Sekedar mengingatkan, codingan c# ini case sensitif… Jadi hati-hati menuliskan kodenya.šŸ˜€

Semoga membantu… Good Luck!!!

Comments
  1. layyuddi says:

    1. kk itu tanda kurungnya kok dempet semua di batas kiri, jadi susah bacanya!!
    2. trus mana bahasan coding nya?copas coding doank, penjelasan dunk biar ngerti!!
    3. Menurut aku di masing-masing Form.designer.cs ga perlu dihapus tuh Method Disposenya, cukup ditambah aja aForm = null;, sedangkan yg di masing-masing Form.cs kita ga perlu tulis method dispose lg. Biarlah Method dispose tetap di designer.cs

  2. wihemdra says:

    @ layyuddi :
    1. Maap kalo susah dibaca..
    2. Bahasan kodingny gada, karena semua sudah jelas.
    3. Sepertinya harus dipindah, karena aForm ini didefinisikan di .cs nya bukan designer.cs nya…

  3. merry says:

    tq ya mas… untung ada tutorial ini, jadi bs belajar c#….

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 )

Google+ photo

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

Connecting to %s