6

ユーザーが範囲を選択できる組み込み機能を備えた C# 組み込みの Winforms Chart コントロール ( System.Windows.Forms.DataVisualization.Charting.Chart ) を使用しています。私がやりたいことは、ユーザーが選択した範囲を読み返すことです。確かにこれを行う簡単な方法があるはずですが、私はそれを見つけることができませんでした.

カーソルは次のように有効になります。

var ca = chart1.ChartAreas["ChartArea1"].CursorX;
ca.CursorX.IsUserEnabled = true;
ca.CursorX.IsUserSelectionEnabled = true;

ユーザーが有効にして範囲を選択したときにチャートをズームできることは承知していますがca.AxisX.ScaleView.Zoomable、画像を変更したくありません。代わりに、情報を表示する方法としてチャートを使用し、ユーザーに範囲を選択させています次に、追加の処理を行う X 値。

chart1.SelectionRangeChanged にフックしようとしましたが、範囲が変更されるたびに実際に起動します - 私が戻ってきた CursorEventArg から選択範囲を取得できないようです。「NewSelectionStart」と「NewSelectionEnd」のフィールドがありますがNaN、残念ながらそれらは です。チャートと軸のさまざまなプロパティを調べてみましたが、有望と思われるものは見つかりませんでした。

さらに調査すると、ChartArea.CursorX.SelectionStartプロパティが明らかになりました。これはまさに私が必要としているもののように聞こえます...それも NaN であることを除いて。これが正常なのか、何らかのバグに遭遇したのかわかりませんか?

では、ユーザーが選択した範囲を特定するにはどうすればよいでしょうか。

4

2 に答える 2

7

わかりました。ここにスクープがあります:

SelectionRangeChang* ing * イベントがあり、そのイベントが実行されると、フィールドChartArea.CursorX.SelectionStartChartArea.CursorX.SelectionEndフィールドに正しい値が含まれます。ただし、ユーザーはまだマウス ボタンを離していないので、そのまま保存する必要があります。

ユーザーがマウス ボタンを放すと、SelectionRangeChang* ed * イベントが発生します。どういうわけか、SelectionStart と SelectionEnd が NaN にリセットされるように設計されています (イベント パラメータの フィールドNewSelectionStartとフィールドのように)。NewSelectionEndあなたがしなければならないことは、他のイベント ハンドラーから離れた値を使用することです。これを使用するのが適切な時期であることがわかっているからです。

それで、あなたはそれを持っています!うまくいけば、この答えが他の誰かを時間の無駄から救うでしょう。

于 2013-04-03T01:35:29.293 に答える