初学者编码器进入C#..我正在制作一个涉及绘画的程序。基本上每当我移动我的鼠标进行绘制时,图像上的实际线条显示为延迟 - 并且它比实际应用的更直接。它过去工作正常,但在某些时候我猜错了 - 不记得我当时做了什么所以很难回溯..我试图在一个新的解决方案中复制程序的绘图部分,并且它似乎工作正常..
我发布了.exe文件,你可以看到我的意思,但我不确定是否允许我们在这里发布可执行文件。
编辑:我已经确认代码工作正常,请查看sa_ddam213的答案以获取代码示例。好像它在其他人的计算机上工作正常,所以我完全糊涂了。
答案 0 :(得分:1)
Yo正在为每个鼠标移动事件创建一个新的Graphic和Pen对象,这比在Mouse_Down
事件中创建这些变量要慢很多。
这样的事情可能会快一点。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
b = new Bitmap(this.Width, this.Height);
}
private Graphics _graphics;
private Pen _pen;
private int pX = 0;
private int pY = 0;
private bool paint = false;
private Bitmap b;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
pX = e.X;
pY = e.Y;
_graphics = Graphics.FromImage(b);
_pen= new Pen(Color.Black, 3);
paint = true;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (paint)
{
_graphics.DrawLine(_pen, pX, pY, e.X, e.Y);
pictureBox1.BackgroundImage = b;
pictureBox1.Refresh();
pX = e.X;
pY = e.Y;
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
paint = false;
_graphics.Dispose();
_pen.Dispose();
}
}
答案 1 :(得分:0)
尝试使用pictureBox1.Refresh()
而不是pictureBox1.Invalidate()您可能还需要在pictureBox1.BackgroundImage = b
之后移动它此外,在MouseDown中,您需要设置 this.Capture = true,并且在MouseUp中您应该设置 this.Capture = false 。如果你不这样做,当你的鼠标光标在不同的应用程序上时释放鼠标按钮,你的永远不会收到MouseUp消息。
答案 2 :(得分:0)
可能是你的VGA出了问题。请与另一台PC联系并告知我们