【发布时间】:2015-07-06 07:01:17
【问题描述】:
我的任务是使用鼠标在图表控件中绘制图形并从图形中检索 (X,Y) 点。
我尝试用鼠标绘制图表。 这是正常图表的样子。 用鼠标绘制后,它看起来像: 我用来绘制图形的代码是:
private void Form1_Load(object sender, EventArgs e)
{
chart1.ChartAreas[0].AxisX.Minimum =0170101;
chart1.ChartAreas[0].AxisX.Maximum =0175951;
chart1.ChartAreas[0].AxisY.Minimum=0780101;
chart1.ChartAreas[0].AxisY.Maximum=0785951;
double range = chart1.ChartAreas[0].AxisX.Maximum - chart1.ChartAreas[0].AxisX.Minimum;
chart1.ChartAreas[0].AxisX.Interval = range / 5;
range = chart1.ChartAreas[0].AxisY.Maximum - chart1.ChartAreas[0].AxisY.Minimum;
chart1.ChartAreas[0].AxisY.Interval = range / 5;
}
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
if (!(FirstPoint == null))
{
Graphics g = chart1.CreateGraphics();
Pen ErasePen = new Pen(Color.Transparent);
g.DrawLine(ErasePen, FirstPoint, TempPoint);
TempPoint = new Point(e.X, e.Y);
this.Refresh();
}
}
private void chart1_MouseDown_1(object sender, MouseEventArgs e)
{
FirstPoint = new Point(e.X, e.Y);
TempPoint = new Point(e.X, e.Y);
}
private void chart1_MouseUp_1(object sender, MouseEventArgs e)
{
LineEndPoints Line = new LineEndPoints
{
StartPoint = FirstPoint,
endPont = new Point(e.X, e.Y)
};
LinesList.Add(Line);
// FirstPoint = null;
this.Refresh();
}
private void chart1_Paint_1(object sender, PaintEventArgs e)
{
foreach (LineEndPoints line in LinesList)
{
e.Graphics.DrawLine(Pens.Green, line.StartPoint, line.endPont);
}
if (!(FirstPoint == null))
{
e.Graphics.DrawLine(Pens.Red, FirstPoint, TempPoint);
}
}
当我用来绘制图表时,它正在远离图表控件的最大值和最小值。 现在我需要知道的是: 1) 我的图表不应远离图表控件的 X 和 Y 轴点。 2) 我需要知道图表的 X,Y 点是相对于图表轴而不是表格轴绘制的。
我使用 C# VS 2010 Win-forms。
【问题讨论】:
-
如果您应该 a) 使用图表控件并 b) 稍后检索点,您确定您确实应该在图表的表面上绘制吗?我猜您应该在图表中的系列中添加点。您还需要清楚鼠标的使用方式:在图表上单击还是拖动?
-
@TaW Ya 我知道如何通过使用一系列点成系列然后将该系列添加到图中来绘制图形。但我的任务是用鼠标移动绘制图形。我无法将这些点放入图表上绘制的系列中。这是我检索关于图表的点 X、Y 的问题。
-
这很棘手。由于您正在绘制图表的 Paint 事件,因此转换方法将起作用,根据MSDN
-
@TaW 雅谢谢。我正在做。同时,如果可能的话,请给我一些这种类型转换的例子。
-
在我的回答中查看更新的示例!
标签: c# winforms visual-studio-2010 charts linechart