/// <summary> create controllers. </summary>
 /// <param name="bg"> for sequential background execution. </param>
 /// <param name="nameModel"> one or more name/db model pairs. </param> 
 public Switcher(WorkQueue bg, params object[] nameModel)
 {
     controller = new Controller[nameModel.Length/2];
       name = new string[controller.Length];
       for (int n = 0; n < controller.Length; ++n) {
     name[n] = (string)nameModel[2 * n];
     controller[n] = new Controller((IModel<string>)nameModel[2 * n + 1], bg);
       }
 }
 /// <summary> connect to database, start background thread. </summary>
 /// <param name="db"> database. </param>
 /// <param name="bg"> for sequential background execution. </param>
 public Controller(IModel<string> db, WorkQueue bg)
 {
     this.db = db; this.bg = bg;
 }
 /// <summary> create and connect controllers. </summary>
 /// <param name="enable"> controls user interaction in view. </param>
 /// <param name="io"> current/size/search/enter/remove fields. </param>
 /// <param name="click"> add to eventhandlers, null to skip. </param>
 /// <param name="bg"> for sequential background execution. </param>
 /// <param name="nameModel"> one or more name/db model pairs. </param>
 public Switcher(Enable enable, IAccess[] io, SetClick[] click, WorkQueue bg, params object[] nameModel)
     : this(bg, nameModel)
 {
     Connect(enable, io, click);
 }
 /// <summary> connect to database and view, post current count. </summary>
 /// <param name="db"> database. </param>
 /// <param name="bg"> for sequential background execution. </param>
 /// <param name="enable"> controls user interaction in view. </param>
 /// <param name="io"> access to current/size/search/enter/remove fields (can be null). </param>
 public Controller(IModel<string> db, WorkQueue bg, Enable enable, params IAccess[] io)
     : this(db, bg)
 {
     Connect(enable, io);
 }