Сбой при использовании диаграммы Ганта DBI Schedule

У нас случаются случайные сбои при использовании элемента управления DBI Schedule, который представляет собой диаграмму Ганта. Ниже приведена трассировка стека:

************** Exception Text **************
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and     less than the size of the collection.
Parameter name: index
   at System.Collections.CollectionBase.System.Collections.IList.get_Item(Int32 index)
   at Dbi.WinControl.Schedule.ScheduleCollection.get_Item(Int32 nIndex)
   at Dbi.WinControl.Schedule.dbiSchedule.GuideLineBarSnap(Point ptPoint)
   at Dbi.WinControl.Schedule.dbiSchedule.MoveAllTimeBar(Point ptPoint, MouseEventArgs e)
   at Dbi.WinControl.Schedule.dbiSchedule.OnMouseMove(MouseEventArgs e)
   at System.Windows.Forms.Control.WmMouseMove(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

У кого-нибудь еще были такие проблемы?

1 ответ

Моя ошибка обнаружилась, выполнив следующее по расписанию:
1. Создать встречу
2. Дважды нажмите на встречу (это появилось окно, которое позволило вам сделать несколько вещей, одной из которых было удалить встречу)
3. Удалить встречу
4. Сохранить
5. ОШИБКА

Я думаю, что проблема заключалась в том, что при прохождении обратных вызовов элемент управления расписанием отслеживает только то, с какой встречей он работает, по индексу, связанному с ним. После того как встреча была удалена, она переместилась бы вверх по цепочке обратных вызовов к событию OnMouseUp (аналогично вашему событию OnMouseMove). Если в индексе, который он использовал для события двойного щелчка, не было встречено ни одного события, он выдает ту же ошибку, что и вы.

Мое решение, к сожалению, было немного хакерским, но приложение должно было быть выполнено быстро, и оно работало: в событии двойного щелчка, после удаления, я добавил встречу вместо старой, но с дата начала и окончания нашей стандартной даты NULL (как признак того, что это просто фиктивная встреча). Затем я сделал переопределение события OnMouseUp, которое просто вызвало событие OnMouseUp базового класса, затем искал и удалил фиктивную встречу.

Учитывая, что вы опубликовали это почти год назад, это, вероятно, не полезно для вас, но, надеюсь, это поможет кому-то.

Другие вопросы по тегам