- 題名: Chartコントロールでマウス位置から複数のSeriesの値を取得したい
- 日時: 2013/12/16 23:58:55
- ID: 32006
- この記事の返信元:
- (なし)
- この記事への返信:
- [32007] Re[1]: Chartコントロールでマウス位置から複数のSeriesの値を取得したい2013/12/17 9:36:53
- ツリーを表示
Hongliangさん、ありがとうございます。 頂いたヒントを元に解決することが出来ました!。 「Series.DataPointsから検索する」方法と 「日付に直して元データを検索する」方法の 両方を試してみました。 CPU負荷はどちらの方法でも HitTest使用時の半分くらいになりました。 今回は、コードがよりシンプルな 「Series.DataPointsから検索する」方法を 採用させて頂きました。 また、以下の課題も同時に解決しました。 >マウスが日付と日付の間に位置しているときにどうするかという問題はありますが…。 以下に解決コードを記載します。 Private Sub Chart1_MouseMove(sender As Object, e As MouseEventArgs) Handles Chart1.MouseMove Try 'マウスに合わせて、X軸に垂直な縦線を表示 Dim mousePoint As Point = New Point(e.X, e.Y) Chart1.ChartAreas(0).CursorX.SetCursorPixelPosition(mousePoint, True) '垂直線のX座標(日付)をDouble型で取得 '垂直線は日付と日付の間には描画されない 'この値を取得することで、日付と日付の間にマウスがある場合の問題を解決 Dim xDateDouble As Double xDateDouble = Chart1.ChartAreas(0).CursorX.Position '値を表示 '日付 lblDate.Text = Date.FromOADate(Chart1.Series("seriesReward").Points.FindByValue(xDateDouble, "X").XValue) '各シリーズの値 lblReward.Text = Chart1.Series("seriesReward").Points.FindByValue(xDateDouble, "X").YValues(0).ToString("#,##0") lblCost.Text = Chart1.Series("seriesCost").Points.FindByValue(xDateDouble, "X").YValues(0).ToString("#,##0") lblBenefit.Text = Chart1.Series("seriesBenefit").Points.FindByValue(xDateDouble, "X").YValues(0).ToString("#,##0") lblRanking.Text = Chart1.Series("seriesRanking").Points.FindByValue(xDateDouble, "X").YValues(0).ToString("#,##0") Catch ex As Exception MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub
分類:[.NET]