private ControlDetalleServicio DuplicarControl(ControlDetalleServicio detalle) { CountDetalles = CountDetalles + 1; var detalleCiclo = DAOFactory.DetalleCicloDAO.FindById(detalle.IdDetalleCiclo); var control = new ControlDetalleServicio { ID = "_" + CountDetalles, ParentControls = ParentControls }; var found = false; var interval = TimeSpan.Zero; ControlDetalleServicio prev = null; for (var i = 0; i < panelEstados.Controls.Count; i++) { var current = panelEstados.Controls[i] as ControlDetalleServicio; if (current == null) { continue; } if (!found && current != detalle) { continue; } var next = (i + 1 < panelEstados.Controls.Count ? panelEstados.Controls[i + 1] : null) as ControlDetalleServicio; var tmp = next != null?next.GetFirstDate().Subtract(current.GetLastDate()) : TimeSpan.Zero; if (panelEstados.Controls[i] == detalle) { panelEstados.Controls.AddAt(i + 1, control); control.CreateFromDetalleCiclo(detalleCiclo); control.PanelAddVisible = detalle.PanelAddVisible; detalle.PanelAddVisible = false; control.SetDate(detalle.GetNextDate()); i++; current = control; found = true; } else { current.SetDate(prev.GetLastDate().Add(interval)); } interval = tmp; prev = current; } UpdateOrders(); // Reseteo los Id de los controles para que mantengan el orden correcto var allControls = GetControls(); for (var i = 0; i < allControls.Count; i++) { allControls[i].ID = "_" + i; } return(control); }