0

ガント チャートである DBI スケジュール コントロールを使用すると、ランダムにクラッシュします。以下はスタック トレースです。

************** 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イベントに類似)に移動します。ダブルクリックイベントに使用したインデックスで予定が見つからないと、発生したのと同じエラーが発生します。

私の解決策は、残念ながら少しハックでしたが、アプリケーションをすばやく実行する必要があり、機能しました。ダブルクリックイベント内で、削除が発生した後、古いものの代わりに予定を追加しましたが、標準のNULL日付の開始日と終了日(これが単なるダミーの予定であることを示すフラグとして)。次に、基本クラスのOnMouseUpイベントを呼び出したばかりのOnMouseUpイベントをオーバーライドし、ダミーの予定を検索して削除しました。

あなたが最初にこれをほぼ1年前に投稿したことを考えると、おそらくあなたには役に立たないでしょうが、うまくいけば誰かを助けるでしょう。

于 2013-01-29T13:26:46.950 に答える