gpt4 book ai didi

C# 图形无效

转载 作者:太空宇宙 更新时间:2023-11-03 14:02:34 25 4
gpt4 key购买 nike

我想我没有理解 Invalidate 方法...我正在尝试绘制一个正方形,该正方形的左上角位于 mousedown 鼠标所在的位置,然后右下角是当前位置鼠标。下面是在 MouseMove 事件上触发的方法。父级是一个带有 pictureBox 子级的面板。 (我正在尝试在这些之上进行绘制。)

问题似乎出在 pictureBoxMain.Invalidate() 上。当注释掉代码时,它的行为符合预期并绘制了无数个正方形。

[Graphics g 是由 pictureBox 创建的,因此我在 pictureBox 上调用 Invalidate 方法。]

当我取消注释掉无效行时,鼠标移动时会绘制一个框,但一旦鼠标停止移动,框就会消失。我一辈子都想不通为什么。当我尝试调试代码时,似乎在鼠标不移动时调用了 MouseMove 方法,这没有任何意义。

非常感谢任何帮助!

private void pictureBoxMain_MouseMove(object sender, MouseEventArgs e)
{
if (MouseDrawLeft)
{
//Move
}
else if (MouseDrawRight)
{
MouseLast = e.Location;
if (MouseFirst != MouseLast)
{
pictureBoxMain.Invalidate();

Point bl = new Point(MouseFirst.X, MouseLast.Y);
Point tr = new Point(MouseLast.X, MouseFirst.Y);

g.DrawLine(pen, MouseFirst, tr);
g.DrawLine(pen, MouseFirst, bl);
g.DrawLine(pen, bl, MouseLast);
g.DrawLine(pen, tr, MouseLast);
}
}
}

最佳答案

每个组件(按钮、文本框、窗口...)都有其 Paint 方法。 Windows 会定期调用它(例如每秒 50 次)来绘制对象。

您所做的是在对象上绘制一些东西 - 但在一毫秒内,它就消失了,因为 Paint 方法覆盖了它。您需要重写框架的 Paint 方法并在那里绘画 - 这样,每次 Windows 询问时都会绘制您的绘画。

关于C# 图形无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10335607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com