这是我的绘图代码,用于用鼠标在图表上绘制自定义线条。你能帮我以正确的方式做吗?
namespace Grafi
{
public partial class Form1 : Form
{
bool isDrawing = false;
Point prevPoint;
public Form1()
{
InitializeComponent();
}
private void chartTemperature_MouseDown(object sender, MouseEventArgs e)
{
isDrawing = true;
prevPoint = e.Location;
}
private void chartTemperature_MouseMove(object sender, MouseEventArgs e)
{
Pen p = new Pen(Color.Red, 2);
if (isDrawing)
{
Graphics g = chartTemperature.CreateGraphics();
g.DrawLine(p, prevPoint, e.Location);
prevPoint = e.Location;
numOfMouseEvents = 0;
}
p.Dispose();
}
private void chartTemperature_MouseUp(object sender, MouseEventArgs e)
{
isDrawing = false;
}
}
}
问题是,当我调整大小时,我的行消失了。每当引发 onPaint 事件时它就会消失。
试试这个...这是一种笔画绘制方法,实现非常简单并且尽可能接近您自己的代码。斯托克斯是鼠标运动的单独集合。鼠标在向下和向上之间的每次移动都会记录为一次笔划,所有笔划都会被收集,然后在触发绘画事件时重新绘制。这个例子很简单,但可能是一个很好的起点。
请注意,您必须为图表对象添加绘制处理程序。
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace Grafi
{
public partial class Form1 : Form
{
bool isDrawing;
// our collection of strokes for drawing
List<List<Point>> _strokes = new List<List<Point>>();
// the current stroke being drawn
List<Point> _currStroke;
// our pen
Pen _pen = new Pen(Color.Red, 2);
public Form1()
{
InitializeComponent();
}
private void chartTemperature_MouseDown(object sender, MouseEventArgs e)
{
isDrawing = true;
// mouse is down, starting new stroke
_currStroke = new List<Point>();
// add the initial point to the new stroke
_currStroke.Add(e.Location);
// add the new stroke collection to our strokes collection
_strokes.Add(_currStroke);
}
private void chartTemperature_MouseMove(object sender, MouseEventArgs e)
{
if (isDrawing)
{
// record stroke point if we're in drawing mode
_currStroke.Add(e.Location);
Refresh(); // refresh the drawing to see the latest section
}
}
private void chartTemperature_MouseUp(object sender, MouseEventArgs e)
{
isDrawing = false;
}
private void chartTemperature_Paint(object sender, PaintEventArgs e)
{
// now handle and redraw our strokes on the paint event
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
foreach (List<Point> stroke in _strokes.Where(x => x.Count > 1))
e.Graphics.DrawLines(_pen, stroke.ToArray());
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)