New to Telerik UI for WinForms? Start a free 30-day trial
Creating and managing docking windows dynamically
Updated over 6 months ago
| Product Version | Product | Author | Last modified |
|---|---|---|---|
| Q2 2007 | RadDock for WinForms | Julian Benkov | June 1, 2007 |
HOW-TO
Create and manage docking windows dynamically
SOLUTION A basic problem related to DockingManager is how to restore saved dock layout and it's content of inner controls hosted in DockPanel and DocumentPane windows.
The solution is to restore dynamically the windows using the GUID provided for the IDockable window from its ID - property:
C#
public partial class MainForm : Form
{
private ReportDataSet.ReportTableDataTable reports = new ReportDataSet.ReportTableDataTable();
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
#if Init
ReportDockForm form = new ReportDockForm();
form.Text = "Report 1";
form.ReportContent = "Report 1 Content!!!";
dockingManager.SetDocument(form);
form = new ReportDockForm();
form.Text = "Report 3";
form.ReportContent = "Report 3 Content!!!";
dockingManager.SetDocument(form);
form = new ReportDockForm();
form.Text = "Report 2";
form.ReportContent = "Report 2 Content!!!";
dockingManager.SetDocument(form);
#else
try
{
dockingManager.LoadXML(Application.StartupPath + "\\dock.cfg");
reports.ReadXml(Application.StartupPath + "\\reports.rpt");
for (int i = 0; i < reports.Count; i++)
{
ReportDockForm dockForm = GetDocumentForm(reports[i].DockGuid);
if (dockForm != null)
{
dockForm.Text = reports[i].Name;
dockForm.ReportContent = reports[i].Content;
}
}
}
catch { }
#endif
}
private ReportDockForm GetDocumentForm(string guid)
{
for (int i = 0; i < dockingManager.Documents.Count; i++)
{
if(dockingManager.Documents[i].ID.ToString() == guid)
{
return dockingManager.Documents[i] as ReportDockForm;
}
}
return null;
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
reports.Clear();
for (int i = 0; i < dockingManager.Documents.Count; i++)
{
ReportDockForm dockForm = dockingManager.Documents[i] as ReportDockForm;
if(dockForm != null)
{
ReportDataSet.ReportTableRow row = reports.NewReportTableRow();
row.DockGuid = dockForm.ID.ToString();
row.Name = dockForm.Text;
row.Content = dockForm.ReportContent;
reports.AddReportTableRow(row);
}
}
reports.AcceptChanges();
reports.WriteXml(Application.StartupPath + "\\reports.rpt");
dockingManager.SaveXML(Application.StartupPath + "\\dock.cfg");
}
}
Sample business object:
C#
public class ReportDockForm : UserDockForm
{
private RichTextBox rtf = new RichTextBox();
public ReportDockForm()
{
rtf.Dock = DockStyle.Fill;
this.Controls.Add(rtf);
}
public string ReportContent
{
get { return rtf.Text; }
set { rtf.Text = value; }
}
}