2014-11-30 3 views
-1

Я хочу, чтобы иметь возможность рисовать графику в окне формы вместо изображения. Но не похоже, что окно формы захватывает событие mousemove.Событие MouseMove в форме

namespace CollisionTest 
    { 
     public partial class Form1 : Form 
     { 
      private Graphics paper; 
      private Pen pen; 

      public Form1() 
      { 
       InitializeComponent(); 
       //paper = pictureBox1.CreateGraphics(); 
       paper = this.CreateGraphics(); 
       pen = new Pen(Color.Blue); 
       pen.Width = 5; 
       this.MouseMove += new System.Windows.Forms.MouseEventHandler(Form1_MouseMove); 
      } 
      private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) 
      { 
       paper.Clear(Form1.ActiveForm.BackColor); 
       paper.DrawRectangle(pen, e.X + 10, this.Height - 20, 50, 10); 
      } 
     } 
    } 
+0

добавить точку останова в первой строке метода, вы увидите. – kennyzx

+0

Не создавайте объект Graphics в своем конструкторе. Создайте его, когда вам нужно рисовать. – siride

ответ

0

document.Clear method Очищает всю поверхность чертежа и заполняет его указанным цветом фона.

поэтому, когда вы перемещаете мышь, вы сначала очищаете графический объект и рисуете что-то, чтобы не видеть ничего. тест с удалением:

paper.Clear(Form1.ActiveForm.BackColor); 

из кода

+0

... но вы можете видеть, что нарисовано после вызова Clear(). Да, он стирает то, что было раньше, но не стирает то, что нарисовано с помощью DrawRectangle(). Это может быть желаемое поведение. – siride

0

Похоже, вы хотите «понг» происходит в нижней части формы?

Просто измените this.Height на this.ClientRectangle.Height:

public partial class Form1 : Form 
{ 

    private Pen pen; 
    private Graphics paper; 

    public Form1() 
    { 
     InitializeComponent(); 
     pen = new Pen(Color.Blue, 5); 
     paper = this.CreateGraphics(); 
     this.MouseMove += new System.Windows.Forms.MouseEventHandler(Form1_MouseMove); 
    } 

    private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) 
    { 
      paper.Clear(this.BackColor); 
      paper.DrawRectangle(pen, e.X + 10, this.ClientRectangle.Height - 20, 50, 10); 
    } 

}