0

使用甘特图的 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)

其他人有这样的问题吗?

4

1 回答 1

0

我的错误出现在按计划执行以下操作:
1. 创建约会
2. 双击约会(这个弹出窗口允许您做几件事,其中之一是删除约会)
3. 删除约会
4. 保存
5. 错误

我认为问题在于,虽然它正在通过回调,但日程控制仅通过与其关联的索引跟踪它正在处理的约会。约会被删除后,它会将回调链向上移动到 OnMouseUp 事件(类似于您的 OnMouseMove 事件)。在用于双击事件的索引中找不到约会时,它会吐出与您遇到的相同的错误。

不幸的是,我的解决方案有点 hack,但是该应用程序需要快速完成并且它工作:在双击事件中,发生删除后,我添加了一个约会来代替旧约会,但是有一个我们标准 NULL 日期的开始和结束日期(作为这只是一个虚拟约会的标志)。然后我覆盖了刚刚调用基类的 OnMouseUp 事件的 OnMouseUp 事件,然后搜索并删除了虚拟约会。

鉴于您最初是在大约一年前发布的,它可能对您没有用,但希望它会对某人有所帮助。

于 2013-01-29T13:26:46.950 回答