【发布时间】:2015-06-04 18:54:41
【问题描述】:
我试图在 LMB 向下时设置起点,并在 LMB 向上时从起点到当前鼠标位置画一条线,就像 MSPaint 所做的那样。
我的问题是当 LMB 启动时,我似乎无法让线条出现在图片框上。有人可以请教我吗?
编辑:对不起,伙计们,我意识到问题出在其他地方,但我在此过程中学到了很多东西,感谢所有输入。
public partial class FormPaint : Form
{
Point? startPoint = Point.Empty;
Point? endPoint = Point.Empty;
bool isMouseDown = new Boolean();
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (Control.MouseButtons == MouseButtons.Left)
{
startPoint = e.Location;
isMouseDown = true;
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
brush = new SolidBrush(color);
using (Graphics g = Graphics.FromImage(pictureBox1.Image))
{
g.DrawLine(new Pen(brush), startPoint.Value, endPoint.Value);
pictureBox1.Invalidate();
}
isMouseDown = false;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
endPoint = e.Location;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
using (brush = new SolidBrush(color))
{
e.Graphics.DrawLine(new Pen(brush, 5), startPoint.Value, endPoint.Value);
}
}
}
【问题讨论】:
-
只是好奇......为什么你的
Points 可以为空?另外,bool isMouseDown = false;可能更清楚。 -
在
pictureBox1_MouseMove中你不检查鼠标按钮是否被按下,在任何情况下都给endPoint赋值。 -
MouseMove 期间你也需要失效。
-
@EdS。我正在浏览一些论坛以查找类似的问题并看到使用它的帖子,所以我认为它可能会以某种方式做一些事情
-
了解程序中的每一行代码是个好主意。这是一篇似乎相关的文章:en.wikipedia.org/wiki/Cargo_cult_programming