HeaderPanel.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / MIT / System / Web / UI / MobileControls / Design / Util / HeaderPanel.cs / 1305376 / HeaderPanel.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Web.UI.Design.MobileControls.Util 
{ 
    using System;
    using System.Diagnostics; 
    using System.Drawing;
    using System.Windows.Forms;

    [ 
        System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand,
        Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode) 
    ] 
    [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")]
    internal class HeaderPanel : Panel 
    {
        private int _recursionCount = 0;

        internal void RequestNewHeight(HeaderLabel header, int height) 
        {
            int offset = height - header.Height; 
 
            try
            { 
                // This is a workaround for a RTB issue that causes their
                // algorithm to ---- up if OnContentsResize recurses.  (Now
                // that HeaderLabel does not resize the text untill after
                // autoscaling, we do not seem to hit this, but just in case). 
                //
                // On the first call the RTB guesses its best dimensions 
                // for the given text.  We correct the Width which may cause 
                // a second recursive call to adjust the height.
 
                if(_recursionCount < 2)
                {
                    _recursionCount++;
                    header.Height = height; 

                    // 
                    foreach(Control child in Controls) 
                    {
                        if(child.Top > header.Top) 
                        {
                            child.Top += offset;
                        }
                    } 

                    for( 
                        Control controlIterator = this; 
                        controlIterator != null;
                        controlIterator = controlIterator.Parent 
                    ) {
                        controlIterator.Height += offset;
                    }
                } 
                else
                { 
                    Debug.Assert(offset == 0, 
                        "On 3rd recursive call offset is not yet stabalized."
                    ); 
                }
            }
            finally
            { 
                _recursionCount = 0;
            } 
        } 

        protected override void OnSizeChanged(EventArgs e) 
        {
            foreach(Control child in Controls)
            {
                if(child is HeaderLabel) 
                {
                    child.Width = Width; 
                } 
            }
            base.OnSizeChanged(e); 
        }
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK