待辦事項 #39791

Protra の画面を最大化すると ArgumentOutOfRangeException の例外エラーが発生する場合がある

啟用日期: 2019-11-27 11:20 最後更新: 2019-11-27 11:20

回報者:
(匿名)
負責人:
(無)
類型:
狀態:
開啟
元件:
(無)
里程碑:
(無)
優先權:
5 - 中
嚴重程度:
5 - 中
處理結果:
檔案:

細節

動作環境:

  • Windows10(x64, Pro, 1903)
  • Protra_2.3

再現手順:

  1. Protra.exe を起動(通常サイズ)。いづれかの銘柄が選択された状態、かつチャートが表示されている状態
  2. 水平スクロールバーを一番左端に移動させる(一番古い日)(最初から見たくなったので)
  3. 最大化する(詳細に見たいため)

すると、以下のシステムエラーが表示される


アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。【続行】をクリックすると、アプリケーションはこのエラーを無視し、続行しようとします。【終了】をクリックすると、アプリケーションは直ちに終了します。

'-142' の値は、'Value' に対して有効ではありません。'Value' は 'minimum' と 'maximum' の間でなければなりません。 パラメータ名: Value


詳細ボタンの内容

Just-In-Time (JIT) デバッグを呼び出すための詳細については、
ダイアログ ボックスではなく、このメッセージの最後を参照してください。

************** 例外テキスト **************
System.ArgumentOutOfRangeException: '-142' の値は 'Value' に対して有効ではありません。'Value' は 'minimum' と 'maximum' の間でなければなりません。
パラメーター名:Value

場所 System.Windows.Forms.ScrollBar.set_Value(Int32 value)
場所 Protra.Controls.ChartPanel.OnSizeChanged(EventArgs e)
場所 System.Windows.Forms.Control.UpdateBounds(Int32 x, Int32 y, Int32 width, Int32 height, Int32 clientWidth, Int32 clientHeight)
場所 System.Windows.Forms.Control.UpdateBounds()
場所 System.Windows.Forms.Control.WmWindowPosChanged(Message& m)
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.UserControl.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)



************** 読み込まれたアセンブリ **************
~以下省略(GACアセンブリとProtraのパス)~


解決方法:

最大化したタイミングで、OnSizeChanged() → SetScrollBar() が呼ばれ、水平スクロールバーコントロールの現在値が最小値より小さいため、例外発生するみたいです。とりあえず例外エラーが発生しないように最低限の調整を追加したものです。
※ソース一式をローカル環境にダウンロードして、VS2017Community でソース修正して確認しています。

Protra/Controls/ChartPanel.cs: 337 行目あたり:

  1. private void SetScrollBar()
  2. {
  3. if (_hScrollBar == null)
  4. return;
  5. if (Prices == null || Prices.Count <= _chartBoxes[0].Count)
  6. _hScrollBar.Enabled = false;
  7. else
  8. {
  9. _hScrollBar.Enabled = true;
  10. _hScrollBar.Maximum = Prices.Count - 1;
  11. _hScrollBar.LargeChange = _chartBoxes[0].Count;
  12. //_hScrollBar.Value = RightIndex - _chartBoxes[0].Count + 1;
  13. // ★計算結果がマイナスの場合、水平スクロールバーの現在値は最小値に調整します。
  14. var currentValue = RightIndex - _chartBoxes[0].Count + 1;
  15. if (currentValue < _hScrollBar.Minimum)
  16. currentValue = _hScrollBar.Minimum;
  17. _hScrollBar.Value = currentValue;
  18. }
  19. }

Ticket History (1/1 Histories)

2019-11-27 11:20 Updated by: None
  • New Ticket "Protra の画面を最大化すると ArgumentOutOfRangeException の例外エラーが発生する場合がある" created

Attachment File List

No attachments

編輯

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » 登入