We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy.
Unfortunately, activation email could not send to your email. Please try again.

Can''t load docking manager layout that was saved with version <4.4

Thread ID:

Created:

Updated:

Platform:

Replies:

52701 Dec 1,2006 04:11 PM Dec 12,2006 06:00 PM Windows Forms 16
loading
Tags: Tools
Administrator [Syncfusion]
Asked On December 1, 2006 04:11 PM

The layout loads incorrectly (only one docked window is created and it is screwed, anyway).

dockingManager.LoadDockState(new AppStateSerializer(SerializeMode.BinaryFmtStream, stream));

//19341 - this is added so I can find this thread in the future. We desperately need the "my threads" feature :)

Administrator [Syncfusion]
Replied On December 1, 2006 04:43 PM

Sorry, false alarm, it looks like I don't even get to LoadDockState because of the NullReferenceException in the SetEnableDocking(Control, bool) method:

public void RemoveViewer(Control c)
{
if (!DockingManager.GetEnableDocking(c)) throw new Exception("No such control in this view."); // returns false, continue execution

DockingManager.SetEnableDocking(c, false); // NullReferenceException here
}

I'll try to reproduce this issue now.

Administrator [Syncfusion]
Replied On December 5, 2006 01:23 PM

While trying to reproduce this bug, I've found another one. In the attached example, SDI's panel1 is still docked, even though the call to dockingManager.SetEnableDocking(panel1, false) was made after InitializeComponent().

ClosingFloatingWindow0.zip

Murugan [Syncfusion]
Replied On December 5, 2006 01:44 PM

Hi Andrew,

Docking related operations has to be done after the form_load event.Because at that time, docking manager is not yet initialized. So it is to be done in DockingManager.NewDockStateEndLoad event. Please refer the below KB article for more details.
 Is the Form.Load event handler a good place to perform custom initialization of the docking layout?
Please let me know if you need further assistance.
Thanks for using Syncfusion products.
Regards,
Murugan P.S

Administrator [Syncfusion]
Replied On December 5, 2006 04:02 PM

Ooops, that's a bummer. I wonder why did you decide to make this restriction? It used to work fine prior to 4.4 version. Actually, now it's quite a problem for us because we do lots of docking-related things in form's deserialization constructor (our SDI forms are serializable) :'( Moving this code out of constructor is a non-trivial task.

Murugan [Syncfusion]
Replied On December 5, 2006 07:01 PM

Hi Andrew,

This restriction is there in previous versions also. Could you please provide your Essential Studio version that you have been using?. This will help us to check the issue in that version and go further analysis.

Thanks,
Murugan P.S

Administrator [Syncfusion]
Replied On December 5, 2006 07:32 PM

We used 4.2.0.37 prior to 4.4. We definitely extensively used dockingManager before the Load event (at least for a couple of years :))

Now I modified the code in such a way that it doesn't access dockingManager before the Load event fires. Still, we're getting NullReferenceException and IndexOutOfBoundsException left and right in SF libraries :(

For instance, when the SDI form is closed, I get the following exception:

> Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.DockHost.OnPaint(System.Windows.Forms.PaintEventArgs e = {ClipRectangle = {X=0,Y=0,Width=552,Height=468}}) Line 4285 + 0x15 bytes C#
[External Code]
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.DockHost.WndProc(ref System.Windows.Forms.Message msg = {msg=0xf (WM_PAINT) hwnd=0x60eb0 wparam=0x0 lparam=0x0 result=0x0}) Line 4452 + 0xb bytes C#
[External Code]
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.MainFormController.AdjustLayout() Line 988 + 0xd bytes C#
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.MainFormController.LayoutRect.set(System.Drawing.Rectangle value = {X = 0 Y = 64 Width = 1265 Height = 961}) Line 116 + 0xa bytes C#
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.MainFormController.AdjustLayoutDockArea() Line 1148 + 0x22 bytes C#
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.MainFormController.ChildControl_SizeChanged(object sender = {Syncfusion.Windows.Forms.Tools.XPMenus.CommandDockBarExt}, System.EventArgs e = {System.EventArgs}) Line 428 + 0xb bytes C#
[External Code]
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.CommandDockBar.OnSizeChanged(System.EventArgs e = {System.EventArgs}) Line 983 + 0x9 bytes C#
[External Code]
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.XPMenus.CommandDockBarExt.WndProc(ref System.Windows.Forms.Message m = {msg=0x47 (WM_WINDOWPOSCHANGED) hwnd=0x450cb8 wparam=0x0 lparam=0x12dc64 result=0x0}) Line 252 + 0x9 bytes C#
[External Code]
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.CommandDockBar.SetBoundsCore(int x = 0, int y = 0, int width = 1265, int height = 64, System.Windows.Forms.BoundsSpecified specified = Width | Height) Line 1014 + 0x17 bytes C#
[External Code]
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.CommandDockBar.CalcDockbarSize() Line 884 + 0x42 bytes C#
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.CommandDockBar.RemoveCommandBar(Syncfusion.Windows.Forms.Tools.CommandBar cbar = {Syncfusion.Windows.Forms.Tools.XPMenus.CommandBarExt}) Line 471 + 0x7 bytes C#
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.CommandBarController.ApplyDeserializedState(System.Collections.IEnumerator ebarlist = {System.Collections.ArrayList.ArrayListEnumeratorSimple}) Line 1153 + 0x19 bytes C#
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.CommandBarController.FreezeLayout.set(bool value = false) Line 649 + 0x1c bytes C#
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.XPMenus.CommandBarManager.UnLockBars() Line 622 + 0xc bytes C#
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.XPMenus.MainFrameBarManager.LatestActiveMdiChild.set(System.Windows.Forms.Form value = null) Line 322 + 0xa bytes C#
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.XPMenus.MainFrameBarManager.OnMdiChildRemoved(System.Windows.Forms.Form childForm = {Jnj.ThirdDimension.Explorer.View, Text: SAR}, bool fromClose = true) Line 2092 + 0xa bytes C#
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.XPMenus.MainFrameBarManager.OnFormClosed(System.Windows.Forms.Form form = {Jnj.ThirdDimension.Explorer.View, Text: SAR}) Line 3354 + 0xb bytes C#
Syncfusion.Tools.Windows.dll!Syncfusion.Windows.Forms.Tools.XPMenus.BarManager.FormClosed(object sender = {Jnj.ThirdDimension.Explorer.View, Text: SAR}, System.EventArgs e = {System.Windows.Forms.FormClosedEventArgs}) Line 6064 + 0x19 bytes C#
[External Code]
ThirdDimension.Explorer.dll!Jnj.ThirdDimension.Explorer.View.OnClosed(System.EventArgs e = {System.Windows.Forms.FormClosedEventArgs}) Line 2527 + 0xb bytes C#

Administrator [Syncfusion]
Replied On December 5, 2006 07:35 PM

I forgot to mention that was an ArgumentOutOfRangeException, 'Index 0 is out of range.':

ProvideGraphicsItemsEventArgs pgargs = new ProvideGraphicsItemsEventArgs(
Controls[0], // here dcInternal.DockingManager.Renderer.CaptionBounds,
captionState == CaptionState.Active );

Murugan [Syncfusion]
Replied On December 6, 2006 07:37 PM

Hi Andrew,

We really regret for the inconvenience caused. We are looking into this. We will update the details tomorrow.

Thanks for your patience.

Regards,
Murugan P.S

Murugan [Syncfusion]
Replied On December 7, 2006 11:54 AM

Hi Andrew,

Could you please send me the sample having the issue?. This will help us to analyse the issue further.

Thanks for your patience.

Regards,
Murugan P.S

Administrator [Syncfusion]
Replied On December 7, 2006 03:23 PM

The problem is that I couldn't reproduce this bug in a simple app, although I'm still trying. Our product is a quite complex plugin-enabled MDI application, with menus/toolbars/viewers being dynamically added at runtime.

Is there anything else I can possibly do in order to track this bug down?

Murugan [Syncfusion]
Replied On December 8, 2006 06:56 PM

Hi Andrew,

Could you please provide me the cs file having form_load event code and if possible provide me reproducing steps?. This will help us to analyse the issue further.

Thanks,
Murugan P.S

Administrator [Syncfusion]
Replied On December 11, 2006 01:42 PM

Here's an update: I get this exception only when the last child form is closed. So if I open 3 views, close any 2 of them (order is irrelevant), it will still work fine. Exception will occur only when I close the last one.

I'm removing the irrelevant stuff from the .cs file and will post it here soon.

Thanks!
Andrew

Administrator [Syncfusion]
Replied On December 11, 2006 03:55 PM

Well I finally managed to reproduce it and found a workaround :) It looks like now DockingManager is subscribing to the docked control's Disposed event; when handling this event, it removes the control from docking manager's Controls collection (I'm not 100% sure about it, that's just deduction). Later in the DockHost.OnPaint method, you access Controls[0] and at that time the Controls collection is empty.

In our code, we override OnClosed method, process docked controls and then dispose them. The simplified code looks like that:

protected override void OnClosed(EventArgs e)
{
foreach (Control c in dockingManager1.ControlsArray)
{
c.Dispose();
}
base.OnClosed(e);
}

If we move the "foreach" block after the base.OnClosed(e) call, the problem goes away. Well, almost goes away, since it breaks the logic of our code, but at least now we are able to work around this bug.

Attached is an example demonstrating the problem. Simply add a view (View->New) and close it.

ClosingFloatingWindow2.zip

Murugan [Syncfusion]
Replied On December 11, 2006 05:34 PM

Hi Andrew,

Thanks for your sample. We are glad to hear that the problem is solved by your workarounds. I am afraid, still we were not able to reproduce the issue here. Herewith I have attached the video file that shows my testing process. Please refer the video and let me know if i have missed something in reprocducing the issue.
TestingProcess
Regards,
Murugan P.S


Administrator [Syncfusion]
Replied On December 12, 2006 04:16 PM

Hi Murugan,

Yes, it turned out that it works correctly with the 4.4.0.51 version. Our mistake was that we tested it against the 4.4.0.46 version. One guy in our team tried the new 4.4.0.51 version when it came out, got the same exception (I believe it was because we were accessing DockingManager before the Load event), that's why we decided not to upgrade at that point.

I'm sorry that you wasted your time trying to help us, of course we should have upgraded to the latest version.

Thanks for the great support!
-Andrew

Murugan [Syncfusion]
Replied On December 12, 2006 06:00 PM

Hi Andrew,

We are glad to hear that the issue has been resolved in latest version v4.4.

Thanks for using Syncfusion support.

Regards,
Murugan P.S

CONFIRMATION

This post will be permanently deleted. Are you sure you want to continue?

Sorry, An error occured while processing your request. Please try again later.

You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.

;