Protra の画面を最大化すると ArgumentOutOfRangeException の例外エラーが発生する場合がある
すると、以下のシステムエラーが表示される
アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。【続行】をクリックすると、アプリケーションはこのエラーを無視し、続行しようとします。【終了】をクリックすると、アプリケーションは直ちに終了します。
'-142' の値は、'Value' に対して有効ではありません。'Value' は 'minimum' と 'maximum' の間でなければなりません。 パラメータ名: Value
詳細ボタンの内容 Just-In-Time (JIT) デバッグを呼び出すための詳細については、 ダイアログ ボックスではなく、このメッセージの最後を参照してください。 ************** 例外テキスト ************** System.ArgumentOutOfRangeException: '-142' の値は 'Value' に対して有効ではありません。'Value' は 'minimum' と 'maximum' の間でなければなりません。 パラメーター名:Value
************** 読み込まれたアセンブリ ************** ~以下省略(GACアセンブリとProtraのパス)~
最大化したタイミングで、OnSizeChanged() → SetScrollBar() が呼ばれ、水平スクロールバーコントロールの現在値が最小値より小さいため、例外発生するみたいです。とりあえず例外エラーが発生しないように最低限の調整を追加したものです。 ※ソース一式をローカル環境にダウンロードして、VS2017Community でソース修正して確認しています。
Protra/Controls/ChartPanel.cs: 337 行目あたり:
private void SetScrollBar() { if (_hScrollBar == null) return; if (Prices == null || Prices.Count <= _chartBoxes[0].Count) _hScrollBar.Enabled = false; else { _hScrollBar.Enabled = true; _hScrollBar.Maximum = Prices.Count - 1; _hScrollBar.LargeChange = _chartBoxes[0].Count; //_hScrollBar.Value = RightIndex - _chartBoxes[0].Count + 1; // ★計算結果がマイナスの場合、水平スクロールバーの現在値は最小値に調整します。 var currentValue = RightIndex - _chartBoxes[0].Count + 1; if (currentValue < _hScrollBar.Minimum) currentValue = _hScrollBar.Minimum; _hScrollBar.Value = currentValue; } }
動作環境:
再現手順:
すると、以下のシステムエラーが表示される
アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。【続行】をクリックすると、アプリケーションはこのエラーを無視し、続行しようとします。【終了】をクリックすると、アプリケーションは直ちに終了します。
'-142' の値は、'Value' に対して有効ではありません。'Value' は 'minimum' と 'maximum' の間でなければなりません。 パラメータ名: Value
詳細ボタンの内容
Just-In-Time (JIT) デバッグを呼び出すための詳細については、
ダイアログ ボックスではなく、このメッセージの最後を参照してください。
************** 例外テキスト **************
System.ArgumentOutOfRangeException: '-142' の値は 'Value' に対して有効ではありません。'Value' は 'minimum' と 'maximum' の間でなければなりません。
パラメーター名: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 行目あたり: