Check out the Singleton design pattern. You can apply it to a Form so
that there is only ever one instance of the Form at any given time. It
goes something like this:
public class SingletonForm : System.Windows.Forms.Form
{
private static SingletonForm _instance = null;
private SingletonForm()
{
... usual constructor stuff here ...
}
public SingletonForm Instance
{
get
{
if (SingletonForm._instance == null)
{
SingletonForm._instance = new SingletonForm();
}
return SingletonForm._instance;
}
}
}
Then, wherever in your code you need a new SingletonForm, you say
SingletonForm f = SingeltonForm.Instance;
f.Show();
If there already is one, then it will give it back to you. If there
isn't one, then it will create one.
Of course, you should always use .Show() with this form,
never .ShowDialog(). If the form is already showing and you do
a .ShowDialog(), I have no idea what will happen. (Anyone care to let
us know?)
I need to supply some more information. All of my forms are contained
within MdiParent. On this MdiParent, I have a docked panel with
linklabel to open this form to expose all records. Also have another
linklabel to open another form with datagridview listing showing all
records pertaining to one record. When you doubleclick a row in
datagridview, opens the above form to a specific record. That latter
works fine, but the coding for showing all records is bypassed. See
below:
//The Following is for the LinkLabel Control
private void WorkOrder_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the
'datasetWorkOrders.Workorder_Labor' table. You can move, or remove it,
as needed.
this.workorder_LaborTableAdapter.Fill(this.datasetWorkOrders.Workorder_Labor);
// TODO: This line of code loads data into the
'datasetWorkOrders.WorkOrderMaterial' table. You can move, or remove
it, as needed.
this.workOrderMaterialTableAdapter.Fill(this.datasetWorkOrders.WorkOrderMaterial);
// TODO: This line of code loads data into the
'datasetWorkOrders.Locations' table. You can move, or remove it, as
needed.
this.locationsTableAdapter.Fill(this.datasetWorkOrders.Locations);
// TODO: This line of code loads data into the
'datasetWorkOrders.Customers' table. You can move, or remove it, as
needed.
this.customersTableAdapter.Fill(this.datasetWorkOrders.Customers);
// TODO: This line of code loads data into the
'datasetWorkOrders.Work_Order' table. You can move, or remove it, as
needed.
this.work_OrderTableAdapter.Fill(this.datasetWorkOrders.Work_Order);
}
//The Following is for the Double-Click event on the
datagridrow view on other form
internal void WorkOrder_LoadView(int WorkOrderID)
{
work_OrderTableAdapter.FillByWorkOrderID(datasetWorkOrders.Work_Order,
WorkOrderID);
this.workorder_LaborTableAdapter.Fill(this.datasetWorkOrders.Workorder_Labor);
this.workOrderMaterialTableAdapter.Fill(this.datasetWorkOrders.WorkOrderMaterial);
this.locationsTableAdapter.Fill(this.datasetWorkOrders.Locations);
this.customersTableAdapter.Fill(this.datasetWorkOrders.Customers);
}