StrataFrame Forum

Odd ThemedSplitContainer Behavior

http://forum.strataframe.net/Topic20549.aspx

By Bill Cunnien - 11/4/2008

If I minimize a form that has this control on it (orientation: horizontal), then restore the form, I get the following error:


System.ArgumentException was unhandled by user code
  Message="Rectangle '{X=0,Y=70,Width=0,Height=4}' cannot have a width or height equal to 0."
  Source="System.Drawing"
  StackTrace:
       at System.Drawing.Drawing2D.LinearGradientBrush..ctor(Rectangle rect, Color color1, Color color2, LinearGradientMode linearGradientMode)    at MicroFour.StrataFrame.UI.Windows.Forms.ThemedSplitContainer.RenderHorizontalBar(Graphics DrawObj)    at MicroFour.StrataFrame.UI.Windows.Forms.ThemedSplitContainer.OnPaint(PaintEventArgs e)    at System.Windows.Forms.Control.PaintTransparentBackground(PaintEventArgs e, Rectangle rectangle, Region transparentRegion)    at System.Windows.Forms.Control.PaintTransparentBackground(PaintEventArgs e, Rectangle rectangle)    at System.Windows.Forms.Control.PaintBackground(PaintEventArgs e, Rectangle rectangle, Color backColor, Point scrollOffset)    at System.Windows.Forms.Control.PaintBackground(PaintEventArgs e, Rectangle rectangle)    at System.Windows.Forms.Control.OnPaintBackground(PaintEventArgs pevent)    at System.Windows.Forms.ScrollableControl.OnPaintBackground(PaintEventArgs e)    at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)    at System.Windows.Forms.Control.WmEraseBkgnd(Message& m)    at System.Windows.Forms.Control.WndProc(Message& m)    at System.Windows.Forms.ScrollableControl.WndProc(Message& m)    at System.Windows.Forms.Control.ControlNativewindow.OnMessage(Message& m)    at System.Windows.Forms.Control.ControlNativewindow.WndProc(Message& m)    at System.Windows.Forms.Nativewindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
  InnerException:

How would I correct this problem?

Thanks,
Bill

By Dustin Taylor - 11/5/2008

The first thing to do is to ensure you are on the latest version of the software. There was a similar issue we fixed a couple of versions ago that may be manifesting in the way you are describing. If you update to the latest version and still experience the behavior we'll take a closer look at it, but I don't think there is an issue here.
By Bill Cunnien - 11/5/2008

I am using the most current, non-Beta version.
By Trent L. Taylor - 11/5/2008

How are you producing this error.  I can see the stack trace, but this is a control that has extensive use and is something that we use ourselves extensively.  We had our QA department turn in an issue a while back where the panel size was becoming 0 in width or height and produced an error.  This has since been fixed.  So you are welcome to post a sample so we can make sure that you are just not using up to date assemblies or that there is not an issue elsewhere.  That would probably be the best avenue to travel.  Just like anything else, if we see it in a reproducable state, you are going to get answers much faster since we will be able to trace and see the point of failure. Thanks.
By Bill Cunnien - 11/5/2008

here's the sample
By Trent L. Taylor - 11/5/2008

How do you reproduce the error with your sample?  It is not failing, so I am guessing that your assemblies are not up to date.  If I need to do something to force the error, then please let me know.  Thanks.
By Bill Cunnien - 11/5/2008

Run the app, minimize the form, then restore the form.  The app fails on two different systems in our office, so I am not suspecting a local environment problem.  I'd rather not update to the beta unless I have to.  Are you unable to reproduce the behavior, still?
By Ivan George Borges - 11/5/2008

Hey Bill.

I tested over here and got the error. It looks like a problem with a the TabControl, when you Dock the SplitContainer to it. Without a TabControl, it works fine docked. With a TabControl, it works fine undocked. So, if it is urgent, you could try one of these scenarios.

By Bill Cunnien - 11/6/2008

Thanks, Ivan.  Not urgent, but the window is already well into the testing phase, so to restructure it would be a big task.  For now, the users have been instructed that the workaround is to simply not minimize that window.  Not the best workaround from a user standpoint, but knowing the Strataframe gurus, it will not be long before they have a fix prepared.
By Trent L. Taylor - 11/6/2008

I'm sorry, but I cannot reproduce this which means that it has already been addressed.  I am not sure if the most recently posted beta has this in it or not at this point, I will have to research when this was fixed, whic to be honest, I think was a while back.  But in any case, it would require an update of your assemblies.  Here would be my suggestion for your immediate resolution, just open the SF source, and in teh OnPaint, place a Try/Catch around the entire OnPaint.  We actually fixed this differently, but this will resolve your problem and get you going down your current path.

The next SF beta will be a bigger update because all of the BO partial classes will have to be rebuilt as the property type descriptors are different (for the better) now.  So in any case, you will probably just wnt to fix what you have since you are in the middle of testing (from what I gather).

By Bill Cunnien - 11/6/2008

What version are you using when you run the project?
By Bill Cunnien - 11/7/2008

I added the Try-Catch block as Trent suggested.  The form is behaving better.  Since the try-catch block basically is doing nothing but bypassing the bad code, may I ask what is the code supposed to be doing?  Just trying to understand why things work the way they do.


Private Sub RenderHorizontalBar(ByVal DrawObj As Graphics)
    '-- Establish Locals
    Try
       
Dim loRect As New Rectangle(0, Me.SplitterDistance, Me.Width, Me.SplitterWidth)  <---this is the line that bombs, Me.Width = 0
       
Dim loBar As New LinearGradientBrush(loRect, _DrawGradientBegin, _DrawGradientEnd, _DrawHorizontalGradientDirection)
    [ CODE SNIPPED ]
    Catch ex As Exception

    End Try
End Sub

Thanks!
Bill

By Trent L. Taylor - 11/7/2008

Just add a test that if the WIdth is <= 0 then bail...there is nothing to render.
By Bill Cunnien - 11/7/2008

Will do.  Thanks.