PictureBox on Paint清除所有控件

本文关键字:控件 清除 on Paint PictureBox | 更新日期: 2023-09-27 18:00:19

我一直在使用pictureBox的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除外,直到我将窗口移到某个位置。这意味着菜单条,工具条例如用白色清除。当我添加pictureBox时。Invalidate();在Form1_Load中,它似乎解决了这个问题(所有内容都已加载并可见),但在工具栏上有一些按钮和组合框正在交互,改变了它的可见性,这仍然会导致问题。我想减少"仅在pictureBox上绘制"的功能性。

2) 矩形是在加载窗体时绘制的,尽管鼠标光标没有进入pictureBox。此外,当光标离开pictureBox时,最后绘制的矩形也会停留在那里。我试着把它取下来,但我想不通。

谢谢你的任何建议,在我看来,那里似乎缺少了一些基本的东西,但不知道是什么。

PictureBox on Paint清除所有控件

2)MouseMove仅在光标位于图片框上时工作。尝试使用MouseEnterMouseLeave来处理何时开始绘制矩形以及何时停止绘制矩形。