直接DataPoint
をクリックするために、あなたはHitTest
を行うことができます。しかし、小さなポイントや範囲の選択のために、これはうまく動作しません。
メソッドは、Axes
メソッドでは隠されています。
このソリューションでは、キャッチポイントを選択するために、定期的なラバーバンド四角形を使用しています。これはLine, FastLine and Point
チャートのために働くことを

Point mdown = Point.Empty;
List<DataPoint> selectedPoints = null;
private void chart1_MouseDown(object sender, MouseEventArgs e)
{
mdown = e.Location;
selectedPoints = new List<DataPoint>();
}
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
chart1.Refresh();
using (Graphics g = chart1.CreateGraphics())
g.DrawRectangle(Pens.Red, GetRectangle(mdown, e.Location));
}
}
private void chart1_MouseUp(object sender, MouseEventArgs e)
{
Axis ax = chart1.ChartAreas[0].AxisX;
Axis ay = chart1.ChartAreas[0].AxisY;
Rectangle rect = GetRectangle(mdown, e.Location);
foreach (DataPoint dp in chart1.Series[0].Points)
{
int x = (int)ax.ValueToPixelPosition(dp.XValue);
int y = (int)ay.ValueToPixelPosition(dp.YValues[0]);
if (rect.Contains(new Point(x,y))) selectedPoints.Add(dp);
}
// optionally color the found datapoints:
foreach (DataPoint dp in chart1.Series[0].Points)
dp.Color = selectedPoints.Contains(dp) ? Color.Red : Color.Black;
}
static public Rectangle GetRectangle(Point p1, Point p2)
{
return new Rectangle(Math.Min(p1.X, p2.X), Math.Min(p1.Y, p2.Y),
Math.Abs(p1.X - p2.X), Math.Abs(p1.Y - p2.Y));
}
注意を。他のタイプの場合は、選択基準を変更する必要があります。
出典
2016-10-15 10:04:51
TaW
テキストブロックC#コードブロックを変更しようとしています。 – mybirthname
あなたがその答えに満足しているなら、[accepting](http://stackoverflow.com/help/accepted-answer)それを考えてみてください.. ..! - あなたはこれをしたことがないことが分かります:答えの投票の下の左上にある(目に見えない)チェックマークをクリックしてクリックしてください!それは緑色に変わり、私たちは少し評判を得る。 – TaW