private int BegX = 0;
private int BegY = 0;private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    this.BegX = e.X;
    this.BegY = e.Y;
}
private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
 //this.Invalidate(new Rectangle(this.BegX,this.BegY,e.X-this.BegX,e.Y-this.BegY));
 DrawRect(e);
}private void DrawRect(System.Windows.Forms.MouseEventArgs e)
{
   using(Graphics g = this.CreateGraphics())
   {
       g.DrawRectangle(Pens.Red,this.BegX,this.BegY,e.X-this.BegX,e.Y-this.BegY);
      g.Dispose();
  }
}
如果 //this.Invalidate(new Rectangle(this.BegX,this.BegY,e.X-this.BegX,e.Y-this.BegY)); 开起来的话 !矩形的左边和上面都看不到 只有矩形的右边和下发被画出来如果 //this.Invalidate(new Rectangle(this.BegX,this.BegY,e.X-this.BegX,e.Y-this.BegY)); 关闭  就会画出 非常多的 矩形
有解决方法吗 

解决方案 »

  1.   

    这是因为画的动作会触发很多mousemove事件。每一个都画一个,当然多了。
    要有变量储存上一个mousemove事件的坐标。在mousemove事件方法时先用背景色来重绘上一个mousemove事件处理时绘制的矩形,即把上一个矩形给erase掉,然后再根据本次mousemove事件中的坐标来绘制最新的矩形
      

  2.   

    To:  njufrog(失足青年) 变量储存上一个mousemove事件的坐标? 这个要则么来存储啊!我试了存储不下来啊
    看看你的存储方式吧??
      

  3.   

    最好用文档+视图的模型。内部存储框数据,在OnPaint时间中将这些数据画出来。不过你这里因为要随鼠标移动预览,所以屏幕可能会闪烁! 不知道Double buffering能不能解决闪烁问题。你自己搜搜看。
      

  4.   

    To: zhy0101(香蕉) 
    如果画图区本来就有若干矩形,并且和原来的矩形有交合,那么不是把那些矩形的交合部分也擦掉了吗?是不是也要重画那些被连累的矩形?
      

  5.   

    To: 回复人: xrye_ryan(叶祥润) 
    是的!
    我 Email: [email protected]  谢谢了!
      

  6.   

    private int BegX = 0;
    private int BegY = 0;
    private int lastX = 0;
    private int lastY = 0;
    private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        DrawRect(e);
    }
    private void DrawRect(System.Windows.Forms.MouseEventArgs e)
    {
       using(Graphics g = this.CreateGraphics())
       { 
         g.DrawRectangle(new Pen(this.BackColor),this.BegX,this.BegY,this.lastX - this.BegX, this.lastY - this.BegY);
         g.DrawRectangle(Pens.Red,this.BegX,this.BegY,e.X-this.BegX,e.Y-this.BegY);
         this.lastX = e.X;
         this.lastY = e.Y;
         g.Dispose();
       }
    }
      

  7.   

    To :xrye_ryan(叶祥润) 
    请问:保存按扭是否是保存当前所画的的图形为图片格式啊 如:gif jpg bmp 等!
    你那有这样的功能吗?
      

  8.   

    我是保存矢量格式的,将DataList序列化后保存的,如果保存为bmp应该更简单。我原来是在Panel上画的,你把Panel替换成PictureBox,然后做些其他的细节处理,具体我就不说了,你在网上找找看。因为要下班了,回家有空就给你看看。