private void panel1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
         MPdown.x=e.X;
MPdown.y=e.Y;
}private void panel1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(e.Button==MouseButtons.Left)
{
Graphics graphics = this.panel1.CreateGraphics();
graphics.DrawRectangle(RedPen,(float)MPdown.x,(float)MPdown.y,(float)(e.X-MPdown.x),(float)(e.Y-MPdown.y));
}
this.panel1.Invalidate();
}
---------------------------------------
public class MyPanel : System.Windows.Forms.Panel
{
public MyPanel() : base()
{
SetStyle(ControlStyles.UserPaint|ControlStyles.DoubleBuffer|ControlStyles.AllPaintingInWmPaint|ControlStyles.ResizeRedraw,true);
this.UpdateStyles();
         }
}
---------------------------------------
MPdown是我存放鼠标位置的结构体panel1是MyPanel 
---------------------------------------
运行鼠标圈选的时候总是闪烁得厉害
请高手指点……谢谢!!

解决方案 »

  1.   

    panel1_MouseMove用来记录鼠标坐标,不要用来刷新界面重载protected的OnPaint方法来绘制这个矩形
      

  2.   

    怎么会呢
    实际上this.panel1.Invalidate();这句也会引起刷新
      

  3.   

    private bool down = false;
    private Point startPos = new Point(0, 0);
    private Point endPos = new Point(0, 0);private void panel1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    down = true;
    startPos = new Point(e.X, e.Y);
    }private void panel1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    down = false;
    }private void panel1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    endPos = new Point(e.X, e.Y);
    panel1.Invalidate();
    }private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
    if(down)
    {
    Pen pen = new Pen(Color.Blue, 0.1f);
    pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
    Rectangle rect = new Rectangle(
    (int)Math.Min(startPos.X, endPos.X), 
    (int)Math.Min(startPos.Y, endPos.Y), 
    (int)Math.Abs(endPos.X - startPos.X), 
    (int)Math.Abs(endPos.Y - startPos.Y));
    e.Graphics.DrawRectangle(pen, rect);
    }
    }
      

  4.   

    谢谢  chinasdp() 和 Sunmast(Maybe I'm Amazed)
    分少笑纳