Используя GDI+ и C#, я пытаюсь нарисовать прямоугольник с помощью движения мыши на панели (называемой DrawingPanel), я также использую двойную буферизацию. Мышь движется.
Вот мой код...
Rectangle mRect = new Rectangle();
Boolean isDragging = false;
public Form1()
{
InitializeComponent();
this.DrawingPanel.Paint += new PaintEventHandler(this.OnPanelPaint);
this.DrawingPanel.MouseMove += new MouseEventHandler(this.OnPanelMouseMove);
this.DrawingPanel.MouseDown += new MouseEventHandler(this.OnPanelMouseDown);
this.DrawingPanel.MouseUp += new MouseEventHandler(this.OnPanelMouseUp);
this.DoubleBuffered = true;
}
private void OnPanelPaint(object sender, PaintEventArgs e)
{
using (Graphics g = this.DrawingPanel.CreateGraphics())
{
g.DrawRectangle(Pens.Black, mRect);
g.FillRectangle(Brushes.SkyBlue, mRect);
}
}
private void OnPanelMouseMove(object sender, MouseEventArgs e)
{
if(isDragging)
{
mRect = new Rectangle(mRect.Left, mRect.Top, e.X - mRect.Left, e.Y - mRect.Top);
this.DrawingPanel.Invalidate();
}
}
private void OnPanelMouseDown(object sender, MouseEventArgs e)
{
mRect = new Rectangle(e.Location, new Size(0, 0));
this.DrawingPanel.Invalidate();
isDragging = true;
}
private void OnPanelMouseUp(object sender, MouseEventArgs e)
{
isDragging = false;
}
Любая идея, почему это происходит до сих пор?
OnPanelMouseDown
и выполнения методаInValidate()
вForms MouseMove Event
, поэтому вместоthis.DrawingPanel.Invalidate();
просто вызовитеInvalidate()
посмотрите, поможет ли это - person MethodMan   schedule 13.02.2013