我一直在使用图片框的 onPaint 事件处理程序时遇到问题。我已经简化了代码,所以现在我正在尝试实现这一点:将位图从路径加载到 pictureBox1 并在鼠标光标移动到 pictureBox1 时在鼠标光标周围绘制一个小矩形。
private int mouseX;
private int mouseY;
private String path;
public Form1()
{
InitializeComponent();
path = "images\\image.jpg";
}
private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Image = new Bitmap(path);
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
mouseX = e.X;
mouseY = e.Y;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(Pens.Black, mouseX - 10, mouseY - 10, 20, 20);
pictureBox1.Invalidate();
}
当我运行该应用程序时,位图已成功加载,并且无论我拖动鼠标,矩形都被很好地绘制。总之有两个问题:
1)当表单被加载时,一切都是白色的,但 pictureBox 直到我将窗口移动到某处。这意味着menuStrip,toolStrip 例如被清除为白色。当我添加 pictureBox.Invalidate(); 进入 Form1_Load 它似乎解决了这个问题(一切都已加载并可见),但在 toolStrip 上有一些按钮和组合框正在交互,改变其可见性,这仍然会导致问题。我想减少仅在图片框上绘制的功能。
2)尽管鼠标光标没有进入pictureBox,但在加载Form时绘制矩形。此外,当光标离开图片框时,最后绘制的矩形会停留在那里。我试图删除它,但我无法弄清楚。
感谢您的任何建议,在我看来,那里缺少一些基本的东西,但不知道是什么。