示例#1
0
 public static void ApplyPreferredSize(Control control)
 {
     if (AutoSizePanel.CanAutoSizeWidth(control) || AutoSizePanel.CanAutoSizeHeight(control))
     {
         Size fitToContentsSize = AutoSizePanel.GetFitToContentsSize(control);
         if (control.Size != fitToContentsSize)
         {
             control.Size = AutoSizePanel.GetAutoSizeModeSize(control, fitToContentsSize);
         }
     }
 }
示例#2
0
        public static Size GetFitToContentsSize(Control control)
        {
            if (control.HasChildren)
            {
                int  num   = int.MinValue;
                int  num2  = int.MinValue;
                int  num3  = 0;
                int  num4  = 0;
                bool flag  = false;
                bool flag2 = true;
                bool flag3 = true;
                for (int i = 0; i < control.Controls.Count; i++)
                {
                    Control control2 = control.Controls[i];
                    if (control2.Visible)
                    {
                        flag = true;
                        switch (control2.Dock)
                        {
                        case DockStyle.None:
                        {
                            flag2 = false;
                            flag3 = false;
                            Size size = control2.Size;
                            num  = Math.Max(num, control2.Left + size.Width);
                            num2 = Math.Max(num2, control2.Top + size.Height);
                            break;
                        }

                        case DockStyle.Top:
                        case DockStyle.Bottom:
                            flag3 = false;
                            num4 += control2.Height;
                            break;

                        case DockStyle.Left:
                        case DockStyle.Right:
                            flag2 = false;
                            num3 += control2.Width;
                            break;

                        case DockStyle.Fill:
                            num3 += control2.Width;
                            num4 += control2.Height;
                            break;
                        }
                    }
                }
                ScrollableControl scrollableControl = control as ScrollableControl;
                if (scrollableControl != null)
                {
                    ScrollableControl.DockPaddingEdges dockPadding = scrollableControl.DockPadding;
                    num  += dockPadding.Right;
                    num2 += dockPadding.Bottom;
                    num3 += dockPadding.Left + dockPadding.Right;
                    num4 += dockPadding.Top + dockPadding.Bottom;
                }
                num  = Math.Max(num, num3);
                num2 = Math.Max(num2, num4);
                if (!flag || !AutoSizePanel.CanAutoSizeWidth(control) || flag2)
                {
                    num = control.Size.Width;
                }
                if (!flag || !AutoSizePanel.CanAutoSizeHeight(control) || flag3)
                {
                    num2 = control.Size.Height;
                }
                return(AutoSizePanel.GetAutoSizeModeSize(control, new Size(num, num2)));
            }
            return(control.Size);
        }