如何使用鼠标向下单击窗体的事件和绘制事件图表控件在图表上绘制点

本文关键字:绘制 事件 控件 何使用 鼠标 窗体 单击 | 更新日期: 2023-09-27 17:49:01

我现在添加了起点终点和鼠标x和鼠标y变量,我想用它们来在图表控件上绘制点,当用鼠标单击左键时。

但是我希望这些点只在图表区域上绘制,而且只有当鼠标在图表的正方形区域内时,它才会在正方形边界线或图表控制区域外绘制点。

并且当在图表中的方格中移动鼠标时,还可以显示标签上的X轴和Y轴值。

左轴1为现在120天,下轴1为现在30天。因此,如果我在第一个正方形区域移动鼠标,它应该显示第一天时间112或第二日时间33。

这就是为什么我也不确定X轴和Y轴上的空间是正确的。它应该是1到120和1到30,但我认为每个方块应该在3天和120时间内呈现,但以1步为跳跃,所以当我用鼠标移动时,我可以在第一个方块中看到第1天时间3或第3天时间66下一排方块表示第4天到第6天。

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;

System.Windows.Forms.Cursor.Position使用表单作为基础返回鼠标坐标,而MouseEventArgs使用引发事件的控件作为基础返回鼠标坐标。