PictureBox onPaint清除每个控件

时间:2013-02-20 11:51:41

标签: c# .net paint picturebox invalidation

我一直遇到有关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,直到我将窗口移动到某处。它表示menuStrip,toolStrip例如用白色清除。当我添加pictureBox.Invalidate();到Form1_Load它似乎照顾到这个问题(一切都加载和可见),但在toolStrip上有一些按钮和组合框进行交互,改变其可见性,这仍然会导致问题。我想仅在pictureBox上减少Paint的功能。

2)尽管鼠标光标未进入pictureBox,但在加载Form时刻画矩形。此外,当光标离开pictureBox时,最后绘制的矩形停留在那里。我试图删除它,但我无法弄明白。

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

1 个答案:

答案 0 :(得分:0)

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