New to Telerik UI for WinForms? Download free 30-day trial

Creating and managing docking windows dynamically

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:

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:

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; } 
    } 
} 
In this article