C# 如何使用windows窗体图表控件的鼠标单击事件和绘制事件在图表上绘制点?
我现在添加了起点终点和鼠标x和鼠标y变量,我想在鼠标左键单击时使用它们在图表控件上绘制点 但我希望只在图表区域上绘制点,并且仅当鼠标位于图表中的正方形区域内时才绘制点,这样它就不会在正方形边界线上或图表控制区域之外绘制点 以及在图表中的方框中移动鼠标时显示,以显示标签上的X轴和Y轴值 左轴1至120当前时间和下轴1至30当前天。 因此,如果我在第一个正方形区域移动鼠标,它将显示第1天时间112或第2天时间33 这就是为什么我也不确定X轴和Y轴上的空间是否正确。 它应该是1到120和1到30,但我认为每个方块应该在3天和120次内呈现,但以1步1跳的方式呈现,所以当我用鼠标移动时,我可以看到第一个方块第1天第3次或第3天第66次 下一排方块将显示第4到第6天C# 如何使用windows窗体图表控件的鼠标单击事件和绘制事件在图表上绘制点?,c#,.net,winforms,C#,.net,Winforms,我现在添加了起点终点和鼠标x和鼠标y变量,我想在鼠标左键单击时使用它们在图表控件上绘制点 但我希望只在图表区域上绘制点,并且仅当鼠标位于图表中的正方形区域内时才绘制点,这样它就不会在正方形边界线上或图表控制区域之外绘制点 以及在图表中的方框中移动鼠标时显示,以显示标签上的X轴和Y轴值 左轴1至120当前时间和下轴1至30当前天。 因此,如果我在第一个正方形区域移动鼠标,它将显示第1天时间112或第2天时间33 这就是为什么我也不确定X轴和Y轴上的空间是否正确。 它应该是1到120和1到30,但我
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
namespace Test
{
public partial class Form1 : Form
{
private Point startPoint = new Point();
private Point endPoint = new Point();
private int mouseX = 0;
private int mouseY = 0;
public Form1()
{
InitializeComponent();
}
private void chart1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseX = System.Windows.Forms.Cursor.Position.X;
mouseY = System.Windows.Forms.Cursor.Position.Y;
chart1.Invalidate();
}
}
private void chart1_Paint(object sender, PaintEventArgs e)
{
Graphics g1 = this.CreateGraphics();
Pen linePen = new Pen(Color.Green, 1);
Pen ellipsePen = new Pen(Color.Red, 1);
startPoint = new Point(mouseX, mouseY);
endPoint = new Point(mouseX, mouseY);
g1.DrawLine(linePen, startPoint, endPoint);
g1.DrawEllipse(ellipsePen, mouseX - 2, mouseY - 2, 4, 4);
linePen.Dispose();
ellipsePen.Dispose();
g1.Dispose();
}
}
}
现在代码的方式是,它绘制的点远离图表控制区域 这是因为您使用了错误的鼠标坐标。 更换这些线路
mouseX = System.Windows.Forms.Cursor.Position.X;
mouseY = System.Windows.Forms.Cursor.Position.Y;
为此:
mouseX = e.X;
mouseY = e.Y;
使用窗体作为基准返回鼠标的坐标,而使用引发事件的控件作为基准返回鼠标的坐标。可能重复TaW我在那里尝试了您的解决方案,它确实有效。我接受了你的第二个解决方案代码,并做了一些更改。而不是使用点列表,我在paint事件中只使用了lastPoint变量,我这样做了:e.Graphics.drawerlipse(pen,lastPoint.X,lastPoint.Y,4,4);我这样做是因为我每次只想画一个点。现在的问题是,每次单击鼠标时,它都会删除最后绘制的点。我怎样才能保证它不会删除最后一个点呢?帖子一直在向datapoints集合添加绘制的点。如果你不想这样,只画一个点,你仍然会将它添加到系列点,或者可能是一个额外的系列;然后,您可以计算其正确位置,并使用这些坐标设置新点。最后,您将删除数据点。。我理解得对吗?你说得对。谢谢。一定要看看我的表。它包含将值点转换为图形点的通用代码。。