예제 #1
0
        //位置指定はフォームのOnLoad後にやらなくちゃいかんのか。めんどうだな
        public void RestoreLayout()
        {
            ICommandTarget target = (ICommandTarget)_parent.GetAdapter(typeof(ICommandTarget));

            ToolStripPanel panel = this.TopToolStripPanel;

            panel.BeginInit();
            panel.SuspendLayout();
            bool location_available = _initialLocationInfo.Length > 0;

            //ToolStripPanelへの追加はかなり不可思議。
            //BeginInitやSuspendLayoutを呼ぶかどうかでも相当様子が違う。
            //なのでややいい加減だが、初回起動時など位置情報がないときはControls.AddRangeで一括登録で.NETに任せ、それ以降は位置指定という方針でいく

            if (!location_available)
            {
                panel.Controls.AddRange(_toolStrips.ToArray());
            }

            foreach (ToolStrip t in _toolStrips)
            {
                if (location_available)
                {
                    panel.Join(t, t.Location);
                }
                foreach (ToolStripItem c in t.Items)
                {
                    ControlTagBase tag = c.Tag as ControlTagBase;
                    if (tag != null)
                    {
                        RefreshElement(c, tag, target);
                    }
                }
            }

            panel.ResumeLayout();
            panel.EndInit();
        }