Hi there,
I am currently developing an MDI application exploiting your Raddock Control.
As I am using forms as tabbed windows, I would like my application not to create a new tab (a second one), if the form is already open.
Currently I am using the following workaround and nonetheless I don’t like very much this way J
private void AddTabbedForm(BaseForm form)
{
if (this.radDock1.DockWindows.DocumentWindows.Where(w => w.Text == form.Text).Count() > 0)
{
this.radDock1.ActivateWindow(this.radDock1.DockWindows.DocumentWindows.Where(w => w.Text == form.Text).First());
return;
}
form.MdiParent = this;
form.Show();
}
Any hint to have it implemented in a more elegant way?
Thank you very much
Davide
3 Answers, 1 is accepted
0
Accepted
Richard Slade
Top achievements
Rank 2
answered on 26 Apr 2012, 03:08 PM
Hi Davide,
I would make the forms that you wish to display singleton classes and then not only can you show just the single instance, but you can also focus on the correct form as well.
There are a few parts to this...
The Main Form
Designer File
Main Form
MDI Child1 Designer
MDIChild1 Form
(for MDI Child 2, just copy MDIChild1, replacing MDIChild1 with MDIChild2)
Hope this helps.
Please remember to mark as answer if this solves your issue, or let me know if you have further questions
Richard
I would make the forms that you wish to display singleton classes and then not only can you show just the single instance, but you can also focus on the correct form as well.
There are a few parts to this...
The Main Form
Designer File
namespace
RadControlsWinFormsApp1
{
partial
class
Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private
System.ComponentModel.IContainer components =
null
;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected
override
void
Dispose(
bool
disposing)
{
if
(disposing && (components !=
null
))
{
components.Dispose();
}
base
.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private
void
InitializeComponent()
{
this
.radButton1 =
new
Telerik.WinControls.UI.RadButton();
this
.radButton2 =
new
Telerik.WinControls.UI.RadButton();
this
.radDock1 =
new
Telerik.WinControls.UI.Docking.RadDock();
this
.documentContainer1 =
new
Telerik.WinControls.UI.Docking.DocumentContainer();
((System.ComponentModel.ISupportInitialize)(
this
.radButton1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(
this
.radButton2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(
this
.radDock1)).BeginInit();
this
.radDock1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(
this
.documentContainer1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(
this
)).BeginInit();
this
.SuspendLayout();
//
// radButton1
//
this
.radButton1.Dock = System.Windows.Forms.DockStyle.Top;
this
.radButton1.Location =
new
System.Drawing.Point(0, 0);
this
.radButton1.Name =
"radButton1"
;
this
.radButton1.Size =
new
System.Drawing.Size(467, 24);
this
.radButton1.TabIndex = 0;
this
.radButton1.Text =
"Launch MDI Form 1"
;
this
.radButton1.Click +=
new
System.EventHandler(
this
.radButton1_Click);
//
// radButton2
//
this
.radButton2.Dock = System.Windows.Forms.DockStyle.Top;
this
.radButton2.Location =
new
System.Drawing.Point(0, 24);
this
.radButton2.Name =
"radButton2"
;
this
.radButton2.Size =
new
System.Drawing.Size(467, 24);
this
.radButton2.TabIndex = 1;
this
.radButton2.Text =
"Launch MDI Form 2"
;
this
.radButton2.Click +=
new
System.EventHandler(
this
.radButton2_Click);
//
// radDock1
//
this
.radDock1.Controls.Add(
this
.documentContainer1);
this
.radDock1.Dock = System.Windows.Forms.DockStyle.Fill;
this
.radDock1.DocumentManager.DocumentInsertOrder = Telerik.WinControls.UI.Docking.DockWindowInsertOrder.InFront;
this
.radDock1.Location =
new
System.Drawing.Point(0, 48);
this
.radDock1.MainDocumentContainer =
this
.documentContainer1;
this
.radDock1.Name =
"radDock1"
;
this
.radDock1.Padding =
new
System.Windows.Forms.Padding(5);
//
//
//
this
.radDock1.RootElement.MinSize =
new
System.Drawing.Size(25, 25);
this
.radDock1.Size =
new
System.Drawing.Size(467, 421);
this
.radDock1.SplitterWidth = 4;
this
.radDock1.TabIndex = 2;
this
.radDock1.TabStop =
false
;
this
.radDock1.Text =
"radDock1"
;
//
// documentContainer1
//
this
.documentContainer1.Location =
new
System.Drawing.Point(5, 5);
this
.documentContainer1.Name =
"documentContainer1"
;
this
.documentContainer1.Padding =
new
System.Windows.Forms.Padding(5);
//
//
//
this
.documentContainer1.RootElement.MinSize =
new
System.Drawing.Size(25, 25);
this
.documentContainer1.Size =
new
System.Drawing.Size(457, 411);
this
.documentContainer1.SizeInfo.SizeMode = Telerik.WinControls.UI.Docking.SplitPanelSizeMode.Fill;
this
.documentContainer1.SplitterWidth = 4;
this
.documentContainer1.TabIndex = 0;
this
.documentContainer1.TabStop =
false
;
//
// Form1
//
this
.AutoScaleDimensions =
new
System.Drawing.SizeF(6F, 13F);
this
.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this
.ClientSize =
new
System.Drawing.Size(467, 469);
this
.Controls.Add(
this
.radDock1);
this
.Controls.Add(
this
.radButton2);
this
.Controls.Add(
this
.radButton1);
this
.Name =
"Form1"
;
//
//
//
this
.RootElement.ApplyShapeToControl =
true
;
this
.Text =
"Form1"
;
((System.ComponentModel.ISupportInitialize)(
this
.radButton1)).EndInit();
((System.ComponentModel.ISupportInitialize)(
this
.radButton2)).EndInit();
((System.ComponentModel.ISupportInitialize)(
this
.radDock1)).EndInit();
this
.radDock1.ResumeLayout(
false
);
((System.ComponentModel.ISupportInitialize)(
this
.documentContainer1)).EndInit();
((System.ComponentModel.ISupportInitialize)(
this
)).EndInit();
this
.ResumeLayout(
false
);
}
#endregion
private
Telerik.WinControls.UI.RadButton radButton1;
private
Telerik.WinControls.UI.RadButton radButton2;
private
Telerik.WinControls.UI.Docking.RadDock radDock1;
private
Telerik.WinControls.UI.Docking.DocumentContainer documentContainer1;
}
}
Main Form
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Windows.Forms;
using
Telerik.WinControls;
using
Telerik.WinControls.UI;
namespace
RadControlsWinFormsApp1
{
public
partial
class
Form1 : RadForm
{
public
Form1()
{
InitializeComponent();
this
.IsMdiContainer =
true
;
this
.radDock1.AutoDetectMdiChildren =
true
;
}
private
void
radButton1_Click(
object
sender, EventArgs e)
{
MdiChild1 child1 = MdiChild1.Instance;
DisplayForm(child1);
}
private
void
radButton2_Click(
object
sender, EventArgs e)
{
MdiChild2 child2 = MdiChild2.Instance;
DisplayForm(child2);
}
private
void
DisplayForm(System.Windows.Forms.Form form)
{
this
.Cursor = Cursors.WaitCursor;
if
(
this
.Contains(form))
{
Telerik.WinControls.UI.Docking.HostWindow host = (Telerik.WinControls.UI.Docking.HostWindow)form.Parent;
this
.radDock1.ActivateWindow(host);
}
else
{
form.MdiParent =
this
;
form.Show();
Telerik.WinControls.UI.Docking.HostWindow host = (Telerik.WinControls.UI.Docking.HostWindow)form.Parent;
this
.radDock1.ActivateWindow(host);
}
form.Focus();
this
.Cursor = Cursors.Default;
}
}
}
MDI Child1 Designer
namespace
RadControlsWinFormsApp1
{
partial
class
MdiChild1
{
/// <summary>
/// Required designer variable.
/// </summary>
private
System.ComponentModel.IContainer components =
null
;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected
override
void
Dispose(
bool
disposing)
{
if
(disposing && (components !=
null
))
{
components.Dispose();
}
base
.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private
void
InitializeComponent()
{
((System.ComponentModel.ISupportInitialize)(
this
)).BeginInit();
this
.SuspendLayout();
//
// MdiChild1
//
this
.AutoScaleDimensions =
new
System.Drawing.SizeF(6F, 13F);
this
.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this
.ClientSize =
new
System.Drawing.Size(298, 279);
this
.Name =
"MdiChild1"
;
this
.Text =
"MdiChild1"
;
this
.ThemeName =
"ControlDefault"
;
((System.ComponentModel.ISupportInitialize)(
this
)).EndInit();
this
.ResumeLayout(
false
);
}
#endregion
}
}
MDIChild1 Form
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Text;
using
System.Windows.Forms;
using
Telerik.WinControls;
namespace
RadControlsWinFormsApp1
{
public
partial
class
MdiChild1 : Telerik.WinControls.UI.RadForm
{
private
static
MdiChild1 s_Instance;
private
MdiChild1()
{
InitializeComponent();
this
.FormClosed +=
new
FormClosedEventHandler(MdiChild1_FormClosed);
}
public
static
MdiChild1 Instance
{
get
{
if
(MdiChild1.s_Instance ==
null
)
{
MdiChild1.s_Instance =
new
MdiChild1();
}
return
MdiChild1.s_Instance;
}
}
void
MdiChild1_FormClosed(
object
sender, FormClosedEventArgs e)
{
s_Instance =
null
;
}
}
}
(for MDI Child 2, just copy MDIChild1, replacing MDIChild1 with MDIChild2)
Hope this helps.
Please remember to mark as answer if this solves your issue, or let me know if you have further questions
Richard
0
Davide
Top achievements
Rank 1
answered on 26 Apr 2012, 03:47 PM
Hi Richard,
thank you for the good answer, I like this Singleton approach, but now we have already more than thirty developed forms,
and time to finish application it's not so much :-) , if there was anything that would allow me to avoid to touch all forms would be better
Davide
thank you for the good answer, I like this Singleton approach, but now we have already more than thirty developed forms,
and time to finish application it's not so much :-) , if there was anything that would allow me to avoid to touch all forms would be better
Davide
0
Accepted
Richard Slade
Top achievements
Rank 2
answered on 26 Apr 2012, 04:16 PM
Hi Davide,
In that case, your current workaround would probably be fine. Though, to alter 30 forms to singleton shouldn't take too long.
Regards,
Richard
In that case, your current workaround would probably be fine. Though, to alter 30 forms to singleton shouldn't take too long.
Regards,
Richard