//位置指定はフォームの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(); }