//sizeにはまるようにサイズ調整 public void AdjustSplitPosition(Size size) { if (IsLast) //splitter持たず { if (!IsLeaf) { _childList.AdjustSplitPosition(size); } } else { int splitpos = (int)(_parent.HostingLength * SumRatio(_next)) - PaneSplitter.SPLITTER_WIDTH / 2; //上限・下限 int minimum_splitpos = _next.RequiredMinimumLength; int maximum_splitpos = SizeToLength(size) - this.RequiredMinimumHostingLength - PaneSplitter.SPLITTER_WIDTH; splitpos = UIUtil.AdjustRange(splitpos, minimum_splitpos, maximum_splitpos); SetSplitterPosition(splitpos); Size splitsize = _parent.Direction == Direction.TB ? new Size(size.Width, splitpos) : new Size(splitpos, size.Height); _splitter.TargetControl.Size = splitsize; //next.HostingControl or _container //末尾、次いで枝へと再帰 _next.AdjustSplitPosition(splitsize); if (!IsLeaf) { Size hostingsize = _parent.Direction == Direction.TB ? new Size(size.Width, size.Height - PaneSplitter.SPLITTER_WIDTH - splitpos) : new Size(size.Width - PaneSplitter.SPLITTER_WIDTH - splitpos, size.Height); _childList.AdjustSplitPosition(hostingsize); } } }
//サイズの調整 public void AdjustSplitPosition(Size size) { _hostingControl.Size = size; _first.AdjustSplitPosition(size); }