// Make a tree of splitters, controlled by the string in sp static public SplitContainer SplitterTreeMakeFromCtrlString(BaseUtils.StringParser sp, Func <Orientation, int, SplitContainer> MakeSC, Func <string, Control> MakeNode, int lvl) { char tomake; if (sp.SkipUntil(new char[] { 'H', 'V', 'U' }) && (tomake = sp.GetChar()) != 'U') { sp.IsCharMoveOn('('); // ignore ( SplitContainer sc = MakeSC(tomake == 'H' ? Orientation.Horizontal : Orientation.Vertical, lvl); double percent = sp.NextDouble(",") ?? 0.5; sc.SplitterDistance(percent); SplitContainer one = SplitterTreeMakeFromCtrlString(sp, MakeSC, MakeNode, lvl + 1); if (one == null) { string para = sp.PeekChar() == '\'' ? sp.NextQuotedWord() : ""; sc.Panel1.Controls.Add(MakeNode(para)); } else { sc.Panel1.Controls.Add(one); } SplitContainer two = SplitterTreeMakeFromCtrlString(sp, MakeSC, MakeNode, lvl + 1); if (two == null) { string para = sp.PeekChar() == '\'' ? sp.NextQuotedWord() : ""; sc.Panel2.Controls.Add(MakeNode(para)); } else { sc.Panel2.Controls.Add(two); } return(sc); } else { return(null); } }