2021/05/10(Mon) 15:23:05 編集(投稿者)
まず if (result.ChartElementType == ChartElementType.DataPoint)
としているので、Point上以外でのクリック操作が無視されてますね。
あとは、PixelPositionToValueでマウス座標からグラフのXValueが取れるので、
Up, Down時の各XValueを取って判定をするとか?
※dataGridViewEx2やchkHdelは何なのかわからなかったので消してます。
質問時はコピペで実行可能なコードを投稿してもらった方が回答が付きやすいですよ。
private double leftVal;
private double rightVal;
private void chart1_MouseDown(object sender, MouseEventArgs e)
{
chart1.ChartAreas[0].CursorX.Interval = 0.001; //分かりやすさの為小数位置にもカーソルを表示
Point mousePoint = new Point(e.X, e.Y);
chart1.ChartAreas[0].CursorX.SetCursorPixelPosition(mousePoint, true);
var result = this.chart1.HitTest(mousePoint.X, mousePoint.Y);
if (result.ChartElementType == ChartElementType.Nothing) return; //チャート範囲外なら処理しない
//MouseDownした場所のXValue
leftVal = chart1.ChartAreas[0].AxisX.PixelPositionToValue(mousePoint.X);
}
private void chart1_MouseUp(object sender, MouseEventArgs e)
{
Point mousePoint = new Point(e.X, e.Y);
chart1.ChartAreas[0].CursorX.SetCursorPixelPosition(mousePoint, true);
var result = this.chart1.HitTest(mousePoint.X, mousePoint.Y);
if (result.ChartElementType == ChartElementType.Nothing) return; //チャート範囲外なら処理しない
//MouseUpした場所のXValue
rightVal = chart1.ChartAreas[0].AxisX.PixelPositionToValue(mousePoint.X);
foreach (var pt in chart1.Series[0].Points)
{
if (pt.XValue >= leftVal && pt.XValue <= rightVal)
{
//指定範囲に含まれる場合の処理
pt.Color = Color.Red;
}
else
{
//指定範囲に含まれない場合の処理
pt.Color = Color.Blue;
}
}
}